@hey-api/openapi-ts 0.66.2 → 0.66.4
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/dist/chunk-SZXCPR5B.js +14 -0
- package/dist/chunk-SZXCPR5B.js.map +1 -0
- package/dist/index.cjs +7 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -7955
- package/dist/index.d.ts +6 -7955
- package/dist/index.js +173 -183
- package/dist/index.js.map +1 -1
- package/dist/internal.cjs +13 -0
- package/dist/internal.cjs.map +1 -0
- package/dist/internal.d.cts +37 -0
- package/dist/internal.d.ts +37 -0
- package/dist/internal.js +2 -0
- package/dist/internal.js.map +1 -0
- package/dist/types.d-CuJUnztx.d.cts +7977 -0
- package/dist/types.d-CuJUnztx.d.ts +7977 -0
- package/package.json +14 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mergeHeaders.ts","../src/getSpec.ts","../src/getLogs.ts","../src/plugins/@hey-api/client-core/config.ts","../src/plugins/@hey-api/client-core/utils.ts","../src/compiler/classes.ts","../src/utils/regexp.ts","../src/utils/escape.ts","../src/compiler/utils.ts","../src/utils/config.ts","../src/compiler/types.ts","../src/compiler/module.ts","../src/compiler/convert.ts","../src/compiler/return.ts","../src/compiler/transform.ts","../src/compiler/typedef.ts","../src/compiler/index.ts","../src/generate/utils.ts","../src/generate/client.ts","../src/utils/url.ts","../src/utils/ref.ts","../src/utils/stringCase.ts","../src/plugins/shared/utils/ref.ts","../src/plugins/@hey-api/typescript/ref.ts","../src/plugins/@hey-api/client-core/client.ts","../src/plugins/@hey-api/client-core/createClientConfig.ts","../src/plugins/@hey-api/client-core/plugin.ts","../src/plugins/@hey-api/client-axios/config.ts","../src/plugins/@hey-api/client-fetch/config.ts","../src/plugins/@hey-api/client-next/config.ts","../src/plugins/@hey-api/client-nuxt/config.ts","../src/plugins/@hey-api/legacy-angular/config.ts","../src/plugins/@hey-api/legacy-axios/config.ts","../src/plugins/@hey-api/legacy-fetch/config.ts","../src/plugins/@hey-api/legacy-node/config.ts","../src/plugins/@hey-api/legacy-xhr/config.ts","../src/openApi/shared/utils/identifier.ts","../src/plugins/@hey-api/schemas/plugin.ts","../src/generate/files.ts","../src/ir/context.ts","../src/openApi/shared/utils/filter.ts","../src/openApi/shared/utils/parameter.ts","../src/openApi/common/parser/sanitize.ts","../src/openApi/shared/utils/operation.ts","../src/ir/mediaType.ts","../src/openApi/2.0.x/parser/mediaType.ts","../src/ir/pagination.ts","../src/ir/utils.ts","../src/openApi/shared/utils/discriminator.ts","../src/openApi/shared/utils/schema.ts","../src/openApi/2.0.x/parser/schema.ts","../src/openApi/2.0.x/parser/pagination.ts","../src/openApi/2.0.x/parser/operation.ts","../src/openApi/2.0.x/parser/parameter.ts","../src/openApi/2.0.x/parser/server.ts","../src/openApi/2.0.x/parser/index.ts","../src/openApi/3.0.x/parser/mediaType.ts","../src/openApi/3.0.x/parser/schema.ts","../src/openApi/3.0.x/parser/pagination.ts","../src/openApi/3.0.x/parser/operation.ts","../src/openApi/3.0.x/parser/parameter.ts","../src/openApi/3.0.x/parser/requestBody.ts","../src/openApi/3.0.x/parser/server.ts","../src/openApi/3.0.x/parser/index.ts","../src/openApi/3.1.x/parser/mediaType.ts","../src/openApi/3.1.x/parser/schema.ts","../src/openApi/3.1.x/parser/pagination.ts","../src/openApi/3.1.x/parser/operation.ts","../src/openApi/3.1.x/parser/parameter.ts","../src/openApi/3.1.x/parser/requestBody.ts","../src/openApi/3.1.x/parser/server.ts","../src/openApi/3.1.x/parser/index.ts","../src/utils/const.ts","../src/utils/transform.ts","../src/utils/unique.ts","../src/utils/sort.ts","../src/utils/enum.ts","../src/utils/meta.ts","../src/utils/type.ts","../src/openApi/common/parser/operation.ts","../src/openApi/index.ts","../src/plugins/@hey-api/schemas/plugin-legacy.ts","../src/plugins/@hey-api/schemas/config.ts","../src/ir/parameter.ts","../src/ir/schema.ts","../src/ir/operation.ts","../src/utils/postprocess.ts","../src/plugins/zod/plugin.ts","../src/plugins/@hey-api/transformers/plugin.ts","../src/plugins/@hey-api/sdk/constants.ts","../src/plugins/@hey-api/sdk/plugin-legacy.ts","../src/plugins/@hey-api/sdk/typeOptions.ts","../src/plugins/@hey-api/sdk/plugin.ts","../src/plugins/@hey-api/sdk/config.ts","../src/plugins/@hey-api/typescript/plugin-legacy.ts","../src/plugins/@hey-api/transformers/plugin-legacy.ts","../src/plugins/@hey-api/transformers/config.ts","../src/plugins/shared/utils/case.ts","../src/plugins/@hey-api/typescript/clientOptions.ts","../src/plugins/@hey-api/typescript/plugin.ts","../src/plugins/@hey-api/typescript/config.ts","../src/plugins/@tanstack/query-core/useType.ts","../src/plugins/@tanstack/query-core/queryKey.ts","../src/plugins/@tanstack/query-core/infiniteQueryOptions.ts","../src/plugins/@tanstack/query-core/mutationOptions.ts","../src/plugins/@tanstack/query-core/queryOptions.ts","../src/plugins/@tanstack/query-core/plugin.ts","../src/plugins/@tanstack/query-core/plugin-legacy.ts","../src/plugins/@tanstack/angular-query-experimental/config.ts","../src/plugins/@tanstack/react-query/config.ts","../src/plugins/@tanstack/solid-query/config.ts","../src/plugins/@tanstack/svelte-query/config.ts","../src/plugins/@tanstack/vue-query/config.ts","../src/plugins/fastify/plugin.ts","../src/plugins/fastify/config.ts","../src/plugins/zod/config.ts","../src/plugins/index.ts","../src/initConfigs.ts"],"names":["mergeHeaders","headers","mergedHeaders","header","iterator","key","value","v","getSpec","fetchOptions","inputPath","timeout","watch","refParser","$RefParser","resolvedInput","getResolvedInput","arrayBuffer","hasChanged","response","request","sendRequest","error","eTag","lastModified","content","getLogs","userConfig","logs","clientDefaultConfig","clientId","getClientBaseUrlKey","config","client","getClientPlugin","name","plugin","illegalStartCharactersRegExp","numberRegExp","reservedBrowserGlobalsRegExp","reservedJavaScriptGlobalsRegExp","reservedJavaScriptKeywordsRegExp","reservedNodeGlobalsRegExp","reservedTypeScriptKeywordsRegExp","validTypescriptIdentifierRegExp","escapeName","unescapeName","escapeComment","_l","w","EOL","_config","getConfig","setConfig","isLegacyClient","legacyNameFromConfig","printer","ts","createSourceFile","sourceText","blankSourceFile","unescapeUnicode","_","hex","tsNodeToString","node","unescape","result","stringToTsNodes","createIdentifier","text","ots","alias","asType","nameNode","aliasNode","hasBothQuotes","hasNewlines","hasUnescapedBackticks","isBacktickEscaped","createStringLiteral","isTsNode","isType","processCommentObject","commentObject","lines","line","jsdocTexts","index","jsdoc","cleanedJsdoc","addLeadingComments","comments","isObjectStyle","comment","commentObjects","createTypeNode","base","args","createTypeReferenceNode","arg","createPropertyAccessChain","expression","createPropertyAccessExpression","isOptional","nodeExpression","nodeName","createNull","toExpression","identifiers","isValueAccess","shorthand","createArrayLiteralExpression","createObjectType","parts","toAccessLevelModifiers","access","keyword","modifiers","toParameterDeclarations","parameters","parameter","createParameterDeclaration","param","createKeywordTypeNode","kind","toTypeParameters","types","createTypeParameterDeclaration","createTypeOperatorNode","operator","type","operatorKeyword","constraint","defaultType","createMappedTypeNode","members","nameType","questionToken","readonlyToken","typeParameter","createLiteralTypeNode","literal","createArrowFunction","async","multiLine","returnType","statements","createBlock","createAnonymousFunction","elements","createAwaitExpression","createFunctionTypeNode","typeParameters","obj","properties","canShorthand","assignment","nameIdentifier","createAsExpression","initializer","createPropertyAssignment","createEnumDeclaration","enumMemberComments","enumMember","createEnumMember","createNamespaceDeclaration","createIndexedAccessTypeNode","indexType","objectType","isSingleQuote","createConditionalExpression","condition","whenFalse","whenTrue","createTypeOfExpression","createTypeAliasDeclaration","exportType","typeArguments","typeName","createTypeParenthesizedNode","required","createNewExpression","argumentsArray","createForOfStatement","awaitModifier","statement","createAssignment","left","right","createRegularExpressionLiteral","flags","createTemplateLiteralType","spans","spanText","item","span","createExportAllDeclaration","module","createCallExpression","functionName","createNamedExportDeclarations","exports","exportedTypes","hasNonTypeExport","exportClause","moduleSpecifier","createConstVariable","assertion","destructure","exportConst","declaration","createNamedImportDeclarations","imports","importedTypes","hasNonTypeImport","namedBindings","importClause","createConstructorDeclaration","accessLevel","createMethodDeclaration","isStatic","createClassDeclaration","decorator","m","member","expressionToStatement","createReturnStatement","createReturnFunctionCall","createReturnVariable","createSafeAccessExpression","path","element","createAccessExpression","createPropertyAccessExpressions","expressions","createBinaryExpression","createIfStatement","elseStatement","thenStatement","createDateTransformMutation","safeAccessExpression","accessExpression","createFunctionTransformMutation","transformerName","createArrayTransformMutation","createDateTransformerExpression","parameterName","createArrayMapTransform","transformExpression","nullNode","maybeNullable","isNullable","createTypeInterfaceNode","indexProperty","useLegacyResolution","propertyTypes","property","signature","indexSignature","createTypeUnionNode","nodes","createTypeIntersectionNode","createTypeTupleNode","createTypeRecordNode","keys","values","keyNode","valueNode","createTypeArrayNode","compiler","ensureDirSync","fs","relativeModulePath","moduleOutput","sourceOutput","outputParts","getClientSrcPath","pluginFilePathComponents","clientModulePath","clientSrcPath","outputPath","clientApi","parseUrlRegExp","parseUrl","errorResponse","match","host","protocol","irRef","isRefOpenApiComponent","$ref","refToParts","refToName","resolveRef","spec","current","part","p","uppercaseRegExp","lowercaseRegExp","identifierRegExp","separatorsRegExp","leadingSeparatorsRegExp","separatorsAndIdentifierRegExp","numbersAndIdentifierRegExp","preserveCase","_case","string","isLastCharLower","isLastCharUpper","isLastLastCharUpper","isLastLastCharPreserved","separator","character","nextIndex","nextCharacter","isSeparatorBeforeNextCharacter","characterLower","characterUpper","stringCase","stripLeadingSeparators","identifier","offset","operationIrRef","id","affix","typesId","refIdentifier","onGet","importIdentifierData","context","file","operation","identifierData","importIdentifierError","identifierError","importIdentifierResponse","identifierResponse","resolveBaseUrlString","baseUrl","servers","createClient","clientModule","createConfig","clientOptions","createClientConfig","defaultValues","resolvedBaseUrl","url","createConfigParameters","createClientConfigType","configType","defaultClientOptions","defaultClientOptionsType","tType","typeCreateClientConfig","clientPluginHandler","defaultConfig","regexps","ensureValidIdentifier","regexp","schemasId","stripSchema","schema","schemaToJsonSchemaDraft_04","_schema","schemaToJsonSchemaDraft_05","schemaToJsonSchema2020_12","schemaName","customName","schemasV2_0_X","schemasV3_0_X","schemasV3_1_X","handler","TypeScriptFile","dir","exportFromIndex","identifierCase","namespace","refValue","ensureUniqueIdentifier","importedItem","moduleMap","splitNameAndExtension","filePath","configFileParts","cfgParts","thisPathParts","filePathParts","relativePath","pathArray","relativePathToFile","relativeFolder","fileName","options","extension","output","importsStringArray","_module","count","create","nameTransformer","nameWithTransform","nameWithCasing","nameValue","IRContext","event","callbackFn","outputDir","createdFile","isFiltersMatch","filters","filter","field","canProcessRef","excludeFilters","includeFilters","state","createFilter","matcher","createFilters","matchers","mergeParametersObjects","source","target","ensureValidTypeScriptJavaScriptIdentifier","replaced","sanitizeNamespaceIdentifier","sanitizeOperationParameterName","withoutBrackets","ensureUniqueOperationId","method","operationIds","operationKey","operationToId","urlWithoutPlaceholders","fileLikeRegExp","jsonMimeRegExp","multipartFormDataMimeRegExp","textMimeRegExp","xWwwFormUrlEncodedMimeRegExp","isMediaTypeFileLike","mediaType","mediaTypeToIrMediaType","contentToSchema","mediaTypeObject","mimeTypes","DEFAULT_PAGINATION_KEYWORDS","getPaginationKeywordsRegExp","keywords","pattern","addItemsToSchema","items","logicalOperator","mutateSchemaOneItem","discriminatorValue","mapping","mergeSchemaAccessScopes","a","b","mergedScopes","scope","getSchemaType","parseSchemaJsDoc","irSchema","parseSchemaMeta","parseArray","schemaItems","irItemsSchema","schemaToIrSchema","ofArray","parseBoolean","parseNumber","parseObject","schemaProperties","irPropertySchema","irAdditionalPropertiesSchema","parseString","initIrSchema","parseAllOf","schemaType","compositionSchemas","compositionSchema","irCompositionSchema","ref","irDiscriminatorSchema","irRefSchema","irObjectSchema","parseOneType","requiredProperty","finalCompositionSchema","nestedItems","parseEnum","enumValue","typeOfEnumValue","enumType","irTypeSchema","parseRef","refSchema","parseNullableType","typeIrSchema","parseType","parseUnknown","parseSchema","isPaginationType","paginationField","finalSchema","allOf","pagination","parseOperationJsDoc","irOperation","initIrOperation","operationToIrOperation","securitySchemesMap","isRequestBodyRequired","requestBodyObject","requestBodyObjectRequired","requestBodyParameter","requestBody","responseObject","securitySchemeObjects","securityRequirementObject","securitySchemeObject","irSecuritySchemeObject","parseOperation","defaultExplode","collectionFormat","defaultStyle","_in","parametersArrayToObject","parametersObject","parameterOrReference","parameterToIrParameter","style","irParameter","parseServers","schemes","scheme","parseV2_0_X","shouldProcessRef","pathItem","finalPathItem","commonOperation","operationArgs","$refDelete","$refGet","$refHead","$refOptions","$refPatch","$refPost","$refPut","parseAnyOf","parseOneOf","defaultAllowReserved","explode","parseParameter","requestBodyToIrRequestBody","irRequestBody","parseRequestBody","parseV3_0_X","securityOrReference","requestBodyOrReference","$refTrace","getSchemaTypes","irItemSchema","parseNull","schemaTypes","parseManyTypes","nonNullCompositionSchemas","parseV3_1_X","refSchemasPartial","transformServiceName","transformTypeName","cleanAndTransformTypeName","transformed","unique","arr","sort","nameA","nameB","sorterByName","sortByName","enumKey","enumUnionType","enums","enumerator","union","enumEntry","getSchemasMeta","definitionName","isModelDate","model","typeReference","typeNode","meta","typeArray","toType","typeEnum","typeDict","typeUnionOrIntersection","typeInterface","isLegacy","maybeRequired","transformTypeKeyName","setUniqueTypeName","unsetUniqueTypeName","getOperationKey","isOperationParameterRequired","parseOpenApiSpec","ensureValidSchemaOutput","parentKey","toSchemaName","validName","handlerLegacy","files","openApi","addSchema","definition","hasParameterGroupObjectRequired","parameterGroup","hasParametersObjectRequired","parameterWithPagination","deduplicateSchema","uniqueItems","typeIds","typeId","liftedSchema","hasOperationDataRequired","operationPagination","body","resolvedSchema","paginationProp","statusCodeToGroup","statusCode","operationResponsesMap","errors","responses","defaultResponse","inferred","description","errorKeys","errorUnion","responseKeys","responseUnion","getServiceName","zodId","coerceIdentifier","defaultIdentifier","intersectionIdentifier","lazyIdentifier","lengthIdentifier","literalIdentifier","maxIdentifier","mergeIdentifier","minIdentifier","optionalIdentifier","readonlyIdentifier","regexIdentifier","unionIdentifier","zIdentifier","arrayTypeToZodSchema","arrayExpression","unknownTypeToZodSchema","itemExpressions","schemaToZodSchema","booleanTypeToZodSchema","enumTypeToZodSchema","enumMembers","neverTypeToZodSchema","nullTypeToZodSchema","numberTypeToZodSchema","isBigInt","numberExpression","objectTypeToZodSchema","isRequired","propertyExpression","propertyName","stringTypeToZodSchema","stringExpression","tupleTypeToZodSchema","tupleElements","undefinedTypeToZodSchema","voidTypeToZodSchema","schemaTypeToZodSchema","operationToZodSchema","optional","isCircularReference","identifierRef","itemTypes","firstSchema","callParameter","bigIntExpressions","dataExpression","bigIntCallExpression","dateExpressions","identifierDate","operationTransformerIrRef","schemaIrRef","schemaResponseTransformerRef","transformersId","dataVariableName","ensureStatements","isNodeReturnStatement","schemaResponseTransformerNodes","processSchemaType","callExpression","mapCallbackStatements","stmt","propertyAccessExpression","propertyNodes","noNullableTypesInSchema","x","arrayNodes","identifierItem","identifierResponseTransformer","responseTransformerNode","nuxtTypeComposable","nuxtTypeDefault","nuxtTypeResponse","generateImport","onImport","setUniqueTypeNameArgs","created","modelResponseTransformerTypeName","operationDataTypeName","operationErrorTypeName","operationResponseTransformerTypeName","operationResponseTypeName","operationOptionsLegacyParserType","importedType","throwOnError","optionsName","toOperationParamType","getDefaultPrintable","typePath","toOperationReturnType","toOperationComment","params","successResponses","toRequestOptions","onClientImport","responseTransformerName","contents","toObj","prev","curr","errorResponses","serviceFunctionIdentifier","handleIllegal","toOperationStatements","errorType","responseType","processService","onNode","service","clientPlugin","throwOnErrorTypeGeneric","compileFunctionParams","sdkOutput","imported","createTypeOptions","sdkId","isNuxtClient","tDataShape","clientType","typeOptions","operationOptionsType","getResponseType","contentType","cleanContent","securitySchemeObjectToAuthObject","operationAuth","auth","authObject","operationStatements","isRequiredOptions","requestOptions","identifierTransformer","identifierSchema","heyApiClient","optionsClient","generateClassSdk","sdks","uniqueTags","tag","generateFlatSdk","treeName","emptyModel","generateEnum","leadingComment","generateType","onCreated","processComposition","props","enumDeclarations","processType","processEnum","processScopedEnum","processModel","processServiceTypes","pathsMap","pathMap","methodMap","bodyParameters","bodyParameter","headerParameters","pathParameters","queryParameters","operationProperties","_method","methodParameters","operationName","reqKey","reqResParameters","code","resKey","isVoidResponse","getRefModels","refModel","ensureModelResponseTransformerExists","modelName","generateResponseTransformer","processArray","refModels","nameModelResponseTransformer","processProperty","onRemoveNode","nonVoidResponses","nameCreated","fieldName","stringType","serverToBaseUrlType","server","createClientOptions","typeClientOptions","scopeToRef","accessScope","refParts","nameBuilder","processedName","processNameBuilder","shouldSkipSchema","addJavaScriptEnum","enumObject","schemaToEnumObject","typeofItems","typeOfItemConst","addTypeEnum","schemaToType","addTypeScriptEnum","arrayTypeToIdentifier","booleanTypeToIdentifier","enumTypeToIdentifier","isRefComponent","shouldExportEnum","objectNode","enumNode","numberTypeToIdentifier","objectTypeToIdentifier","indexPropertyItems","hasOptionalProperties","hasSkippedProperties","stringTypeToIdentifier","tupleTypeToIdentifier","schemaTypeToIdentifier","irParametersToIrSchema","operationToDataType","data","dataRequired","operationToType","identifierErrors","errorsType","keyofType","identifierResponses","responsesType","finalRef","useTypeData","useTypeError","typeError","axiosError","useTypeResponse","createQueryKeyFn","queryKeyName","TOptionsType","infiniteIdentifier","optionsIdentifier","createQueryKeyFunction","identifierCreateQueryKey","fn","createQueryKeyLiteral","isInfinite","createQueryKeyType","queryKeyType","queryKeyFunctionIdentifier","queryKeyStatement","typeQueryKey","typeData","identifierQueryKey","createInfiniteParamsFn","infiniteQueryOptionsFn","createInfiniteParamsFunction","infiniteQueryOptionsFunctionIdentifier","createInfiniteQueryOptions","queryFn","typeResponse","typePageObjectParam","typePageParam","infiniteQueryKeyName","mutationOptionsFn","mutationOptionsFunctionIdentifier","createMutationOptions","mutationsType","mutationType","queryOptionsFn","queryOptionsFunctionIdentifier","createQueryOptions","toInfiniteQueryOptionsName","toMutationOptionsName","toQueryOptionsName","toQueryKeyName","getPaginationIn","createTypeData","typesModulePath","nameTypeData","createTypeError","pluginName","nameTypeError","createTypeResponse","nameTypeResponse","typeInfiniteData","hasCreateInfiniteParamsFunction","hasCreateQueryKeyParamsFunction","hasInfiniteQueries","hasMutations","hasQueries","processedOperations","hasUsedQueryFn","paginationParameter","fastifyId","operationToRouteHandler","fileTypes","errorsTypeReference","responsesTypeReference","replyTypes","routeHandlers","routeHandler","defaultPluginConfigs","defaultPlugins","getInput","input","getPluginsConfig","pluginConfigs","userPlugins","userPluginsConfig","circularReferenceTracker","pluginOrder","plugins","dfs","defaultOptions","userOptions","nativePluginOption","dependency","errorMessage","userPlugin","getOutput","isPluginClient","getPlugins","definedPlugins","getWatch","initConfigs","configurationFile","configFromFile","loadConfig","configFile","dryRun","experimentalParser","exportCore","useOptions"],"mappings":"oYACO,IAAMA,EAAe,CAAA,CAAA,GACvBC,CACS,GAAA,CACZ,IAAMC,CAAgB,CAAA,IAAI,OAC1B,CAAA,IAAA,IAAWC,CAAUF,IAAAA,CAAAA,CAAS,CAC5B,GAAI,CAACE,CAAAA,EAAU,OAAOA,CAAAA,EAAW,QAC/B,CAAA,SAGF,IAAMC,CACJD,CAAAA,CAAAA,YAAkB,OAAUA,CAAAA,CAAAA,CAAO,OAAQ,EAAA,CAAI,OAAO,OAAQA,CAAAA,CAAM,CAEtE,CAAA,IAAA,GAAW,CAACE,CAAAA,CAAKC,CAAK,CAAKF,GAAAA,CAAAA,CACzB,GAAIE,CAAAA,GAAU,IACZJ,CAAAA,CAAAA,CAAc,MAAOG,CAAAA,CAAG,CACf,CAAA,KAAA,GAAA,KAAA,CAAM,OAAQC,CAAAA,CAAK,CAC5B,CAAA,IAAA,IAAWC,KAAKD,CACdJ,CAAAA,CAAAA,CAAc,MAAOG,CAAAA,CAAAA,CAAKE,CAAW,CAAA,CAAA,KAE9BD,IAAU,MAGnBJ,EAAAA,CAAAA,CAAc,GACZG,CAAAA,CAAAA,CACA,OAAOC,CAAAA,EAAU,SAAW,IAAK,CAAA,SAAA,CAAUA,CAAK,CAAA,CAAKA,CACvD,EAGN,CACA,OAAOJ,CACT,CAAA,CCLaM,IAAAA,EAAAA,CAAU,MAAO,CAC5B,aAAAC,CACA,CAAA,SAAA,CAAAC,CACA,CAAA,OAAA,CAAAC,CACA,CAAA,KAAA,CAAAC,CACF,CAKyC,GAAA,CACvC,IAAMC,CAAAA,CAAY,IAAIC,8BAAAA,CAChBC,EAAgBC,oCAAiB,CAAA,CAAE,iBAAmBN,CAAAA,CAAU,CAAC,CAAA,CAEnEO,CAEAC,CAAAA,CAAAA,CACAC,CAEJ,CAAA,GAAIJ,CAAc,CAAA,IAAA,GAAS,KAAO,CAAA,CAEhC,GAAIH,CAAM,CAAA,SAAA,EAAaA,CAAM,CAAA,qBAAA,GAA0B,KAAO,CAAA,CAC5D,GAAI,CACF,IAAMQ,CAAU,CAAA,MAAMC,+BAAY,CAAA,CAChC,aAAc,CACZ,MAAA,CAAQ,MACR,CAAA,GAAGZ,CACH,CAAA,OAAA,CAAST,EAAaS,CAAAA,CAAAA,EAAc,OAASG,CAAAA,CAAAA,CAAM,OAAO,CAC5D,CACA,CAAA,OAAA,CAAAD,EACA,GAAKI,CAAAA,CAAAA,CAAc,IACrB,CAAC,CAED,CAAA,GAAIK,EAAQ,QAAS,CAAA,MAAA,EAAU,GAC7B,CAAA,OAAO,CACL,KAAA,CAAO,SACP,QAAUA,CAAAA,CAAAA,CAAQ,QACpB,CAAA,CAGFD,CAAWC,CAAAA,CAAAA,CAAQ,SACrB,CAAA,MAASE,CAAO,CAAA,CACd,OAAO,CACL,KAAO,CAAA,QAAA,CACP,SAAU,IAAI,QAAA,CAASA,CAAM,CAAA,OAAO,CACtC,CACF,CAEA,GAAI,CAACH,CAAS,CAAA,EAAA,EAAMP,CAAM,CAAA,qBAAA,CAGxB,OAAO,CACL,KAAA,CAAO,QACP,CAAA,QAAA,CAAAO,CACF,CAAA,CAOF,GAJIP,CAAAA,CAAM,qBAA0B,GAAA,MAAA,GAClCA,CAAM,CAAA,qBAAA,CAAwBO,CAAS,CAAA,EAAA,CAAA,CAGrCA,EAAS,MAAW,GAAA,GAAA,CACtB,OAAO,CACL,KAAO,CAAA,cAAA,CACP,QAAAA,CAAAA,CACF,CAGF,CAAA,GAAID,CAAe,GAAA,MAAA,CAAW,CAC5B,IAAMK,EAAOJ,CAAS,CAAA,OAAA,CAAQ,GAAI,CAAA,MAAM,CACpCI,CAAAA,CAAAA,GACFL,CAAaK,CAAAA,CAAAA,GAASX,CAAM,CAAA,OAAA,CAAQ,GAAI,CAAA,eAAe,CAEnDM,CAAAA,CAAAA,EACFN,EAAM,OAAQ,CAAA,GAAA,CAAI,eAAiBW,CAAAA,CAAI,CAG7C,EAAA,CAEA,GAAIL,CAAe,GAAA,MAAA,CAAW,CAC5B,IAAMM,CAAeL,CAAAA,CAAAA,CAAS,QAAQ,GAAI,CAAA,eAAe,CACrDK,CAAAA,CAAAA,GACFN,CAAaM,CAAAA,CAAAA,GAAiBZ,CAAM,CAAA,OAAA,CAAQ,GAAI,CAAA,mBAAmB,CAE/DM,CAAAA,CAAAA,EACFN,CAAM,CAAA,OAAA,CAAQ,IAAI,mBAAqBY,CAAAA,CAAY,CAGzD,EAAA,CAGA,GAAIN,CAAAA,GAAe,MACjB,OAAO,CACL,KAAO,CAAA,cAAA,CACP,QAAAC,CAAAA,CACF,CAEJ,CAEA,GAAI,CACF,IAAMC,CAAU,CAAA,MAAMC,+BAAY,CAAA,CAChC,YAAc,CAAA,CACZ,MAAQ,CAAA,KAAA,CACR,GAAGZ,CACL,EACA,OAAAE,CAAAA,CAAAA,CACA,GAAKI,CAAAA,CAAAA,CAAc,IACrB,CAAC,EAED,GAAIK,CAAAA,CAAQ,QAAS,CAAA,MAAA,EAAU,GAC7B,CAAA,OAAO,CACL,KAAO,CAAA,QAAA,CACP,QAAUA,CAAAA,CAAAA,CAAQ,QACpB,CAAA,CAGFD,CAAWC,CAAAA,CAAAA,CAAQ,SACrB,CAAA,MAASE,CAAO,CAAA,CACd,OAAO,CACL,MAAO,QACP,CAAA,QAAA,CAAU,IAAI,QAAA,CAASA,CAAM,CAAA,OAAO,CACtC,CACF,CAEA,GAAI,CAACH,CAAAA,CAAS,EAGZ,CAAA,OAAO,CACL,KAAO,CAAA,QAAA,CACP,QAAAA,CAAAA,CACF,CAOF,CAAA,GAJAF,CAAcE,CAAAA,CAAAA,CAAS,IACnB,CAAA,MAAMA,CAAS,CAAA,WAAA,EACf,CAAA,IAAI,YAAY,CAAC,CAAA,CAEjBD,CAAe,GAAA,MAAA,CAAW,CAC5B,IAAMO,EAAU,IAAI,WAAA,EAAc,CAAA,MAAA,CAAOR,CAAW,CAAA,CACpDC,EAAaO,CAAYb,GAAAA,CAAAA,CAAM,SAC/BA,CAAAA,CAAAA,CAAM,SAAYa,CAAAA,EACpB,CACF,CAAA,KAEOb,CAAM,CAAA,SAAA,CAGTM,CAAa,CAAA,KAAA,CAFbN,CAAM,CAAA,SAAA,CAAYG,EAAc,IAMpC,CAAA,OAAIG,CAAe,GAAA,KAAA,CACV,CACL,KAAA,CAAO,eACP,QAAUC,CAAAA,CACZ,CASK,CAAA,CACL,IAPW,CAAA,MAAMN,EAAU,MAAO,CAAA,CAClC,WAAAI,CAAAA,CAAAA,CACA,iBAAmB,CAAA,MAAA,CACnB,aAAAF,CAAAA,CACF,CAAC,CAID,CACF,EC/LO,IAAMW,EAAAA,CAAWC,GAAuD,CAC7E,IAAIC,CAAuB,CAAA,CACzB,IAAM,CAAA,IAAA,CACN,MAAO,MACP,CAAA,IAAA,CAAM,OAAQ,CAAA,GAAA,EAChB,CAAA,CACA,OAAI,OAAOD,CAAY,EAAA,IAAA,EAAS,QAC9BC,CAAAA,CAAAA,CAAK,IAAOD,CAAAA,CAAAA,CAAW,KAEvBC,CAAO,CAAA,CACL,GAAGA,CAAAA,CACH,GAAGD,CAAAA,EAAY,IACjB,CAAA,CAEKC,CACT,CAAA,CCjBO,IAAMC,EAAAA,CAAsB,CACjC,aAAA,CAAe,CAAC,qBAAqB,CAAA,CACrC,KAAO,CAAA,CAAC,QAAQ,CAAA,CAChB,OAAS,CAAA,IAAA,CACT,MAAQ,CAAA,KAAA,CACR,eAAiB,CAAA,KAAA,CACjB,MAAQ,CAAA,QACV,ECJO,IAAMC,EAAAA,CAAW,QAIXC,CAAAA,CAAAA,CAAuBC,CAAmB,EAAA,CACrD,IAAMC,CAASC,CAAAA,CAAAA,CAAgBF,CAAM,CAAA,CACrC,OACEC,CAAAA,CAAO,OAAS,uBAChBA,EAAAA,CAAAA,CAAO,IAAS,GAAA,sBAAA,CAET,SAEF,CAAA,SACT,CAEaC,CAAAA,CAAAA,CACXF,CACyC,EAAA,CACzC,IAAWG,IAAAA,CAAAA,IAAQH,CAAO,CAAA,WAAA,CAAa,CACrC,IAAMI,CAAAA,CAASJ,CAAO,CAAA,OAAA,CAAQG,CAAI,CAAA,CAClC,GAAIC,CAAQ,EAAA,KAAA,EAAO,QAAS,CAAA,QAAQ,CAClC,CAAA,OAAOA,CAEX,CAEA,OAAO,CAEL,IAAA,CAAM,EACR,CACF,CChCA,CCGO,IAAMC,GAA+B,sBAM/BC,CAAAA,EAAAA,CAAe,iBAEfC,CAAAA,EAAAA,CACX,iDAEWC,CAAAA,EAAAA,CACX,iGAEWC,EACX,CAAA,sUAAA,CAEWC,EAA4B,CAAA,4BAAA,CAE5BC,EACX,CAAA,kGAAA,CAMWC,EACX,CAAA,oDAAA,CC1BK,IAAMC,EAAAA,CAAcvC,CACrBA,EAAAA,CAAAA,CAAAA,EAASA,CAAU,GAAA,EAAA,IACrBsC,GAAgC,SAAY,CAAA,CAAA,CAExC,CADcA,EAAAA,CAAgC,IAAKtC,CAAAA,CAAK,CAEnD,CAAA,CAAA,CAAA,CAAA,EAAIA,CAAK,CAAA,CAAA,CAAA,CAGbA,CAGIwC,CAAAA,EAAAA,CAAgBxC,CACvBA,EAAAA,CAAAA,EAASA,EAAM,UAAW,CAAA,GAAG,CAAKA,EAAAA,CAAAA,CAAM,QAAS,CAAA,GAAG,CAC/CA,CAAAA,CAAAA,CAAM,KAAM,CAAA,CAAA,CAAGA,CAAM,CAAA,MAAA,CAAS,CAAC,CAAA,CAEjCA,EAGIyC,CAAiBzC,CAAAA,CAAAA,EAC5BA,CACG,CAAA,OAAA,CAAQ,OAAS,CAAA,GAAG,EACpB,OAAQ,CAAA,OAAA,CAAS,GAAG,CAAA,CACpB,OAAQ,CAAA,YAAA,CAAc,CAAC0C,CAAIC,CAAAA,CAAAA,GAAMC,QAAMD,CAAAA,CAAAA,CAAE,IAAK,EAAC,CC1BpD,CCGA,IAAIE,EAAAA,CAESC,CAAY,CAAA,IAAM,CAC7B,IAAMpB,CAAAA,CAASmB,EACTf,CAAAA,CAAAA,CAASF,CAAgBF,CAAAA,CAAM,EAGrC,OAAAA,CAAAA,CAAO,MAASI,CAAAA,CAAAA,CACTJ,CACT,CAAA,CAEaqB,GAAarB,CACxBmB,GAAAA,EAAAA,CAAUnB,CACHoB,CAAAA,CAAAA,EAGIE,CAAAA,CAAAA,CAAAA,CAAkBtB,CACdE,EAAAA,CAAAA,CAAgBF,CAAM,CAAA,CACvB,IAAK,CAAA,UAAA,CAAW,SAAS,CAAA,CAM5BuB,GAAwBvB,CAAmB,EAAA,CACtD,GAAKsB,CAAAA,CAAetB,CAAM,CAAA,CAI1B,OAAOA,CAAO,CAAA,IAChB,CDrBA,CAAA,IAAMwB,EAAUC,CAAAA,kBAAAA,CAAG,cAAc,CAC/B,OAAA,CAASA,kBAAG,CAAA,WAAA,CAAY,QACxB,CAAA,cAAA,CAAgB,KAClB,CAAC,CAEYC,CAAAA,EAAAA,CAAoBC,CAC/BF,EAAAA,kBAAAA,CAAG,gBACD,CAAA,EAAA,CACAE,EACAF,kBAAG,CAAA,YAAA,CAAa,MAChB,CAAA,KAAA,CACAA,kBAAG,CAAA,UAAA,CAAW,EAChB,CAAA,CAEIG,EAAkBF,CAAAA,EAAAA,CAAiB,EAAE,CAAA,CAErCG,EAAmBvD,CAAAA,CAAAA,EACvBA,EAAM,OAAQ,CAAA,sBAAA,CAAwB,CAACwD,CAAAA,CAAGC,CACxC,GAAA,MAAA,CAAO,YAAa,CAAA,MAAA,CAAO,QAASA,CAAAA,CAAAA,CAAK,EAAE,CAAC,CAC9C,CAAA,CAOK,SAASC,EAAe,CAAA,CAC7B,IAAAC,CAAAA,CAAAA,CACA,QAAAC,CAAAA,CAAAA,CAAW,KACb,CAGW,CAAA,CACT,IAAMC,CAAAA,CAASX,EAAQ,CAAA,SAAA,CACrBC,mBAAG,QAAS,CAAA,WAAA,CACZQ,CACAL,CAAAA,EACF,CAEA,CAAA,GAAI,CAACM,CAAAA,CACH,OAAOC,CAAAA,CAGT,GAAI,CAMF,OAAON,EAAAA,CAAgBM,CAAM,CAC/B,CAAA,KAAQ,CACN,OAAIf,CAAU,EAAA,CAAE,KAAK,KAAU,GAAA,OAAA,EAC7B,OAAQ,CAAA,IAAA,CAAK,yBAA2Be,CAAAA,CAAM,EAEzCA,CACT,CACF,CAOO,SAASC,EAAgB9D,CAAAA,CAAAA,CAAwB,CAEtD,OADaoD,EAAiBpD,CAAAA,CAAK,CACvB,CAAA,UAAA,CAAW,CAAC,CAC1B,CAEO,IAAM+D,CAAAA,CAAmB,CAAC,CAAE,IAAAC,CAAAA,CAAK,IACnBb,kBAAG,CAAA,OAAA,CAAQ,gBAAiBa,CAAAA,CAAI,CAQxCC,CAAAA,CAAAA,CAAM,CAIjB,OAAUjE,CAAAA,CAAAA,EACRA,CAAQmD,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,UAAA,EAAeA,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,WAAA,EAC/C,CAAA,MAAA,CAAQ,CAAC,CAAE,MAAAe,CAAO,CAAA,MAAA,CAAAC,CAAS,CAAA,KAAA,CAAO,IAAAtC,CAAAA,CAAK,CAA8B,GAAA,CACnE,IAAMuC,CAAAA,CAAWL,CAAiB,CAAA,CAAE,IAAMlC,CAAAA,CAAK,CAAC,CAChD,CAAA,GAAIqC,CAAO,CAAA,CACT,IAAMG,CAAAA,CAAYN,CAAiB,CAAA,CAAE,IAAMG,CAAAA,CAAM,CAAC,CAAA,CAClD,OAAOf,kBAAAA,CAAG,QAAQ,qBAAsBgB,CAAAA,CAAAA,CAAQC,CAAUC,CAAAA,CAAS,CACrE,CACA,OAAOlB,kBAAG,CAAA,OAAA,CAAQ,qBAAsBgB,CAAAA,CAAAA,CAAQ,MAAWC,CAAAA,CAAQ,CACrE,CACA,CAAA,MAAA,CAAQ,CAAC,CAAE,KAAAF,CAAAA,CAAAA,CAAO,MAAAC,CAAAA,CAAAA,CAAS,KAAO,CAAA,IAAA,CAAAtC,CAAK,CAAA,GAA8B,CACnE,IAAMuC,EAAWL,CAAiB,CAAA,CAAE,IAAMlC,CAAAA,CAAK,CAAC,CAAA,CAChD,GAAIqC,CAAO,CAAA,CACT,IAAMG,CAAAA,CAAYN,CAAiB,CAAA,CAAE,KAAMG,CAAM,CAAC,CAClD,CAAA,OAAOf,kBAAG,CAAA,OAAA,CAAQ,qBAAsBgB,CAAAA,CAAAA,CAAQC,CAAUC,CAAAA,CAAS,CACrE,CACA,OAAOlB,kBAAAA,CAAG,QAAQ,qBAAsBgB,CAAAA,CAAAA,CAAQ,MAAWC,CAAAA,CAAQ,CACrE,CAAA,CAIA,OAASpE,CACHA,EAAAA,CAAAA,CAAQ,CACHmD,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,2BAAA,CAChBA,mBAAG,UAAW,CAAA,UAAA,CACdA,kBAAG,CAAA,OAAA,CAAQ,oBAAqB,CAAA,IAAA,CAAK,GAAInD,CAAAA,CAAK,CAAC,CACjD,CAEKmD,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,oBAAA,CAAqBnD,CAAK,CAK9C,CAAA,MAAA,CAAQ,CAACA,CAAAA,CAAe4D,CAAW,CAAA,KAAA,GAAU,CAC3C,IAAII,CAAOhE,CAAAA,CAAAA,CACP4D,CACFI,GAAAA,CAAAA,CAAOxB,EAAawB,CAAAA,CAAI,GAE1B,IAAMM,CAAAA,CAAgBN,CAAK,CAAA,QAAA,CAAS,GAAG,CAAA,EAAKA,CAAK,CAAA,QAAA,CAAS,GAAG,CAAA,CACvDO,CAAcP,CAAAA,CAAAA,CAAK,QAAS,CAAA;AAAA,CAAI,CAChCQ,CAAAA,CAAAA,CAAwBR,CAAK,CAAA,UAAA,CAAW,GAAG,CAC3CS,CAAAA,CAAAA,CAAoBT,CAAK,CAAA,UAAA,CAAW,KAAK,CAAA,EAAKA,CAAK,CAAA,QAAA,CAAS,KAAK,CAOvE,CAAA,OAAA,CALGO,CAAeD,EAAAA,CAAAA,EAAiBE,CACjC,GAAA,CAACC,CAEDT,GAAAA,CAAAA,CAAO,KAAKA,CAAK,CAAA,OAAA,CAAQ,WAAa,CAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,MAAQ,CAAA,MAAM,CAAC,CAElEA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,UAAW,CAAA,GAAG,CACdD,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAAC,CAAK,CAAC,CAAA,CAE3BU,EAAoB,CAAA,CAAE,IAAAV,CAAAA,CAAK,CAAC,CACrC,CACF,CAEaW,CAAAA,EAAAA,CAAYhB,CACvBA,EAAAA,CAAAA,GAAS,IACT,EAAA,OAAOA,CAAS,EAAA,QAAA,EAChB,OAAOA,CAAK,CAAA,IAAA,EAAS,QACrB,EAAA,OAAOA,CAAK,CAAA,KAAA,EAAU,QACtB,EAAA,OAAOA,EAAK,GAAQ,EAAA,QAAA,EACpB,OAAOA,CAAAA,CAAK,GAAQ,EAAA,QAAA,CAETiB,EAAa5E,CAAAA,CAAAA,EACxBA,IAAU,MASN6E,CAAAA,EAAAA,CAAuB,CAAC,CAC5B,aAAAC,CAAAA,CAAAA,CACA,IAAAnB,CAAAA,CACF,IAGM,CACJ,IAAMoB,CAAQD,CAAAA,CAAAA,CAAc,KAAM,CAAA,MAAA,CAC/BE,CAAS,EAAA,CAAA,CAAQA,GAASA,CAAS,GAAA,EACtC,CACA,CAAA,GAAI,CAACD,CAAAA,CAAM,MACT,CAAA,OAGF,GAAI,CAACD,CAAAA,CAAc,KAAO,CAAA,CACxB,IAAWE,IAAAA,CAAAA,IAAQD,CACjB5B,CAAAA,kBAAAA,CAAG,2BACDQ,CACAR,CAAAA,kBAAAA,CAAG,UAAW,CAAA,uBAAA,CACd,CAAI6B,CAAAA,EAAAA,CAAI,CACR,CAAA,CAAA,IACF,EAEF,MACF,CAEA,IAAMC,CAAAA,CAAaF,CAAM,CAAA,GAAA,CAAI,CAACC,CAAAA,CAAME,IAAU,CAC5C,IAAIlB,CAAOgB,CAAAA,CAAAA,CACX,OAAIE,CAAUH,GAAAA,CAAAA,CAAM,MAClBf,GAAAA,CAAAA,CAAO,GAAGA,CAAI;AAAA,CAAA,CAAA,CAEEb,kBAAG,CAAA,OAAA,CAAQ,eAAgBa,CAAAA,CAAI,CAEnD,CAAC,CAAA,CAEKmB,CAAQhC,CAAAA,kBAAAA,CAAG,QAAQ,kBACvBA,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,eAAA,CAAgB8B,CAAU,CACrC,CAAA,MACF,CAEMG,CAAAA,CAAAA,CAAe1B,GAAe,CAAE,IAAA,CAAMyB,CAAO,CAAA,QAAA,CAAU,IAAK,CAAC,CAAA,CAChE,OAAQ,CAAA,IAAA,CAAM,EAAE,CAChB,CAAA,OAAA,CAAQ,OAAS,CAAA,EAAE,EAEtBhC,kBAAG,CAAA,0BAAA,CACDQ,CACAR,CAAAA,kBAAAA,CAAG,UAAW,CAAA,sBAAA,CACdiC,CACA,CAAA,IACF,EACF,CAEaC,CAAAA,CAAAA,CAAqB,CAAC,CACjC,SAAAC,CAAW,CAAA,EACX,CAAA,IAAA,CAAA3B,CACF,CAGM,GAAA,CACJ,IAAM4B,CAAAA,CAAgB,EACpBD,CAAS,CAAA,IAAA,CAAME,CAAY,EAAA,OAAOA,GAAY,QAAYA,EAAAA,CAAO,CAG/DC,CAAAA,CAAAA,CAAiBH,EAChBC,CACHE,GAAAA,CAAAA,CAAiB,CACf,CACE,MAAO,IACP,CAAA,KAAA,CAAOH,CACT,CACF,CAGF,CAAA,CAAA,IAAA,IAAWR,CAAiBW,IAAAA,CAAAA,CAC1BZ,GAAqB,CACnB,aAAA,CAAAC,CACA,CAAA,IAAA,CAAAnB,CACF,CAAC,EAEL,CEnNO,CAAA,IAAM+B,EAAiB,CAC5BC,CAAAA,CACAC,CAEIzC,GAAAA,kBAAAA,CAAG,WAAWwC,CAAI,CAAA,CACbA,CAGL,CAAA,OAAOA,GAAS,QACXxC,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsBc,EAAI,MAAO0B,CAAAA,CAAI,CAAC,CAAA,CAGnDE,GAAwB,CAC7B,aAAA,CAAeD,CAAM,EAAA,GAAA,CAAKE,CAAQJ,EAAAA,CAAAA,CAAeI,CAAG,CAAC,EACrD,QAAUH,CAAAA,CACZ,CAAC,CAAA,CAGUI,GAA4B,CAAC,CACxC,UAAAC,CAAAA,CAAAA,CACA,KAAAnE,CACF,CAAA,GAIesB,kBAAG,CAAA,OAAA,CAAQ,0BACtB6C,CACA7C,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,WAAA,CAAYA,mBAAG,UAAW,CAAA,gBAAgB,CACrDtB,CAAAA,CACF,EAIWoE,EAAiC,CAAA,CAAC,CAC7C,UAAA,CAAAD,EACA,UAAAE,CAAAA,CAAAA,CACA,IAAArE,CAAAA,CACF,CAOkC,GAAA,CAChC,IAAMsE,CAAAA,CACJ,OAAOH,CAAe,EAAA,QAAA,CAClBjC,CAAiB,CAAA,CAAE,KAAMiC,CAAW,CAAC,CACrCA,CAAAA,CAAAA,CAEN,GAAIE,CACF,CAAA,OAAOH,EAA0B,CAAA,CAC/B,WAAYI,CACZ,CAAA,IAAA,CAAAtE,CACF,CAAC,EAGH,GAAI,OAAOA,CAAS,EAAA,QAAA,GAClBS,GAAgC,SAAY,CAAA,CAAA,CACxC,CAACA,EAAAA,CAAgC,KAAKT,CAAI,CAAA,CAAA,CAAG,CAE3C,CAACA,CAAK,CAAA,UAAA,CAAW,GAAG,CAAA,EAAK,CAACA,CAAK,CAAA,QAAA,CAAS,GAAG,CAAA,GAE7CA,EAAO,CAAKA,CAAAA,EAAAA,CAAI,CAElB,CAAA,CAAA,CAAA,CAAA,IAAMuE,EAAWrC,CAAiB,CAAA,CAAE,IAAMlC,CAAAA,CAAK,CAAC,CAChD,CAAA,OAAOsB,kBAAG,CAAA,OAAA,CAAQ,8BAA8BgD,CAAgBC,CAAAA,CAAQ,CAC1E,CAGF,IAAMA,CACJ,CAAA,OAAOvE,CAAS,EAAA,QAAA,CAAWkC,EAAiB,CAAE,IAAA,CAAMlC,CAAK,CAAC,CAAIA,CAAAA,CAAAA,CAEhE,OAAOsB,kBAAAA,CAAG,QAAQ,8BAA+BgD,CAAAA,CAAAA,CAAgBC,CAAQ,CAC3E,EAEaC,EAAa,CAAA,IAAsBlD,kBAAG,CAAA,OAAA,CAAQ,YAU9CmD,CAAAA,EAAAA,CAAe,CAAc,CACxC,YAAAC,CAAc,CAAA,EACd,CAAA,aAAA,CAAAC,EACA,SAAAC,CAAAA,CAAAA,CACA,QAAA7C,CAAAA,CAAAA,CACA,MAAA5D,CACF,CAAA,GAMiC,CAC/B,GAAIA,IAAU,IACZ,CAAA,OAAOqG,EAAW,EAAA,CAGpB,GAAI,KAAM,CAAA,OAAA,CAAQrG,CAAK,CAAA,CACrB,OAAO0G,EAA6B,CAAA,CAAE,QAAU1G,CAAAA,CAAM,CAAC,CAGzD,CAAA,GAAI,OAAOA,CAAAA,EAAU,SACnB,OAAO2G,EAAAA,CAAiB,CACtB,WAAA,CAAAJ,EACA,GAAKvG,CAAAA,CAAAA,CACL,SAAAyG,CAAAA,CACF,CAAC,CAGH,CAAA,GAAI,OAAOzG,CAAAA,EAAU,SACnB,OAAOiE,CAAAA,CAAI,MAAOjE,CAAAA,CAAK,EAGzB,GAAI,OAAOA,CAAU,EAAA,SAAA,CACnB,OAAOiE,CAAAA,CAAI,OAAQjE,CAAAA,CAAK,EAG1B,GAAI,OAAOA,CAAU,EAAA,QAAA,CAAU,CAC7B,GAAIwG,CAAAA,CAAe,CAEjB,IAAMI,EAAQ5G,CAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAC7B,OAAOiG,EAA+B,CAAA,CACpC,UAAYW,CAAAA,CAAAA,CAAM,CAAC,CACnB,CAAA,IAAA,CAAMA,CAAM,CAAA,CAAC,CACf,CAAC,CACH,CACA,OAAO3C,EAAI,MAAOjE,CAAAA,CAAAA,CAAO4D,CAAQ,CACnC,CACF,CAAA,CAOaiD,EACXC,CAAAA,CAAAA,EACsB,CACtB,IAAMC,CAAAA,CACJD,CAAW,GAAA,QAAA,CACP3D,mBAAG,UAAW,CAAA,aAAA,CACd2D,CAAW,GAAA,WAAA,CACT3D,mBAAG,UAAW,CAAA,gBAAA,CACd2D,CAAW,GAAA,SAAA,CACT3D,mBAAG,UAAW,CAAA,cAAA,CACd,MACJ6D,CAAAA,CAAAA,CAA+B,EACrC,CAAA,OAAID,CACFC,EAAAA,CAAAA,CAAU,KAAK7D,kBAAG,CAAA,OAAA,CAAQ,cAAe4D,CAAAA,CAAO,CAAC,CAE5CC,CAAAA,CACT,CAOaC,CAAAA,EAAAA,CAA2BC,CACtCA,EAAAA,CAAAA,CAAW,GAAKC,CAAAA,CAAAA,EAAc,CAC5B,GAAI,aAAA,GAAiBA,CACnB,CAAA,OAAOC,GAA2B,CAChC,IAAA,CAAMjE,kBAAG,CAAA,OAAA,CAAQ,2BACfgE,CAAU,CAAA,WAAA,CACP,GAAKE,CAAAA,CAAAA,EAEA,gBAAiBA,CACnB,CAAA,MAAA,CAGalE,kBAAG,CAAA,OAAA,CAAQ,qBACxB,MACA,CAAA,MAAA,CACAY,CAAiB,CAAA,CAAE,KAAMsD,CAAM,CAAA,IAAK,CAAC,CAAA,CACrC,MACF,CAED,CAAA,CACA,MAAO,CAAA,OAAO,CACnB,CACF,CAAC,CAGH,CAAA,IAAIL,EAAYH,EAAuBM,CAAAA,CAAAA,CAAU,WAAW,CAAA,CAE5D,OAAIA,CAAU,CAAA,UAAA,GACZH,CAAY,CAAA,CACV,GAAGA,CACH7D,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,cAAA,CAAeA,mBAAG,UAAW,CAAA,eAAe,CACzD,CAAA,CAAA,CAGKiE,GAA2B,CAChC,WAAA,CACED,CAAU,CAAA,OAAA,GAAY,OAClBb,EAAa,CAAA,CAAE,KAAOa,CAAAA,CAAAA,CAAU,OAAQ,CAAC,CAAA,CACzC,MACN,CAAA,SAAA,CAAAH,CACA,CAAA,IAAA,CAAMjD,CAAiB,CAAA,CAAE,KAAMoD,CAAU,CAAA,IAAK,CAAC,CAAA,CAC/C,SAAUA,CAAU,CAAA,UAAA,GAAe,KACnC,CAAA,IAAA,CACEA,EAAU,IAAS,GAAA,MAAA,CACfzB,CAAeyB,CAAAA,CAAAA,CAAU,IAAI,CAC7B,CAAA,MACR,CAAC,CACH,CAAC,CAEUG,CAAAA,EAAAA,CAAwB,CAAC,CACpC,QAAAP,CACF,CAAA,GAUM,CACJ,IAAIQ,EAAiCpE,kBAAG,CAAA,UAAA,CAAW,UACnD,CAAA,OAAQ4D,CAAS,EACf,KAAK,SAAA,CACHQ,EAAOpE,kBAAG,CAAA,UAAA,CAAW,cACrB,CAAA,MACF,KAAK,OACHoE,CAAAA,CAAAA,CAAOpE,kBAAG,CAAA,UAAA,CAAW,aACrB,MACF,KAAK,QACHoE,CAAAA,CAAAA,CAAOpE,mBAAG,UAAW,CAAA,aAAA,CACrB,MACF,KAAK,SACHoE,CAAOpE,CAAAA,kBAAAA,CAAG,UAAW,CAAA,aAAA,CACrB,MACF,KAAK,WAAA,CACHoE,CAAOpE,CAAAA,kBAAAA,CAAG,WAAW,gBACrB,CAAA,MACF,KAAK,SAAA,CACHoE,CAAOpE,CAAAA,kBAAAA,CAAG,UAAW,CAAA,cAAA,CACrB,MACF,KAAK,MAAA,CACHoE,CAAOpE,CAAAA,kBAAAA,CAAG,WAAW,WACrB,CAAA,KACJ,CACA,OAAOA,mBAAG,OAAQ,CAAA,qBAAA,CAAsBoE,CAAI,CAC9C,EAEaC,EACXC,CAAAA,CAAAA,EAEAA,CAAM,CAAA,GAAA,CAAK9D,GAELR,kBAAG,CAAA,0BAAA,CAA2BQ,CAAI,CAAA,CAC7BA,EAGF+D,EAA+B,CAAA,CAEpC,UAAY/D,CAAAA,CAAAA,CAAK,QACb,OAAOA,CAAAA,CAAK,OAAY,EAAA,QAAA,CACtB2D,GAAsB,CAAE,OAAA,CAAS,SAAU,CAAC,EAC5C3D,CAAK,CAAA,OAAA,CACP,MAEJ,CAAA,WAAA,CACEA,EAAK,OAAY,GAAA,MAAA,CACbgB,EAAShB,CAAAA,CAAAA,CAAK,OAAO,CAClBA,CAAAA,CAAAA,CAAK,OACNR,CAAAA,kBAAAA,CAAG,QAAQ,qBACTQ,CAAAA,CAAAA,CAAK,OACDR,CAAAA,kBAAAA,CAAG,QAAQ,UAAW,EAAA,CACtBA,kBAAG,CAAA,OAAA,CAAQ,aACjB,CAAA,CACF,MACN,CAAA,IAAA,CAAMQ,EAAK,IACb,CAAC,CACF,CAAA,CAEUgE,EAAyB,CAAA,CAAC,CACrC,QAAA,CAAAC,EACA,IAAAC,CAAAA,CACF,CAGM,GAAA,CACJ,IAAMC,CACJF,CAAAA,CAAAA,GAAa,OACTzE,CAAAA,kBAAAA,CAAG,WAAW,YACdyE,CAAAA,CAAAA,GAAa,UACXzE,CAAAA,kBAAAA,CAAG,WAAW,eACdA,CAAAA,kBAAAA,CAAG,UAAW,CAAA,aAAA,CACtB,OAAOA,kBAAG,CAAA,OAAA,CAAQ,sBAAuB2E,CAAAA,CAAAA,CAAiBD,CAAI,CAChE,CAAA,CAEaH,EAAiC,CAAA,CAAC,CAC7C,UAAAK,CAAAA,CAAAA,CACA,WAAAC,CAAAA,CAAAA,CACA,SAAAhB,CAAAA,CAAAA,CACA,IAAAnF,CAAAA,CACF,IAMEsB,kBAAG,CAAA,OAAA,CAAQ,8BACT6D,CAAAA,CAAAA,CACAnF,EACAkG,CACAC,CAAAA,CACF,CAEWC,CAAAA,EAAAA,CAAuB,CAAC,CACnC,OAAA,CAAAC,CACA,CAAA,QAAA,CAAAC,EACA,aAAAC,CAAAA,CAAAA,CACA,aAAAC,CAAAA,CAAAA,CACA,KAAAR,CACA,CAAA,aAAA,CAAAS,CACF,CAAA,GAQEnF,mBAAG,OAAQ,CAAA,oBAAA,CACTkF,CACAC,CAAAA,CAAAA,CACAH,EACAC,CACAP,CAAAA,CAAAA,CACAK,CACF,CAAA,CAEWK,EAAwB,CAAA,CAAC,CACpC,OAAA,CAAAC,CACF,CAGerF,GAAAA,kBAAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsBqF,CAAO,CAO1CC,CAAAA,EAAAA,CAAsB,CAAC,CAClC,MAAAC,CACA,CAAA,OAAA,CAAAlD,CACA,CAAA,SAAA,CAAAmD,EACA,UAAAzB,CAAAA,CAAAA,CAAa,EAAC,CACd,WAAA0B,CACA,CAAA,UAAA,CAAAC,CAAa,CAAA,GACb,KAAApB,CAAAA,CAAAA,CAAQ,EACV,IAQM,CACJ,IAAMzB,CAAa7C,CAAAA,kBAAAA,CAAG,QAAQ,mBAC5BuF,CAAAA,CAAAA,CAAQ,CAACvF,kBAAAA,CAAG,QAAQ,cAAeA,CAAAA,kBAAAA,CAAG,UAAW,CAAA,YAAY,CAAC,CAAI,CAAA,MAAA,CAClEsE,CAAQD,CAAAA,EAAAA,CAAiBC,CAAK,CAAI,CAAA,MAAA,CAClCR,EAAwBC,CAAAA,CAAU,EAClC0B,CAAalD,CAAAA,CAAAA,CAAekD,CAAU,CAAA,CAAI,OAC1C,MACA,CAAA,KAAA,CAAM,OAAQC,CAAAA,CAAU,EACpBC,CAAY,CAAA,CAAE,SAAAH,CAAAA,CAAAA,CAAW,WAAAE,CAAW,CAAC,CACrCA,CAAAA,CACN,CAEA,CAAA,OAAAxD,CAAmB,CAAA,CACjB,SAAUG,CACV,CAAA,IAAA,CAAMQ,CACR,CAAC,EAEMA,CACT,CAAA,CAKa+C,EAA0B,CAAA,CAAC,CACtC,KAAAL,CAAAA,CAAAA,CACA,OAAAlD,CAAAA,CAAAA,CACA,UAAAmD,CACA,CAAA,UAAA,CAAAzB,CAAa,CAAA,GACb,UAAA0B,CAAAA,CAAAA,CACA,UAAAC,CAAAA,CAAAA,CAAa,EACb,CAAA,KAAA,CAAApB,CAAQ,CAAA,EACV,CAQM,GAAA,CACJ,IAAMzB,CAAAA,CAAa7C,kBAAG,CAAA,OAAA,CAAQ,wBAC5BuF,CAAAA,CAAAA,CAAQ,CAACvF,kBAAG,CAAA,OAAA,CAAQ,cAAeA,CAAAA,kBAAAA,CAAG,WAAW,YAAY,CAAC,CAAI,CAAA,MAAA,CAClE,OACA,MACAsE,CAAAA,CAAAA,CAAQD,EAAiBC,CAAAA,CAAK,EAAI,MAClCR,CAAAA,EAAAA,CAAwBC,CAAU,CAAA,CAClC0B,EAAalD,CAAekD,CAAAA,CAAU,CAAI,CAAA,MAAA,CAC1CE,EAAY,CAAE,SAAA,CAAAH,CAAW,CAAA,UAAA,CAAAE,CAAW,CAAC,CACvC,CAEA,CAAA,OAAAxD,CAAmB,CAAA,CACjB,QAAUG,CAAAA,CAAAA,CACV,KAAMQ,CACR,CAAC,CAEMA,CAAAA,CACT,EAKaU,EAA+B,CAAA,CAAI,CAC9C,QAAA,CAAAsC,EACA,SAAAL,CAAAA,CAAAA,CAAY,KACd,CAAA,GAYqBxF,mBAAG,OAAQ,CAAA,4BAAA,CAC5B6F,CACG,CAAA,GAAA,CAAKhJ,GAAW2E,EAAS3E,CAAAA,CAAK,CAAIA,CAAAA,CAAAA,CAAQsG,GAAa,CAAE,KAAA,CAAAtG,CAAM,CAAC,CAAE,CAClE,CAAA,MAAA,CAAO4E,EAAqB,CAAA,CAE/B+D,GACG,CAAC,KAAA,CAAM,OAAQK,CAAAA,CAAAA,CAAS,CAAC,CAAC,CAAA,EAAK,OAAOA,CAAAA,CAAS,CAAC,CAAM,EAAA,QAC3D,CAIWC,CAAAA,EAAAA,CAAwB,CAAC,CACpC,UAAA,CAAAjD,CACF,CAAA,GAEM7C,mBAAG,OAAQ,CAAA,qBAAA,CAAsB6C,CAAU,CAAA,CAEpCkD,GAAyB,CAAC,CACrC,UAAAhC,CAAAA,CAAAA,CAAa,EACb,CAAA,UAAA,CAAA0B,CACA,CAAA,cAAA,CAAAO,CACF,CAKehG,GAAAA,kBAAAA,CAAG,OAAQ,CAAA,sBAAA,CACtBgG,CACAjC,CAAAA,CAAAA,CACA0B,CACF,CAAA,CAiCWjC,GAAmB,CAE9B,CACA,QAAArB,CAAAA,CAAAA,CACA,YAAAiB,CAAc,CAAA,EACd,CAAA,SAAA,CAAAoC,EAAY,IACZ,CAAA,GAAA,CAAAS,CACA,CAAA,SAAA,CAAA3C,EACA,QAAA7C,CAAAA,CAAAA,CAAW,KACb,CAAA,GAOkC,CAChC,IAAMyF,CAAAA,CAAa,KAAM,CAAA,OAAA,CAAQD,CAAG,CAChCA,CAAAA,CAAAA,CACG,GAAKpJ,CAAAA,CAAAA,EAAuB,CAE3B,IAAIsJ,CAAAA,CAAe,KACnB,CAAA,GAAI,KAAStJ,GAAAA,CAAAA,CAAO,CAClB,GAAM,CAAE,GAAAD,CAAAA,CAAI,CAAIC,CAAAA,CAAAA,CAChBsJ,EAAevJ,CAAQC,GAAAA,CAAAA,CAAM,KAE3BD,CAAAA,CAAAA,CAAAA,CAAI,MAAM,QAAQ,CAAA,EAAKA,CAAI,CAAA,KAAA,CAAM,MAAM,CAEZA,EAAAA,CAAAA,CAAI,KAAM,CAAA,KAAK,GAAKA,CAAQ,GAAA,EAAA,GACvD,CAACA,CAAAA,CAAI,WAAW,GAAG,CAAA,EACnB,CAACA,CAAAA,CAAI,SAAS,GAAG,CAAA,GAEjBC,CAAM,CAAA,GAAA,CAAM,CAAID,CAAAA,EAAAA,CAAG,CAEvB,CAAA,CAAA,EAAA,CACA,IAAIwJ,CACJ,CAAA,GAAI,QAAYvJ,GAAAA,CAAAA,CAAO,CACrB,IAAMwJ,CAAAA,CAAiB7E,EAAS3E,CAAAA,CAAAA,CAAM,MAAM,CACxCA,CAAAA,CAAAA,CAAM,MACN+D,CAAAA,CAAAA,CAAiB,CAAE,IAAM/D,CAAAA,CAAAA,CAAM,MAAO,CAAC,EAC3CuJ,CAAapG,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,sBAAA,CACtBnD,EAAM,SACFyJ,CAAAA,EAAAA,CAAmB,CACjB,UAAA,CAAYD,EACZ,IACE,CAAA,OAAOxJ,CAAM,CAAA,SAAA,EAAc,SACvBsH,EAAsB,CAAA,CAAE,OAAStH,CAAAA,CAAAA,CAAM,SAAU,CAAC,CAAA,CAClDA,CAAM,CAAA,SACd,CAAC,CACDwJ,CAAAA,CACN,EACF,CAAA,KAAA,GAAWxJ,EAAM,SAAcyG,EAAAA,CAAAA,EAAa6C,CAC1CC,CAAAA,CAAAA,CAAapG,mBAAG,OAAQ,CAAA,iCAAA,CACtBnD,CAAM,CAAA,KACR,OACK,CACL,IAAI0J,CAAyC/E,CAAAA,EAAAA,CAAS3E,EAAM,KAAK,CAAA,CAC7DA,CAAM,CAAA,KAAA,CACN,MAAM,OAAQA,CAAAA,CAAAA,CAAM,KAAK,CAAA,CACvB2G,EAAiB,CAAA,CACf,SAAAgC,CAAAA,CAAAA,CACA,IAAK3I,CAAM,CAAA,KAAA,CACX,SAAAyG,CAAAA,CAAAA,CACA,SAAA7C,CACF,CAAC,CACD0C,CAAAA,EAAAA,CAAa,CACX,WAAaC,CAAAA,CAAAA,CAAY,QAASvG,CAAAA,CAAAA,CAAM,GAAG,CACvC,CAAA,MAAA,CAAO,IAAKA,CAAAA,CAAAA,CAAM,KAAK,CACvB,CAAA,EACJ,CAAA,aAAA,CAAeA,EAAM,aACrB,CAAA,SAAA,CAAAyG,CACA,CAAA,QAAA,CAAA7C,EACA,KAAO5D,CAAAA,CAAAA,CAAM,KACf,CAAC,CACP,CAAA,GAAI,CAAC0J,CAAAA,CACH,OAIAnD,CAAY,CAAA,QAAA,CAASvG,CAAM,CAAA,GAAG,GAC9B,CAACmD,kBAAAA,CAAG,yBAA0BuG,CAAAA,CAAW,IAEzCA,CAAc3F,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAM/D,EAAM,KAAgB,CAAC,CAEhEuJ,CAAAA,CAAAA,CAAAA,CAAaI,GAAyB,CACpC,WAAA,CAAAD,CACA,CAAA,IAAA,CAAM1J,EAAM,GACd,CAAC,EACH,CAEA,OAAAqF,CAAmB,CAAA,CACjB,QAAUrF,CAAAA,CAAAA,CAAM,QAChB,CAAA,IAAA,CAAMuJ,CACR,CAAC,EAEMA,CACT,CAAC,CACA,CAAA,MAAA,CAAO3E,EAAwB,CAClC,CAAA,MAAA,CAAO,OAAQwE,CAAAA,CAAG,EACf,GAAI,CAAA,CAAC,CAACrJ,CAAAA,CAAKC,CAAK,CAAM,GAAA,CAErB,IAAI0J,CAAAA,CAAyCpD,GAAa,CACxD,WAAA,CAAaC,CAAY,CAAA,QAAA,CAASxG,CAAG,CAAI,CAAA,MAAA,CAAO,IAAKC,CAAAA,CAAK,EAAI,EAAC,CAC/D,SAAAyG,CAAAA,CAAAA,CACA,SAAA7C,CACA,CAAA,KAAA,CAAA5D,CACF,CAAC,EACD,GAAI,CAAC0J,CACH,CAAA,OAIAnD,EAAY,QAASxG,CAAAA,CAAG,CACxB,EAAA,CAACoD,mBAAG,yBAA0BuG,CAAAA,CAAW,CAEzCA,GAAAA,CAAAA,CAAc3F,EAAiB,CAAE,IAAA,CAAM/D,CAAgB,CAAC,GAG1D,IAAMsJ,CAAAA,CAAevJ,CAAQC,GAAAA,CAAAA,CAC7B,OACED,CAAI,CAAA,KAAA,CAAM,QAAQ,CAAA,EAClBA,EAAI,KAAM,CAAA,MAAM,CAChB,EAAA,CAACA,CAAI,CAAA,UAAA,CAAW,GAAG,CAAA,EACnB,CAACA,CAAI,CAAA,QAAA,CAAS,GAAG,CAAA,GAEjBA,EAAM,CAAIA,CAAAA,EAAAA,CAAG,CAEXA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAI,MAAM,KAAK,CAAA,EAAK,CAACA,CAAAA,CAAI,WAAW,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAI,SAAS,GAAG,CAAA,GAC/DA,CAAM,CAAA,CAAA,CAAA,EAAIA,CAAG,CAGb0G,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAa6C,CACTnG,CAAAA,kBAAAA,CAAG,QAAQ,iCAAkCnD,CAAAA,CAAK,CAClD2J,CAAAA,EAAAA,CAAyB,CAAE,WAAA,CAAAD,CAAa,CAAA,IAAA,CAAM3J,CAAI,CAAC,CAG3D,CAAC,CAAA,CACA,OAAO6E,EAAwB,CAAA,CAEhCjB,CAAOR,CAAAA,kBAAAA,CAAG,QAAQ,6BACtBkG,CAAAA,CAAAA,CACAV,CACF,CAAA,CAEA,OAAAtD,CAAmB,CAAA,CACjB,QAAAC,CAAAA,CAAAA,CACA,KAAA3B,CACF,CAAC,CAEMA,CAAAA,CACT,EAUaiG,EAAwB,CAAA,CAEnC,CACA,QAAA,CAAUC,EAAqB,EAAC,CAChC,cAAgBvE,CAAAA,CAAAA,CAChB,IAAAzD,CAAAA,CAAAA,CACA,GAAAuH,CAAAA,CACF,IAK0B,CACxB,IAAMlB,CAAgC,CAAA,KAAA,CAAM,QAAQkB,CAAG,CAAA,CACnDA,CAAI,CAAA,GAAA,CAAKpJ,GAAU,CACjB,IAAM8J,CAAaC,CAAAA,EAAAA,CAAiB,CAClC,WAAazD,CAAAA,EAAAA,CAAa,CACxB,KAAA,CAAOtG,EAAM,KACf,CAAC,CACD,CAAA,IAAA,CAAMA,EAAM,GACd,CAAC,CAED,CAAA,OAAAqF,EAAmB,CACjB,QAAA,CAAUrF,CAAM,CAAA,QAAA,CAChB,IAAM8J,CAAAA,CACR,CAAC,CAAA,CAEMA,CACT,CAAC,CAAA,CAED,MAAO,CAAA,OAAA,CAAQV,CAAG,CAAE,CAAA,GAAA,CAAI,CAAC,CAACrJ,EAAKC,CAAK,CAAA,GAAM,CACxC,IAAM8J,EAAa3G,kBAAG,CAAA,OAAA,CAAQ,gBAC5BpD,CAAAA,CAAAA,CACAuG,GAAa,CACX,QAAA,CAAU,IACV,CAAA,KAAA,CAAAtG,CACF,CAAC,CACH,CAEA,CAAA,OAAAqF,EAAmB,CACjB,QAAA,CAAUwE,CAAmB9J,CAAAA,CAAG,CAChC,CAAA,IAAA,CAAM+J,CACR,CAAC,EAEMA,CACT,CAAC,CAECnG,CAAAA,CAAAA,CAAOR,mBAAG,OAAQ,CAAA,qBAAA,CACtB,CAACA,kBAAAA,CAAG,QAAQ,cAAeA,CAAAA,kBAAAA,CAAG,UAAW,CAAA,aAAa,CAAC,CACvDY,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAMlC,CAAK,CAAC,CAAA,CAC/BqG,CACF,CAAA,CAEA,OAAA7C,CAAmB,CAAA,CACjB,QAAAC,CAAAA,CAAAA,CACA,KAAA3B,CACF,CAAC,CAEMA,CAAAA,CACT,CAEMoG,CAAAA,EAAAA,CAAmB,CAAC,CACxB,YAAAL,CACA,CAAA,IAAA,CAAA7H,CACF,CAAA,GAGM,CACJ,IAAI9B,CAAAA,CAAM8B,CACV,CAAA,OAAI,OAAO9B,CAAQ,EAAA,QAAA,GACbA,CAAI,CAAA,UAAA,CAAW,GAAG,CAAKA,EAAAA,CAAAA,CAAI,QAAS,CAAA,GAAG,EACzCA,CAAM2E,CAAAA,EAAAA,CAAoB,CACxB,aAAA,CAAe,MACf,IAAM3E,CAAAA,CACR,CAAC,CAAA,CAEDA,EAAMwC,EAAWxC,CAAAA,CAAG,CAGjBoD,CAAAA,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,gBAAA,CAAiBpD,CAAK2J,CAAAA,CAAW,CACrD,CAQaM,CAAAA,EAAAA,CAA6B,CAAC,CACzC,KAAAnI,CACA,CAAA,UAAA,CAAAgH,CACF,CAAA,GAIE1F,mBAAG,OAAQ,CAAA,uBAAA,CACT,CAACA,kBAAAA,CAAG,QAAQ,cAAeA,CAAAA,kBAAAA,CAAG,UAAW,CAAA,aAAa,CAAC,CACvDY,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAMlC,CAAK,CAAC,CAAA,CAC/BsB,kBAAG,CAAA,OAAA,CAAQ,kBAAkB0F,CAAU,CAAA,CACvC1F,kBAAG,CAAA,SAAA,CAAU,SACf,CAEW8G,CAAAA,EAAAA,CAA8B,CAAC,CAC1C,UAAAC,CACA,CAAA,UAAA,CAAAC,CACF,CAAA,GAIehH,mBAAG,OAAQ,CAAA,2BAAA,CAA4BgH,CAAYD,CAAAA,CAAS,EAI9DxF,EAAsB,CAAA,CAAC,CAClC,aAAA,CAAA0F,EACA,IAAApG,CAAAA,CACF,CAIMoG,IAAAA,CAAAA,GAAkB,SACpBA,CAAgB,CAAA,CAACpG,CAAK,CAAA,QAAA,CAAS,GAAG,CAEvBb,CAAAA,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoBa,EAAMoG,CAAa,CAAA,CAAA,CAIpDC,EAA8B,CAAA,CAAC,CAC1C,SAAA,CAAAC,CACA,CAAA,SAAA,CAAAC,EACA,QAAAC,CAAAA,CACF,CAKqBrH,GAAAA,kBAAAA,CAAG,QAAQ,2BAC5BmH,CAAAA,CAAAA,CACAnH,kBAAG,CAAA,OAAA,CAAQ,YAAYA,kBAAG,CAAA,UAAA,CAAW,aAAa,CAAA,CAClDqH,EACArH,kBAAG,CAAA,OAAA,CAAQ,WAAYA,CAAAA,kBAAAA,CAAG,WAAW,UAAU,CAAA,CAC/CoH,CACF,CAAA,CAIWE,GAAyB,CAAC,CAAE,IAAAzG,CAAAA,CAAK,IACzBb,kBAAG,CAAA,OAAA,CAAQ,sBAC5BY,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAAC,CAAK,CAAC,CAC3B,CAWW0G,CAAAA,EAAAA,CAA6B,CAAC,CACzC,QAAAlF,CACA,CAAA,UAAA,CAAAmF,CACA,CAAA,IAAA,CAAA9I,EACA,IAAAgG,CAAAA,CAAAA,CACA,cAAAsB,CAAAA,CAAAA,CAAiB,EACnB,CAAA,GAM+B,CAC7B,IAAMxF,EAAOR,kBAAG,CAAA,OAAA,CAAQ,0BACtBwH,CAAAA,CAAAA,CACI,CAACxH,kBAAG,CAAA,OAAA,CAAQ,cAAeA,CAAAA,kBAAAA,CAAG,WAAW,aAAa,CAAC,CACvD,CAAA,MAAA,CACJY,CAAiB,CAAA,CAAE,IAAMlC,CAAAA,CAAK,CAAC,CAC/B2F,CAAAA,EAAAA,CAAiB2B,CAAc,CAAA,CAC/BzD,EAAemC,CAAI,CACrB,CAEA,CAAA,OAAAxC,EAAmB,CACjB,QAAA,CAAUG,CACV,CAAA,IAAA,CAAA7B,CACF,CAAC,CAAA,CAEMA,CACT,CAAA,CAEakC,GAA0B,CAAC,CACtC,aAAA+E,CAAAA,CAAAA,CACA,SAAAC,CACF,CAAA,GAIe1H,kBAAG,CAAA,OAAA,CAAQ,wBAAwB0H,CAAUD,CAAAA,CAAa,CAI5DE,CAAAA,EAAAA,CAA8B,CAAC,CAC1C,IAAA,CAAAjD,CACF,CAAA,GAGe1E,mBAAG,OAAQ,CAAA,uBAAA,CAAwB0E,CAAI,CAAA,CAIzCT,GAA6B,CAAC,CACzC,WAAAsC,CAAAA,CAAAA,CACA,UAAA1C,CACA,CAAA,IAAA,CAAAnF,CACA,CAAA,QAAA,CAAAkJ,EAAW,IACX,CAAA,IAAA,CAAAlD,CACF,CAAA,GAOe1E,mBAAG,OAAQ,CAAA,0BAAA,CACtB6D,CACA,CAAA,MAAA,CACAnF,EACAkJ,CAAW,CAAA,MAAA,CAAY5H,kBAAG,CAAA,OAAA,CAAQ,YAAYA,kBAAG,CAAA,UAAA,CAAW,aAAa,CAAA,CACzE0E,CACA6B,CAAAA,CACF,CAIWsB,CAAAA,EAAAA,CAAsB,CAAC,CAClC,cAAA,CAAAC,CACA,CAAA,UAAA,CAAAjF,EACA,aAAA4E,CAAAA,CACF,CAKezH,GAAAA,kBAAAA,CAAG,QAAQ,mBACtB6C,CAAAA,CAAAA,CACA4E,CACAK,CAAAA,CACF,EAIWC,EAAuB,CAAA,CAAC,CACnC,aAAA,CAAAC,EACA,UAAAnF,CAAAA,CAAAA,CACA,WAAA0D,CAAAA,CAAAA,CACA,UAAA0B,CACF,CAAA,GAOejI,kBAAG,CAAA,OAAA,CAAQ,qBACtBgI,CACAzB,CAAAA,CAAAA,CACA1D,CACAoF,CAAAA,CACF,CAIWC,CAAAA,EAAAA,CAAmB,CAAC,CAC/B,KAAAC,CACA,CAAA,KAAA,CAAAC,CACF,CAAA,GAGMpI,mBAAG,OAAQ,CAAA,gBAAA,CAAiBmI,CAAMC,CAAAA,CAAK,EAEhCzC,CAAc,CAAA,CAAC,CAC1B,SAAA,CAAAH,EAAY,IACZ,CAAA,UAAA,CAAAE,CACF,CAAA,GAGM1F,mBAAG,OAAQ,CAAA,WAAA,CAAY0F,CAAYF,CAAAA,CAAS,EAErCgB,EAA2B,CAAA,CAAC,CACvC,WAAA,CAAAD,EACA,IAAA7H,CAAAA,CACF,CAGMsB,GAAAA,kBAAAA,CAAG,OAAQ,CAAA,wBAAA,CAAyBtB,CAAM6H,CAAAA,CAAW,EAE9C8B,EAAiC,CAAA,CAAC,CAC7C,KAAA,CAAAC,EAAQ,EAAC,CACT,IAAAzH,CAAAA,CACF,IAGMb,kBAAG,CAAA,OAAA,CAAQ,8BAA+B,CAAA,CAAA,CAAA,EAAIa,CAAI,CAAIyH,CAAAA,EAAAA,CAAAA,CAAM,IAAK,CAAA,EAAE,CAAC,CAAE,CAAA,CAAA,CAE/DhC,EAAqB,CAAA,CAAC,CACjC,UAAAzD,CAAAA,CAAAA,CACA,IAAA6B,CAAAA,CACF,IAGM1E,kBAAG,CAAA,OAAA,CAAQ,kBAAmB6C,CAAAA,CAAAA,CAAY6B,CAAI,CAEvC6D,CAAAA,EAAAA,CAA4B,CAAC,CACxC,MAAA1L,CACF,CAAA,GAEM,CACJ,IAAM2L,EAA2C,EAAC,CAC9CC,CAAW,CAAA,EAAA,CAEf,QAAWC,CAAQ7L,IAAAA,CAAAA,CAAM,KAAM,CAAA,CAAC,EAAE,OAAQ,EAAA,CACxC,GAAI,OAAO6L,GAAS,QAClBD,CAAAA,CAAAA,CAAW,CAAGC,EAAAA,CAAI,GAAGD,CAAQ,CAAA,CAAA,CAAA,KACxB,CACL,IAAMpD,EAAUmD,CAAM,CAAA,MAAA,CAClBxI,kBAAG,CAAA,OAAA,CAAQ,oBAAqByI,CAAAA,CAAQ,CACxCzI,CAAAA,kBAAAA,CAAG,QAAQ,kBAAmByI,CAAAA,CAAQ,CACpCE,CAAAA,CAAAA,CAAO3I,mBAAG,OAAQ,CAAA,6BAAA,CAA8B0I,CAAMrD,CAAAA,CAAO,EACnEmD,CAAM,CAAA,IAAA,CAAKG,CAAI,CAAA,CACfF,EAAW,GACb,CAOF,OAJ4BzI,kBAAAA,CAAG,QAAQ,yBACrCA,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,kBAAA,CAAmByI,CAAQ,CACtCD,CAAAA,CAAAA,CAAM,OAAQ,EAChB,CAEF,CCjgCO,CAAA,IAAMI,EAA6B,CAAA,CAAC,CACzC,MAAA,CAAAC,CACF,CAAA,GAGoB7I,mBAAG,OAAQ,CAAA,uBAAA,CAC3B,MACA,CAAA,KAAA,CACA,OACAc,CAAI,CAAA,MAAA,CAAO+H,CAAM,CACnB,EAMWC,EAAuB,CAAA,CAAC,CACnC,YAAA,CAAAC,EACA,UAAAhF,CAAAA,CAAAA,CAAa,EAAC,CACd,MAAAO,CACF,CAAA,GASM,CACJ,IAAMzB,EACJ,OAAOkG,CAAAA,EAAiB,QACpBnI,CAAAA,CAAAA,CAAiB,CAAE,IAAMmI,CAAAA,CAAa,CAAC,CAAA,CACvCA,CACAjB,CAAAA,CAAAA,CAAiB/D,CACpB,CAAA,MAAA,CAAQC,GAAcA,CAAc,GAAA,MAAS,CAC7C,CAAA,GAAA,CAAKA,GACJ,OAAOA,CAAAA,EAAc,QACjBpD,CAAAA,CAAAA,CAAiB,CAAE,IAAMoD,CAAAA,CAAU,CAAC,CAAA,CACpCA,CACN,CAMF,CAAA,OALuBhE,kBAAG,CAAA,OAAA,CAAQ,qBAChC6C,CACAyB,CAAAA,CAAAA,CACAwD,CACF,CAEF,EAQakB,EAAgC,CAAA,CAAC,CAC5C,OAAA,CAAAC,EACA,MAAAJ,CAAAA,CACF,CAG4B,GAAA,CAC1B,IAAMK,CAAgB,CAAA,KAAA,CAAM,OAAQD,CAAAA,CAAO,EAAIA,CAAU,CAAA,CAACA,CAAO,CAAA,CAC3DE,EAAmBD,CAAc,CAAA,IAAA,CACpCR,CAAS,EAAA,OAAOA,GAAS,QAAY,EAAA,CAACA,CAAK,CAAA,MAC9C,EACM7C,CAAWqD,CAAAA,CAAAA,CAAc,GAAKxK,CAAAA,CAAAA,EAAS,CAC3C,IAAMgK,CAAAA,CAAO,OAAOhK,CAAAA,EAAS,SAAW,CAAE,IAAA,CAAAA,CAAK,CAAA,CAAIA,EACnD,OAAOoC,CAAAA,CAAI,MAAO,CAAA,CAChB,KAAO4H,CAAAA,CAAAA,CAAK,KACZ,CAAA,MAAA,CAAQS,GAAoBT,CAAK,CAAA,MAAA,CACjC,IAAMA,CAAAA,CAAAA,CAAK,IACb,CAAC,CACH,CAAC,CAAA,CACKU,EAAepJ,kBAAG,CAAA,OAAA,CAAQ,kBAAmB6F,CAAAA,CAAQ,EACrDwD,CAAkBvI,CAAAA,CAAAA,CAAI,MAAO+H,CAAAA,CAAM,EAOzC,OANkB7I,kBAAAA,CAAG,OAAQ,CAAA,uBAAA,CAC3B,OACA,CAACmJ,CAAAA,CACDC,CACAC,CAAAA,CACF,CAEF,CAWaC,CAAAA,EAAAA,CAAsB,CAAC,CAClC,SAAAC,CAAAA,CAAAA,CACA,OAAAlH,CAAAA,CAAAA,CACA,YAAAmH,CACA,CAAA,WAAA,CAAAC,CACA,CAAA,UAAA,CAAA5G,EACA,IAAAnE,CAAAA,CAAAA,CACA,QAAAgJ,CAAAA,CACF,IAS4B,CAC1B,IAAMnB,CAAcgD,CAAAA,CAAAA,CAChBjD,GAAmB,CACjB,UAAA,CAAAzD,CACA,CAAA,IAAA,CACE,OAAO0G,CAAc,EAAA,QAAA,CACjB7G,EAAwB,CAAA,CAAE,SAAU6G,CAAU,CAAC,CAC/CA,CAAAA,CACR,CAAC,CACD1G,CAAAA,CAAAA,CACEwD,CAAiBzF,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAMlC,CAAK,CAAC,EAChDgL,CAAc1J,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,yBAAA,CAC7BwJ,EACIxJ,kBAAG,CAAA,OAAA,CAAQ,0BAA2B,CAAA,CACpCA,mBAAG,OAAQ,CAAA,oBAAA,CACT,MACA,CAAA,MAAA,CACAqG,EACA,MACF,CACF,CAAC,CAAA,CACDA,EACJ,MACAqB,CAAAA,CAAAA,CACI,OAAOA,CAAAA,EAAa,SAClBhF,EAAwB,CAAA,CAAE,QAAAgF,CAAAA,CAAS,CAAC,CACpCA,CAAAA,CAAAA,CACF,MACJnB,CAAAA,CACF,EACM0B,CAAYjI,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,uBAAA,CAC3ByJ,EACI,CAACzJ,kBAAAA,CAAG,OAAQ,CAAA,cAAA,CAAeA,mBAAG,UAAW,CAAA,aAAa,CAAC,CAAA,CACvD,OACJA,kBAAG,CAAA,OAAA,CAAQ,6BAA8B,CAAA,CAAC0J,CAAW,CAAG1J,CAAAA,kBAAAA,CAAG,SAAU,CAAA,KAAK,CAC5E,CAEA,CAAA,OAAAkC,CAAmB,CAAA,CACjB,SAAUG,CACV,CAAA,IAAA,CAAM4F,CACR,CAAC,EAEMA,CACT,CAAA,CAQa0B,EAAgC,CAAA,CAAC,CAC5C,OAAA,CAAAC,CACA,CAAA,MAAA,CAAAf,CACF,CAG4B,GAAA,CAC1B,IAAMgB,CAAAA,CAAgB,MAAM,OAAQD,CAAAA,CAAO,CAAIA,CAAAA,CAAAA,CAAU,CAACA,CAAO,CAAA,CAC3DE,CAAmBD,CAAAA,CAAAA,CAAc,KACpCnB,CAAS,EAAA,OAAOA,CAAS,EAAA,QAAA,EAAY,CAACA,CAAK,CAAA,MAC9C,CACM7C,CAAAA,CAAAA,CAAWgE,EAAc,GAAKnL,CAAAA,CAAAA,EAAS,CAC3C,IAAMgK,EAAO,OAAOhK,CAAAA,EAAS,QAAW,CAAA,CAAE,IAAAA,CAAAA,CAAK,CAAIA,CAAAA,CAAAA,CACnD,OAAOoC,CAAI,CAAA,MAAA,CAAO,CAChB,KAAA,CAAO4H,EAAK,KACZ,CAAA,MAAA,CAAQoB,CAAoBpB,EAAAA,CAAAA,CAAK,OACjC,IAAMA,CAAAA,CAAAA,CAAK,IACb,CAAC,CACH,CAAC,CAAA,CACKqB,CAAgB/J,CAAAA,kBAAAA,CAAG,QAAQ,kBAAmB6F,CAAAA,CAAQ,CACtDmE,CAAAA,CAAAA,CAAehK,mBAAG,OAAQ,CAAA,kBAAA,CAC9B,CAAC8J,CAAAA,CACD,OACAC,CACF,CAAA,CACMV,CAAkBvI,CAAAA,CAAAA,CAAI,MAAO+H,CAAAA,CAAM,CAMzC,CAAA,OALkB7I,mBAAG,OAAQ,CAAA,uBAAA,CAC3B,MACAgK,CAAAA,CAAAA,CACAX,CACF,CAEF,CAAA,CNxLO,IAAMY,EAAAA,CAA+B,CAAC,CAC3C,WAAA,CAAAC,CACA,CAAA,OAAA,CAAA7H,EACA,SAAAmD,CAAAA,CAAAA,CAAY,IACZ,CAAA,UAAA,CAAAzB,EAAa,EAAC,CACd,UAAA2B,CAAAA,CAAAA,CAAa,EACf,CAAA,GAMM,CACJ,IAAMlF,EAAOR,kBAAG,CAAA,OAAA,CAAQ,4BACtB0D,CAAAA,EAAAA,CAAuBwG,CAAW,CAClCpG,CAAAA,EAAAA,CAAwBC,CAAU,CAAA,CAClC4B,EAAY,CAAE,SAAA,CAAAH,CAAW,CAAA,UAAA,CAAAE,CAAW,CAAC,CACvC,CAEA,CAAA,OAAAxD,EAAmB,CACjB,QAAA,CAAUG,CACV,CAAA,IAAA,CAAA7B,CACF,CAAC,CAAA,CAEMA,CACT,CAAA,CAca2J,GAA0B,CAAC,CACtC,WAAAD,CAAAA,CAAAA,CACA,QAAA7H,CACA,CAAA,QAAA,CAAA+H,CAAW,CAAA,KAAA,CACX,UAAA5E,CAAY,CAAA,IAAA,CACZ,IAAA9G,CAAAA,CAAAA,CACA,UAAAqF,CAAAA,CAAAA,CAAa,EAAC,CACd,WAAA0B,CACA,CAAA,UAAA,CAAAC,CAAa,CAAA,GACb,KAAApB,CAAAA,CAAAA,CAAQ,EACV,IAUM,CACJ,IAAIT,CAAYH,CAAAA,EAAAA,CAAuBwG,CAAW,CAE9CE,CAAAA,CAAAA,GACFvG,CAAY,CAAA,CACV,GAAGA,CACH7D,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,cAAA,CAAeA,mBAAG,UAAW,CAAA,aAAa,CACvD,CAAA,CAAA,CAGF,IAAMQ,CAAOR,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,uBAAA,CACtB6D,CACA,CAAA,MAAA,CACAjD,CAAiB,CAAA,CAAE,KAAMlC,CAAK,CAAC,CAC/B,CAAA,MAAA,CACA4F,EAAQD,EAAiBC,CAAAA,CAAK,CAAI,CAAA,MAAA,CAClCR,GAAwBC,CAAU,CAAA,CAClC0B,CAAalD,CAAAA,CAAAA,CAAekD,CAAU,CAAI,CAAA,MAAA,CAC1CE,CAAY,CAAA,CAAE,UAAAH,CAAW,CAAA,UAAA,CAAAE,CAAW,CAAC,CACvC,CAEA,CAAA,OAAAxD,CAAmB,CAAA,CACjB,SAAUG,CACV,CAAA,IAAA,CAAA7B,CACF,CAAC,CAEMA,CAAAA,CACT,CAca6J,CAAAA,EAAAA,CAAyB,CAAC,CACrC,SAAA,CAAAC,CACA,CAAA,OAAA,CAAAvF,EAAU,EAAC,CACX,IAAArG,CAAAA,CACF,IAIM,CACJ,IAAImF,CAA+B,CAAA,CACjC7D,mBAAG,OAAQ,CAAA,cAAA,CAAeA,kBAAG,CAAA,UAAA,CAAW,aAAa,CACvD,CAAA,CAEIsK,CACFzG,GAAAA,CAAAA,CAAY,CACV7D,kBAAG,CAAA,OAAA,CAAQ,eACT8I,CAAAA,EAAAA,CAAqB,CACnB,YAAcwB,CAAAA,CAAAA,CAAU,IACxB,CAAA,UAAA,CAAYA,EAAU,IACnB,CAAA,GAAA,CAAK3H,CAAQQ,EAAAA,EAAAA,CAAa,CAAE,KAAOR,CAAAA,CAAI,CAAC,CAAC,EACzC,MAAOlB,CAAAA,EAAqB,CACjC,CAAC,CACH,CACA,CAAA,GAAGoC,CACL,CAAA,CAAA,CAIF,IAAI0G,CAAuB,CAAA,EAC3B,CAAA,OAAAxF,EAAQ,OAASyF,CAAAA,CAAAA,EAAW,CAE1BD,CAAAA,CAAI,CAAC,GAAGA,CAAAA,CAAGC,CAAQ5J,CAAAA,CAAAA,CAAiB,CAAE,IAAM,CAAA;AAAA,CAAK,CAAC,CAAC,EACrD,CAAC,CAEMZ,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,sBAAA,CAChB6D,CACAjD,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAMlC,CAAK,CAAC,CAC/B,CAAA,EACA,CAAA,EACA6L,CAAAA,CACF,CACF,CAAA,COrKO,IAAME,EAAwB,CAAA,CAAC,CACpC,UAAA5H,CAAAA,CACF,CAGoB7C,GAAAA,kBAAAA,CAAG,OAAQ,CAAA,yBAAA,CAA0B6C,CAAU,CAAA,CCD5D,IAAM6H,EAAwB,CAAA,CAAC,CACpC,UAAA,CAAA7H,CACF,CAEM7C,GAAAA,kBAAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB6C,CAAU,CAAA,CASpC8H,EAA2B,CAAA,CAAC,CACvC,IAAA,CAAAlI,CAAO,CAAA,EACP,CAAA,IAAA,CAAA/D,CACA,CAAA,KAAA,CAAA4F,EAAQ,EACV,CAaM,GAAA,CACJ,IAAMmD,CAAAA,CAAgBnD,CAAM,CAAA,GAAA,CAAKI,CAC/BhC,EAAAA,EAAAA,CAAwB,CAAE,QAAA,CAAUgC,CAAK,CAAC,CAC5C,CAAA,CACMoD,CAAiBrF,CAAAA,CAAAA,CACpB,GAAKE,CAAAA,CAAAA,EACJ3C,kBAAG,CAAA,YAAA,CAAa2C,CAAG,CAAA,CAAIA,CAAM/B,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAM+B,CAAI,CAAC,CAC7D,CAAA,CACC,OAAOlB,EAAqC,CAAA,CACzCoB,CAAaiG,CAAAA,EAAAA,CAAqB,CACtC,YAAA,CAAcpK,CACd,CAAA,UAAA,CAAYoJ,CACZ,CAAA,KAAA,CAAOL,CACT,CAAC,CAED,CAAA,OADkBiD,EAAsB,CAAA,CAAE,WAAA7H,CAAW,CAAC,CAExD,CAAA,CAEa+H,EAAuB,CAAA,CAAC,CACnC,UAAA,CAAA/H,CACF,CAAA,GAGoB6H,EAAsB,CAAA,CACtC,UACE,CAAA,OAAO7H,CAAe,EAAA,QAAA,CAClBjC,EAAiB,CAAE,IAAA,CAAMiC,CAAW,CAAC,CACrCA,CAAAA,CACR,CAAC,CAAA,CClDI,IAAMgI,EAA8BC,CAAAA,CAAAA,EACzCA,CAAK,CAAA,KAAA,CAAM,CAAC,CAAA,CAAE,MACZ,CAAA,CAACjI,CAAYkI,CAAAA,CAAAA,IACX5L,EAAgC,CAAA,SAAA,CAAY,CACxCA,CAAAA,EAAAA,CAAgC,IAAK4L,CAAAA,CAAO,CACvCnI,CAAAA,EAAAA,CAA0B,CAC/B,UAAA,CAAAC,EACA,IAAMkI,CAAAA,CACR,CAAC,CAAA,CAGI/K,kBAAG,CAAA,OAAA,CAAQ,wBAChB6C,CAAAA,CAAAA,CACA7C,kBAAG,CAAA,OAAA,CAAQ,WAAYA,CAAAA,kBAAAA,CAAG,UAAW,CAAA,gBAAgB,CACrDY,CAAAA,CAAAA,CAAiB,CAAE,IAAMmK,CAAAA,CAAQ,CAAC,CACpC,CAEFnK,CAAAA,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAMkK,CAAK,CAAA,CAAC,CAAG,CAAC,CACrC,CAAA,CAEWE,EAA0BF,CAAAA,CAAAA,EACrCA,EAAK,KAAM,CAAA,CAAC,CAAE,CAAA,MAAA,CACZ,CAACjI,CAAAA,CAAYkI,CACXjI,GAAAA,EAAAA,CAA+B,CAC7B,UAAA,CAAAD,CACA,CAAA,IAAA,CAAMkI,CACR,CAAC,CACHnK,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAMkK,CAAK,CAAA,CAAC,CAAG,CAAC,CACrC,CAAA,CAKWG,EAAkC,CAAA,CAAC,CAC9C,WAAA,CAAAC,CACF,CAAA,GAGqBA,CAAY,CAAA,MAAA,CAAO,CAACrI,CAAYnE,CAAAA,CAAAA,GACpCoE,EAA+B,CAAA,CAC1C,UAAAD,CAAAA,CAAAA,CAEA,IAAAnE,CAAAA,CACF,CAAC,CAEF,CAIUyM,CAAAA,EAAAA,CAAyB,CAAC,CACrC,IAAAhD,CAAAA,CAAAA,CACA,SAAA1D,CAAW,CAAA,GAAA,CACX,KAAA2D,CAAAA,CACF,CAKqBpI,GAAAA,kBAAAA,CAAG,OAAQ,CAAA,sBAAA,CAC5BmI,CAEA1D,CAAAA,CAAAA,GAAa,GACTzE,CAAAA,kBAAAA,CAAG,UAAW,CAAA,WAAA,CACdyE,CAAa,GAAA,KAAA,CACXzE,mBAAG,UAAW,CAAA,uBAAA,CACdyE,CAAa,GAAA,IAAA,CACXzE,kBAAG,CAAA,UAAA,CAAW,qBACdA,CAAAA,kBAAAA,CAAG,UAAW,CAAA,SAAA,CACtB,OAAOoI,CAAAA,EAAU,QAAWxH,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAMwH,CAAM,CAAC,CAAIA,CAAAA,CAClE,CAIWgD,CAAAA,EAAAA,CAAoB,CAAC,CAChC,aAAAC,CAAAA,CAAAA,CACA,UAAAxI,CAAAA,CAAAA,CACA,aAAAyI,CAAAA,CACF,CAIMtL,GAAAA,kBAAAA,CAAG,QAAQ,iBAAkB6C,CAAAA,CAAAA,CAAYyI,CAAeD,CAAAA,CAAa,CAE9DE,CAAAA,EAAAA,CAA8B,CAAC,CAC1C,IAAAT,CAAAA,CACF,CAEoB,GAAA,CAClB,IAAMU,CAAAA,CAAuBX,EAA2BC,CAAAA,CAAI,EACtDW,CAAmBT,CAAAA,EAAAA,CAAuBF,CAAI,CAAA,CAE9CQ,CAAgB3F,CAAAA,CAAAA,CAAY,CAChC,UAAA,CAAY,CACV8E,EAAAA,CAAsB,CACpB,UAAA,CAAYU,EAAuB,CAAA,CACjC,IAAMM,CAAAA,CAAAA,CACN,MAAO5D,EAAoB,CAAA,CACzB,cAAgB,CAAA,CAAC4D,CAAgB,CAAA,CACjC,UAAY7K,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAM,MAAO,CAAC,CAC/C,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CAAA,CAOD,OALkBwK,EAAAA,CAAkB,CAClC,UAAA,CAAYI,CACZ,CAAA,aAAA,CAAAF,CACF,CAAC,CAGH,CAAA,CAEaI,GAAkC,CAAC,CAC9C,IAAAZ,CAAAA,CAAAA,CACA,eAAAa,CAAAA,CACF,CAGM,GAAA,CACJ,IAAMH,CAAAA,CAAuBX,EAA2BC,CAAAA,CAAI,CACtDW,CAAAA,CAAAA,CAAmBT,EAAuBF,CAAAA,CAAI,EAE9CQ,CAAgB3F,CAAAA,CAAAA,CAAY,CAChC,UAAA,CAAY,CACV8E,EAAAA,CAAsB,CACpB,UAAA,CAAY3B,EAAqB,CAAA,CAC/B,YAAc6C,CAAAA,CAAAA,CACd,UAAY,CAAA,CAACF,CAAgB,CAC/B,CAAC,CACH,CAAC,CACH,CACF,CAAC,CAAA,CASD,OAPkB,CAChBL,EAAkB,CAAA,CAChB,UAAYI,CAAAA,CAAAA,CACZ,aAAAF,CAAAA,CACF,CAAC,CACH,CAGF,CAAA,CAEaM,EAA+B,CAAA,CAAC,CAC3C,IAAA,CAAAd,CACA,CAAA,eAAA,CAAAa,CACF,CAAA,GAGoB,CAClB,IAAMH,CAAuBX,CAAAA,EAAAA,CAA2BC,CAAI,CAAA,CACtDW,EAAmBT,EAAuBF,CAAAA,CAAI,CA2BpD,CAAA,OAzBkBM,EAAkB,CAAA,CAClC,UAAYtC,CAAAA,EAAAA,CAAqB,CAC/B,YAAA,CAAchG,EAA+B,CAAA,CAC3C,UAAY,CAAA,OAAA,CACZ,IAAM,CAAA,SACR,CAAC,CACD,CAAA,UAAA,CAAY,CAAC0I,CAAoB,CACnC,CAAC,CACD,CAAA,aAAA,CAAe7F,CAAY,CAAA,CACzB,UAAY,CAAA,CACV8E,EAAsB,CAAA,CACpB,UAAYzK,CAAAA,kBAAAA,CAAG,QAAQ,eACrB8C,CAAAA,EAAAA,CAA+B,CAC7B,UAAA,CAAY2I,CACZ,CAAA,IAAA,CAAM,SACR,CAAC,CACD,CAAA,MAAA,CACA,MACA,CAAA,CAAC7K,CAAiB,CAAA,CAAE,IAAM+K,CAAAA,CAAgB,CAAC,CAAC,CAC9C,CACF,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAGH,CAEaE,CAAAA,EAAAA,CAAkC,CAAC,CAC9C,aAAAC,CAAAA,CACF,IAEM,CACJ,IAAMjJ,CAAajC,CAAAA,CAAAA,CAAiB,CAAE,IAAA,CAAM,MAAO,CAAC,CAKpD,CAAA,OAJsBiH,EAAoB,CAAA,CACxC,cAAgB,CAAA,CAACjH,CAAiB,CAAA,CAAE,KAAMkL,CAAc,CAAC,CAAC,CAAA,CAC1D,UAAAjJ,CAAAA,CACF,CAAC,CAEH,CAEakJ,CAAAA,EAAAA,CAA0B,CAAC,CACtC,IAAAjB,CAAAA,CAAAA,CACA,mBAAAkB,CAAAA,CACF,IAGM,CACJ,IAAMR,CAAuBX,CAAAA,EAAAA,CAA2BC,CAAI,CAAA,CACtDW,CAAmBT,CAAAA,EAAAA,CAAuBF,CAAI,CAAA,CAuCpD,OArCkBM,EAAAA,CAAkB,CAClC,UAAA,CAAYtC,EAAqB,CAAA,CAC/B,YAAchG,CAAAA,EAAAA,CAA+B,CAC3C,UAAA,CAAY,OACZ,CAAA,IAAA,CAAM,SACR,CAAC,CACD,CAAA,UAAA,CAAY,CAAC0I,CAAoB,CACnC,CAAC,CACD,CAAA,aAAA,CAAe7F,EAAY,CACzB,UAAA,CAAY,CACV8E,EAAAA,CAAsB,CACpB,UAAA,CAAYU,EAAuB,CAAA,CACjC,IAAMM,CAAAA,CAAAA,CACN,KAAOzL,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,eAAA,CAChB8C,EAA+B,CAAA,CAC7B,WAAY2I,CACZ,CAAA,IAAA,CAAM,KACR,CAAC,CACD,CAAA,MAAA,CACA,MACA,CAAA,CACEnG,EAAoB,CAAA,CAClB,UAAY,CAAA,CACV,CACE,IAAA,CAAM,MACR,CACF,EACA,UAAY0G,CAAAA,CACd,CAAC,CACH,CACF,CACF,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAGH,CAAA,CChPA,IAAMC,EAAWvJ,CAAAA,EAAAA,CAAwB,CAAE,QAAA,CAAU,MAAO,CAAC,CAevDwJ,CAAAA,EAAAA,CAAgB,CAAC,CACrB,UAAAC,CAAAA,CAAAA,CACA,KAAA3L,CACF,CAAA,GAIO2L,CAGEnM,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,CAACQ,CAAAA,CAAMyL,EAAQ,CAAC,CAF7CzL,CAAAA,CAAAA,CAWE4L,EAA0B,CAAA,CAAC,CACtC,aAAA,CAAAC,EACA,UAAAF,CAAAA,CAAAA,CACA,UAAAjG,CAAAA,CAAAA,CACA,mBAAAoG,CAAAA,CACF,CAcM,GAAA,CACEC,IAEAxH,CAAiCmB,CAAAA,CAAAA,CAAW,GAAKsG,CAAAA,CAAAA,EAAa,CAClE,IAAM3I,CAAAA,CAAgD2I,CAAS,CAAA,UAAA,CAC3D,CAACxM,kBAAAA,CAAG,OAAQ,CAAA,cAAA,CAAeA,kBAAG,CAAA,UAAA,CAAW,eAAe,CAAC,CACzD,CAAA,MAAA,CAEEiF,CACJuH,CAAAA,CAAAA,CAAS,UAAe,GAAA,KAAA,CACpB,MACAxM,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,WAAA,CAAYA,kBAAG,CAAA,UAAA,CAAW,aAAa,CAAA,CAElD0E,CAAgCnC,CAAAA,CAAAA,CAAeiK,CAAS,CAAA,IAAI,CAClED,CAEA,IAAME,CAAAA,CAAYzM,kBAAG,CAAA,OAAA,CAAQ,uBAC3B6D,CAAAA,CAAAA,CACAyI,CACG,EAAA,OAAOE,CAAS,CAAA,IAAA,EAAS,QACxBA,EAAAA,CAAAA,CAAS,IAAK,CAAA,KAAA,CAAMrN,EAA+B,CACpD,EAAA,OAAOqN,CAAS,CAAA,IAAA,EAAS,QAAYxM,EAAAA,kBAAAA,CAAG,cAAewM,CAAAA,CAAAA,CAAS,IAAI,CAAA,CACnEA,CAAS,CAAA,IAAA,CACTjL,EAAoB,CAAA,CAAE,IAAMiL,CAAAA,CAAAA,CAAS,IAAK,CAAC,CAAA,CAC/CvH,CACAP,CAAAA,CACF,CAEA,CAAA,OAAAxC,CAAmB,CAAA,CACjB,QAAUsK,CAAAA,CAAAA,CAAS,OACnB,CAAA,IAAA,CAAMC,CACR,CAAC,CAEMA,CAAAA,CACT,CAAC,EAED,GAAIJ,CAAe,CAAA,CACjB,IAAMxI,CAAAA,CACJwI,CAAc,CAAA,UAAA,CACV,CAACrM,kBAAAA,CAAG,OAAQ,CAAA,cAAA,CAAeA,kBAAG,CAAA,UAAA,CAAW,eAAe,CAAC,EACzD,MACA0M,CAAAA,CAAAA,CAAiB1M,kBAAG,CAAA,OAAA,CAAQ,oBAChC6D,CAAAA,CAAAA,CACA,CACEI,EAAAA,CAA2B,CACzB,IAAA,CAAMrD,CAAiB,CAAA,CAAE,IAAM,CAAA,MAAA,CAAOyL,CAAc,CAAA,IAAI,CAAE,CAAC,CAAA,CAC3D,IAAMlI,CAAAA,EAAAA,CAAsB,CAAE,OAAA,CAAS,QAAS,CAAC,CACnD,CAAC,CACH,CAAA,CACA5B,CAAe8J,CAAAA,CAAAA,CAAc,IAAI,CACnC,EACAtH,CAAQ,CAAA,IAAA,CAAK2H,CAAc,EAC7B,CAEA,IAAMlM,CAAOR,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB+E,CAAO,CAAA,CACrD,OAAOmH,EAAAA,CAAc,CAAE,UAAA,CAAAC,CAAY,CAAA,IAAA,CAAA3L,CAAK,CAAC,CAC3C,CAAA,CAQamM,EAAsB,CAAA,CAAC,CAClC,UAAA,CAAAR,CACA,CAAA,KAAA,CAAA7H,CACF,CAAA,GAGM,CACJ,IAAMsI,EAAQtI,CAAM,CAAA,GAAA,CAAKI,CAASnC,EAAAA,CAAAA,CAAemC,CAAI,CAAC,CAChDlE,CAAAA,CAAAA,CAAOR,kBAAG,CAAA,OAAA,CAAQ,mBAAoB4M,CAAAA,CAAK,CACjD,CAAA,OAAOV,EAAc,CAAA,CAAE,WAAAC,CAAY,CAAA,IAAA,CAAA3L,CAAK,CAAC,CAC3C,CAAA,CAQaqM,EAA6B,CAAA,CAAC,CACzC,UAAA,CAAAV,CACA,CAAA,KAAA,CAAA7H,CACF,CAAA,GAGM,CACJ,IAAMsI,EAAQtI,CAAM,CAAA,GAAA,CAAKI,CAASnC,EAAAA,CAAAA,CAAemC,CAAI,CAAC,CAChDlE,CAAAA,CAAAA,CAAOR,kBAAG,CAAA,OAAA,CAAQ,0BAA2B4M,CAAAA,CAAK,CACxD,CAAA,OAAOV,EAAc,CAAA,CAAE,UAAAC,CAAAA,CAAAA,CAAY,IAAA3L,CAAAA,CAAK,CAAC,CAC3C,CAQasM,CAAAA,EAAAA,CAAsB,CAAC,CAClC,UAAAX,CAAAA,CAAAA,CAAa,KACb,CAAA,KAAA,CAAA7H,CACF,CAAA,GAGM,CACJ,IAAMsI,CAAAA,CAAQtI,CAAM,CAAA,GAAA,CAAKI,CAASnC,EAAAA,CAAAA,CAAemC,CAAI,CAAC,CAChDlE,CAAAA,CAAAA,CAAOR,kBAAG,CAAA,OAAA,CAAQ,mBAAoB4M,CAAAA,CAAK,CACjD,CAAA,OAAOV,GAAc,CAAE,UAAA,CAAAC,CAAY,CAAA,IAAA,CAAA3L,CAAK,CAAC,CAC3C,CAAA,CASauM,EAAuB,CAAA,CAClCC,CACAC,CAAAA,CAAAA,CACAd,CAAsB,CAAA,KAAA,CACtBG,CAA+B,CAAA,IAAA,GAC5B,CACH,IAAMY,CAAAA,CAAUP,EAAoB,CAAA,CAClC,KAAOK,CAAAA,CACT,CAAC,CAAA,CACKG,CAAYR,CAAAA,EAAAA,CAAoB,CACpC,KAAA,CAAOM,CACT,CAAC,CAIKzM,CAAAA,CAAAA,CAAO4L,EAAwB,CAAA,CACnC,UAAY,CAAA,CACV,CACE,IAAA,CAAM,CAAS7L,MAAAA,EAAAA,EAAAA,CAAe,CAAE,IAAA,CAAM2M,CAAS,CAAA,QAAA,CAAU,IAAK,CAAC,CAAC,CAAA,CAAA,CAAA,CAChE,KAAMC,CACR,CACF,CACA,CAAA,mBAAA,CAAAb,CACF,CAAC,CACD,CAAA,OAAOJ,EAAc,CAAA,CAAE,UAAAC,CAAAA,CAAAA,CAAY,IAAA3L,CAAAA,CAAK,CAAC,CAC3C,EAQa4M,EAAsB,CAAA,CACjC9I,CACA6H,CAAAA,CAAAA,CAAsB,KACnB,GAAA,CACH,IAAM3L,CAAAA,CAAOkC,EAAwB,CAAA,CACnC,aAAe,CAAA,CAEb,KAAM,CAAA,OAAA,CAAQ4B,CAAK,CAAA,CAAIqI,GAAoB,CAAE,KAAA,CAAArI,CAAM,CAAC,CAAIA,CAAAA,CAC1D,CACA,CAAA,QAAA,CAAU,OACZ,CAAC,CACD,CAAA,OAAO4H,EAAc,CAAA,CAAE,UAAAC,CAAAA,CAAAA,CAAY,KAAA3L,CAAK,CAAC,CAC3C,CAAA,CC5NO,IAAM6M,CAAAA,CAAW,CACtB,iBAAA,CAAyBzH,EACzB,CAAA,sBAAA,CAA8BrC,EAC9B,CAAA,aAAA,CAAqB+B,EACrB,CAAA,YAAA,CAAoBgB,EACpB,CAAA,UAAA,CAAkB4B,GAClB,eAAuBpC,CAAAA,EAAAA,CACvB,gBAA4BqF,CAAAA,EAAAA,CAC5B,KAAaxF,CAAAA,CAAAA,CACb,cAAuBmD,CAAAA,EAAAA,CACvB,gBAA0BuB,CAAAA,EAAAA,CAC1B,qBAA6BnD,CAAAA,EAAAA,CAC7B,aAAsBoC,CAAAA,EAAAA,CACtB,sBAAgCW,CAAAA,EAAAA,CAChC,gBAAuBxD,EACvB,CAAA,oBAAA,CAA6BmC,EAC7B,CAAA,sBAAA,CAA+BI,EAC/B,CAAA,qBAAA,CAA+ByB,EAC/B,CAAA,cAAA,CAAsB1C,EACtB,CAAA,gBAAA,CAAwBhC,EACxB,CAAA,UAAA,CAAkBnF,CAClB,CAAA,WAAA,CAAuBwK,EACvB,CAAA,qBAAA,CAA6BtE,GAC7B,QAAgBtF,CAAAA,EAAAA,CAChB,eAAuB2C,CAAAA,EAAAA,CACvB,eAAuBiB,CAAAA,EAAAA,CACvB,cAAsBN,CAAAA,EAAAA,CACtB,iBAA2BqF,CAAAA,EAAAA,CAC3B,uBAAgCR,CAAAA,EAAAA,CAChC,oBAA4B9C,CAAAA,EAAAA,CAC5B,aAAqBgB,CAAAA,EAAAA,CACrB,YAAoBtH,CAAAA,EAAAA,CACpB,IAAY2C,CAAAA,EAAAA,CACZ,gBAAwBM,CAAAA,EAAAA,CACxB,GAAW1C,CAAAA,CAAAA,CACX,oBAA4BmD,CAAAA,EAAAA,CAC5B,wBAAgCnB,CAAAA,EAAAA,CAChC,yBAAqCmI,CAAAA,EAAAA,CACrC,kBAA0BzE,CAAAA,EAAAA,CAC1B,yBAAgC6B,EAChC,CAAA,kBAAA,CAA4BsC,EAC5B,CAAA,eAAA,CAAyBD,EACzB,CAAA,cAAA,CAAwBE,EACxB,CAAA,oBAAA,CAAgCC,EAChC,CAAA,aAAA,CAAqBtJ,EACrB,CAAA,eAAA,CAAuBZ,EACvB,CAAA,mBAAA,CAA2B4H,EAC3B,CAAA,iBAAA,CAA6BwD,GAC7B,sBAAkCH,CAAAA,EAAAA,CAClC,qBAAiCL,CAAAA,EAAAA,CACjC,yBAAqCG,CAAAA,EAAAA,CACrC,gBAA4BG,CAAAA,EAAAA,CAC5B,oBAA4BtE,CAAAA,EAAAA,CAC5B,aAAuB6F,CAAAA,EAAAA,CACvB,iBAA2BhB,CAAAA,EAAAA,CAC3B,oBAA8BS,CAAAA,EAAAA,CAC9B,SAAgBtK,CAChB,CAAA,gBAAA,CAAwB+E,EACxB,CAAA,gBAAA,CAAwB9C,EACxB,CAAA,wBAAA,CAAgCD,EAChC,CAAA,qBAAA,CAA6BoD,EAC7B,CAAA,cAAA,CAAwBoF,EACxB,CAAA,iBAAA,CAAyBrK,EACzB,CAAA,aAAA,CAAuBoK,EACvB,CAAA,aAAA,CAAuBH,EACvB,CAAA,iBAAA,CAAyBxJ,EAC3B,CAAA,CC7EO,IAAMmK,EAAiBxC,CAAAA,CAAAA,EAAmB,CAC1CyC,mBAAG,CAAA,UAAA,CAAWzC,CAAI,CAAA,EACrByC,mBAAG,CAAA,SAAA,CAAUzC,CAAM,CAAA,CAAE,SAAW,CAAA,IAAK,CAAC,EAE1C,CAYO,CAAA,IAAM0C,EAAqB,CAAA,CAAC,CACjC,YAAAC,CAAAA,CAAAA,CACA,YAAAC,CAAAA,CACF,CAac,GAAA,CACZ,IAAMC,CAAAA,CAAcD,CAAa,CAAA,KAAA,CAAM,GAAG,CAAA,CAG1C,OAAO,CAAA,EADL,KAAM,CAAA,IAAA,CAAK,CAAE,MAAQC,CAAAA,CAAAA,CAAY,MAAO,CAAC,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA,CAAE,IAAK,CAAA,KAAK,CAAK,EAAA,IAC/C,CAAGF,EAAAA,CAAY,CACvC,CAAA,CAAA,CC9BA,IAAMG,EAAAA,CAAoBlP,CAAiB,EAAA,CACzC,IAAMmP,CAAAA,CAA2BnP,CAAK,CAAA,KAAA,CAAMoM,mBAAK,CAAA,GAAG,CAIpD,CAAA,OAHsB+C,CACnB,CAAA,KAAA,CAAM,CAAGA,CAAAA,CAAAA,CAAyB,OAAS,CAAC,CAAA,CAC5C,IAAK/C,CAAAA,mBAAAA,CAAK,GAAG,CAElB,CAOagD,CAAAA,CAAAA,CAAmB,CAAC,CAC/B,MAAAvP,CAAAA,CAAAA,CACA,YAAAmP,CAAAA,CACF,CAGc,GAAA,CACZ,IAAMlP,CAASC,CAAAA,CAAAA,CAAgBF,CAAM,CAAA,CAErC,GAAI,QAAA,GAAYC,CAAUA,EAAAA,CAAAA,CAAO,MAC/B,CAAA,OAAOgP,EAAmB,CAAA,CACxB,YAAc,CAAA,QAAA,CACd,YAAAE,CAAAA,CACF,CAAC,CAGH,CAAA,GAAI5C,mBAAK,CAAA,UAAA,CAAWtM,CAAO,CAAA,IAAI,CAAG,CAAA,CAChC,IAAMuP,CAAAA,CAAgBH,EAAiBpP,CAAAA,CAAAA,CAAO,IAAI,CAAA,CAC5CwP,CAAalD,CAAAA,mBAAAA,CAAK,QAAQvM,CAAO,CAAA,MAAA,CAAO,IAAI,CAAA,CAClD,OAAOuM,mBAAAA,CAAK,QAASkD,CAAAA,CAAAA,CAAYD,CAAa,CAAA,CAAE,OAAQ,CAAA,KAAA,CAAO,GAAG,CACpE,CAEA,OAAOvP,EAAO,IAChB,CAAA,CAEayP,CAAY,CAAA,CACvB,OAAS,CAAA,CACP,MAAQ,CAAA,IAAA,CACR,IAAM,CAAA,SACR,CACA,CAAA,mBAAA,CAAqB,CACnB,MAAA,CAAQ,IACR,CAAA,IAAA,CAAM,qBACR,CACF,CAAA,CCzDA,IAAMC,EAAAA,CACJ,8EASWC,CAAAA,EAAAA,CAAYtR,CAAuB,EAAA,CAC9C,IAAMuR,CAAAA,CAAqB,CACzB,IAAA,CAAM,EACN,CAAA,IAAA,CAAM,EACN,CAAA,IAAA,CAAM,GACN,QAAU,CAAA,EACZ,CAEAF,CAAAA,EAAAA,CAAe,SAAY,CAAA,CAAA,CAC3B,IAAMG,CAAAA,CAAQxR,CAAM,CAAA,KAAA,CAAMqR,EAAc,CAAA,CAExC,GAAI,CAACG,CACH,CAAA,OAAOD,CAGT,CAAA,IAAME,CAAOD,CAAAA,CAAAA,CAAM,CAAC,CAAA,EAAK,EAGzB,CAAA,GAAIC,CAAS,GAAA,GAAA,EAAOA,CAAS,GAAA,IAAA,CAC3B,OAAOF,CAAAA,CAGT,IAAMtD,CAAAA,CAAOuD,EAAM,CAAC,CAAA,EAAK,EACnBE,CAAAA,CAAAA,CAAWF,CAAM,CAAA,CAAC,CAAK,EAAA,EAAA,CAG7B,OAAIE,CAAAA,CAAS,MAAW,GAAA,CAAA,CACfH,CAGF,CAAA,CACL,IAAAE,CAAAA,CAAAA,CACA,KAAMxD,CAAS,GAAA,GAAA,CAAM,EAAKA,CAAAA,CAAAA,CAC1B,IAAMuD,CAAAA,CAAAA,CAAM,CAAC,CAAA,EAAK,EAClB,CAAA,QAAA,CAAAE,CACF,CACF,CC9CO,CAAA,IAAMC,EAAQ,CAAA,OAAA,CAERC,GAAyBC,CAA0B,EAAA,CAC9D,IAAMjL,CAAAA,CAAQkL,EAAWD,CAAAA,CAAI,CAE7B,CAAA,OAAOjL,CAAM,CAAA,MAAA,GAAW,CAAKA,EAAAA,CAAAA,CAAM,CAAC,CAAA,GAAM,YAC5C,CAAA,CAKamL,CAAaF,CAAAA,CAAAA,EAAyB,CACjD,IAAMjL,CAAQkL,CAAAA,EAAAA,CAAWD,CAAI,CAAA,CACvBhQ,CAAO+E,CAAAA,CAAAA,CAAMA,CAAM,CAAA,MAAA,CAAS,CAAC,CAAA,CAGnC,OAAO,SAAA,CAAU/E,CAAI,CACvB,CAAA,CAEMiQ,EAAcD,CAAAA,CAAAA,EAEJA,CAAK,CAAA,OAAA,CAAQ,MAAQ,CAAA,EAAE,CAAE,CAAA,KAAA,CAAM,GAAG,CAAA,CAIrCG,EAAa,CAAA,CAAI,CAC5B,IAAA,CAAAH,EACA,IAAAI,CAAAA,CACF,CAGS,GAAA,CAGP,IAAMrL,CAAAA,CAAQkL,EAAW,CAAA,SAAA,CAAUD,CAAI,CAAC,CAEpCK,CAAAA,CAAAA,CAAUD,CAEd,CAAA,IAAA,IAAWE,CAAQvL,IAAAA,CAAAA,CAAO,CACxB,IAAMwL,CAAAA,CAAID,CACV,CAAA,GAAID,CAAQE,CAAAA,CAAC,CAAM,GAAA,MAAA,CACjB,MAAM,IAAI,KAAM,CAAA,CAAA,qBAAA,EAAwBP,CAAI,CAAA,CAAE,CAEhDK,CAAAA,CAAAA,CAAUA,CAAQE,CAAAA,CAAC,EACrB,CAEA,OAAOF,CACT,CC7CA,CAAA,IAAMG,EAAkB,CAAA,WAAA,CAClBC,EAAkB,CAAA,WAAA,CAClBC,EAAmB,CAAA,wBAAA,CACnBC,EAAmB,CAAA,qBAAA,CAEnBC,GAA0B,IAAI,MAAA,CAAO,CAAID,CAAAA,EAAAA,EAAAA,CAAiB,MAAM,CAAA,CAAE,CAClEE,CAAAA,EAAAA,CAAgC,IAAI,MAAA,CACxC,CAAGF,EAAAA,EAAAA,CAAiB,MAAM,CAAA,EAAGD,EAAiB,CAAA,MAAM,GACpD,IACF,CAAA,CACMI,EAA6B,CAAA,IAAI,MACrC,CAAA,CAAA,IAAA,EAAOJ,EAAiB,CAAA,MAAM,CAC9B,CAAA,CAAA,IACF,CAEMK,CAAAA,EAAAA,CAAe,CAAC,CACpB,IAAMC,CAAAA,CAAAA,CACN,OAAAC,CACF,CAAA,GAGM,CACJ,IAAIC,CAAkB,CAAA,KAAA,CAClBC,CAAkB,CAAA,KAAA,CAClBC,CAAsB,CAAA,KAAA,CACtBC,CAA0B,CAAA,KAAA,CAExBC,CACJN,CAAAA,CAAAA,GAAU,YAAgBA,EAAAA,CAAAA,GAAU,uBAAyB,GAAM,CAAA,GAAA,CAErE,IAAS3N,IAAAA,CAAAA,CAAQ,CAAGA,CAAAA,CAAAA,CAAQ4N,CAAO,CAAA,MAAA,CAAQ5N,CAAS,EAAA,CAAA,CAClD,IAAMkO,CAAAA,CAAYN,CAAO5N,CAAAA,CAAK,CAC9BgO,CAAAA,CAAAA,CACEhO,EAAQ,CAAI4N,CAAAA,CAAAA,CAAO5N,CAAQ,CAAA,CAAC,CAAMiO,GAAAA,CAAAA,CAAY,IAEhD,CAAA,IAAIE,CAAYnO,CAAAA,CAAAA,CAAQ,CACpBoO,CAAAA,CAAAA,CAAgBR,CAAOO,CAAAA,CAAS,CAEpC,CAAA,IADAb,GAAiB,SAAY,CAAA,CAAA,CACtBc,CAAiBd,EAAAA,EAAAA,CAAiB,IAAKc,CAAAA,CAAa,CACzDD,EAAAA,CAAAA,EAAa,CACbC,CAAAA,CAAAA,CAAgBR,CAAOO,CAAAA,CAAS,CAElC,CAAA,IAAME,CAAiCF,CAAAA,CAAAA,GAAcnO,EAAQ,CAI7D,CAAA,GAFAoN,EAAgB,CAAA,SAAA,CAAY,CAC5BD,CAAAA,EAAAA,CAAgB,SAAY,CAAA,CAAA,CAE1BA,EAAgB,CAAA,IAAA,CAAKe,CAAS,CAAA,GAC7BL,CACEO,EAAAA,CAAAA,EACC,CAACC,CAAAA,EACDD,CAAkB,GAAA,GAAA,EAClBhB,EAAgB,CAAA,IAAA,CAAKgB,CAAa,CAAA,CAAA,CAGtCR,CAAS,CAAA,CAAA,EAAGA,CAAO,CAAA,KAAA,CAAM,CAAG5N,CAAAA,CAAK,CAAC,CAAA,EAAGiO,CAAS,CAAA,EAAGL,EAAO,KAAM5N,CAAAA,CAAK,CAAC,CAAA,CAAA,CACpEA,CACA+N,EAAAA,CAAAA,CAAAA,CAAsBD,CACtBD,CAAAA,CAAAA,CAAkB,KAClBC,CAAAA,CAAAA,CAAkB,IAElBA,CAAAA,KAAAA,GAAAA,CAAAA,EACAC,CACAX,EAAAA,EAAAA,CAAgB,IAAKc,CAAAA,CAAS,GAC9B,CAACF,CAAAA,EAED,EACEE,CAAAA,GAAc,GACb,GAAA,CAACE,CAAiBA,EAAAA,CAAAA,CAAc,iBAAkB,EAAA,GAAMA,CAI3DR,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,CAAGA,EAAAA,CAAAA,CAAO,KAAM,CAAA,CAAA,CAAG5N,EAAQ,CAAC,CAAC,CAAGiO,EAAAA,CAAS,CAAGL,EAAAA,CAAAA,CAAO,KAAM5N,CAAAA,CAAAA,CAAQ,CAAC,CAAC,CAC5E+N,CAAAA,CAAAA,CAAAA,CAAsBD,CACtBD,CAAAA,CAAAA,CAAkB,IAClBC,CAAAA,CAAAA,CAAkB,KACb,CAAA,KAAA,CACL,IAAMQ,CAAAA,CAAiBJ,CAAU,CAAA,iBAAA,EAC3BK,CAAAA,CAAAA,CAAiBL,CAAU,CAAA,iBAAA,EACjCH,CAAAA,CAAAA,CAAsBD,CACtBD,CAAAA,CAAAA,CACES,CAAmBJ,GAAAA,CAAAA,EAAaK,IAAmBL,CACrDJ,CAAAA,CAAAA,CACES,CAAmBL,GAAAA,CAAAA,EAAaI,CAAmBJ,GAAAA,EACvD,CACF,CAEA,OAAON,CACT,CAEaY,CAAAA,CAAAA,CAAa,CAAC,CACzB,IAAMb,CAAAA,CAAAA,CACN,uBAAAc,CAAyB,CAAA,IAAA,CACzB,KAAA3T,CAAAA,CACF,CAQc,GAAA,CACZ,IAAI6D,CAAAA,CAAS7D,CAAM,CAAA,IAAA,EAEnB,CAAA,OAAK6D,CAAO,CAAA,MAAA,CAIR,CAACgP,CAAAA,EAASA,IAAU,UACfhP,CAAAA,CAAAA,CAGLA,CAAO,CAAA,MAAA,GAAW,CACpB2O,EAAAA,EAAAA,CAAiB,SAAY,CAAA,CAAA,CACzBA,EAAiB,CAAA,IAAA,CAAK3O,CAAM,CAAA,CACvB,EAGFgP,CAAAA,CAAAA,GAAU,YAAgBA,EAAAA,CAAAA,GAAU,sBACvChP,CAAAA,CAAAA,CAAO,iBAAkB,EAAA,CACzBA,CAAO,CAAA,iBAAA,EAGQA,GAAAA,CAAAA,GAAWA,CAAO,CAAA,iBAAA,EAGrCA,GAAAA,CAAAA,CAAS+O,EAAa,CAAA,CAAE,IAAMC,CAAAA,CAAAA,CAAO,OAAQhP,CAAO,CAAC,CAGnD8P,CAAAA,CAAAA,CAAAA,CAAAA,EAA0B9P,CAAO,CAAA,CAAC,CAAM7D,GAAAA,CAAAA,CAAM,CAAC,CAAA,IACjD6D,CAASA,CAAAA,CAAAA,CAAO,OAAQ4O,CAAAA,EAAAA,CAAyB,EAAE,CAAA,CAAA,CAGrD5O,EACEgP,CAAU,GAAA,sBAAA,CACNhP,CAAO,CAAA,iBAAA,EACPA,CAAAA,CAAAA,CAAO,iBAAkB,EAAA,CAE3BgP,CAAU,GAAA,YAAA,GACZhP,CAAS,CAAA,CAAA,EAAGA,CAAO,CAAA,MAAA,CAAO,CAAC,CAAA,CAAE,mBAAmB,CAAA,EAAGA,CAAO,CAAA,KAAA,CAAM,CAAC,CAAC,CAGhEgP,CAAAA,CAAAA,CAAAA,CAAAA,GAAU,YAAgBA,EAAAA,CAAAA,GAAU,sBACtChP,EAAAA,CAAAA,CAASA,CAAO,CAAA,UAAA,CACd6O,EACA,CAAA,CAAClB,EAAOoC,CAAYC,CAAAA,CAAAA,GACdA,CAAW,GAAA,CAAA,EAAK,CAACF,CAAAA,CACZnC,CAEF,CAAA,CAAA,CAAA,EAAIoC,CAAU,CAAA,CAEzB,CAEI/P,CAAAA,CAAAA,CAAOA,CAAO,CAAA,MAAA,CAAS,CAAC,CAAA,GAAM,MAEhCA,CAASA,CAAAA,CAAAA,CAAO,KAAM,CAAA,CAAA,CAAGA,CAAO,CAAA,MAAA,CAAS,CAAC,CAAA,CAAA,GAG5C6O,EAA8B,CAAA,SAAA,CAAY,CAC1CC,CAAAA,EAAAA,CAA2B,SAAY,CAAA,CAAA,CAEvC9O,CAASA,CAAAA,CAAAA,CAAO,WACd8O,EACA,CAAA,CAACnB,CAAOhO,CAAAA,CAAAA,CAAGqQ,CACL,GAAA,CAAC,GAAK,CAAA,GAAA,CAAK,GAAG,CAAA,CAAE,QAAShQ,CAAAA,CAAAA,CAAO,MAAOgQ,CAAAA,CAAAA,CAASrC,CAAM,CAAA,MAAM,CAAC,CACxDA,CAAAA,CAAAA,CAGFA,CAAM,CAAA,iBAAA,EAEjB,CAAA,CAEA3N,CAASA,CAAAA,CAAAA,CAAO,UACd6O,CAAAA,EAAAA,CACA,CAAClB,CAAAA,CAAOoC,CAAYC,CAAAA,CAAAA,GAEhBA,CAAW,GAAA,CAAA,EACX,CAACF,CAAAA,EACDnC,CAAM,CAAA,CAAC,CACPxR,EAAAA,CAAAA,CAAM,UAAWwR,CAAAA,CAAAA,CAAM,CAAC,CAAC,CAElBA,CAAAA,CAAAA,CAEFoC,CAAW,CAAA,iBAAA,EAEtB,CAAA,CAAA,CAGK/P,GAnFE,EAoFX,CAAA,CCrLO,IAAMiQ,CAAAA,CAAiB,CAAC,CAC7B,IAAMjB,CAAAA,CAAAA,CAAQ,YACd,CAAA,EAAA,CAAAkB,CACA,CAAA,IAAA,CAAAlM,CACF,CAAA,GAGc,CACZ,IAAImM,EAAQ,EACZ,CAAA,OAAQnM,CAAM,EACZ,KAAK,MAAA,CACHmM,CAAQ,CAAA,MAAA,CACR,MACF,KAAK,OAEHA,CAAAA,CAAAA,CAAQ,OACR,CAAA,MACF,KAAK,QAAA,CAEHA,EAAQ,QACR,CAAA,MACF,KAAK,UAAA,CAEHA,CAAQ,CAAA,UAAA,CACR,MACF,KAAK,WAEHA,CAAAA,CAAAA,CAAQ,WACR,CAAA,KACJ,CACA,OAAO,CAAGrC,EAAAA,EAAK,CAAG+B,EAAAA,CAAAA,CAAW,CAC3B,IAAA,CAAMb,CACN,CAAA,KAAA,CAAOkB,CACT,CAAC,CAAC,CAAA,CAAA,EAAIC,CAAK,CAAA,CACb,CCzCO,CAAA,IAAMC,CAAU,CAAA,OAAA,CAEvB,SAASC,EACPN,CAAAA,CAAAA,CACAO,CACG,CAAA,CACH,OAAO,CACL,GAAGP,CAAAA,CACH,IAAI,IAAA,EAAO,CACT,OAAAO,CAAQP,GAAAA,CAAU,CACXA,CAAAA,CAAAA,CAAW,IACpB,CACF,CACF,CAEO,IAAMQ,EAAuB,CAAA,CAAC,CACnC,OAAA,CAAAC,CACA,CAAA,IAAA,CAAAC,CACA,CAAA,SAAA,CAAAC,CACF,CAAA,GAIkB,CAChB,IAAMC,EAAiBH,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAIJ,CAAQ,CAAC,CAAG,CAAA,UAAA,CAAW,CAC/D,IAAA,CAAMH,CAAe,CAAA,CAAE,EAAIS,CAAAA,CAAAA,CAAU,EAAI,CAAA,IAAA,CAAM,MAAO,CAAC,CACvD,CAAA,SAAA,CAAW,MACb,CAAC,CACD,CAAA,OAAOL,EAAcM,CAAAA,CAAAA,CAAiBZ,CAAe,EAAA,CAC/CA,CAAW,CAAA,IAAA,EACbU,CAAK,CAAA,MAAA,CAAO,CACV,MAAQ,CAAA,IAAA,CACR,MAAQA,CAAAA,CAAAA,CAAK,kBAAmB,CAAA,CAAE,OAAAD,CAAAA,CAAAA,CAAS,EAAIJ,CAAAA,CAAQ,CAAC,CAAA,CACxD,IAAML,CAAAA,CAAAA,CAAW,IACnB,CAAC,EAEL,CAAC,CACH,CAEaa,CAAAA,EAAAA,CAAwB,CAAC,CACpC,OAAAJ,CAAAA,CAAAA,CACA,IAAAC,CAAAA,CAAAA,CACA,SAAAC,CAAAA,CACF,CAIkB,GAAA,CAChB,IAAMG,CAAAA,CAAkBL,EAAQ,IAAK,CAAA,CAAE,EAAIJ,CAAAA,CAAQ,CAAC,CAAA,CAAG,UAAW,CAAA,CAChE,IAAMH,CAAAA,CAAAA,CAAe,CAAE,EAAA,CAAIS,CAAU,CAAA,EAAA,CAAI,IAAM,CAAA,OAAQ,CAAC,CACxD,CAAA,SAAA,CAAW,MACb,CAAC,CACD,CAAA,OAAOL,EAAcQ,CAAAA,CAAAA,CAAkBd,CAAe,EAAA,CAChDA,CAAW,CAAA,IAAA,EACbU,CAAK,CAAA,MAAA,CAAO,CACV,MAAA,CAAQ,KACR,MAAQA,CAAAA,CAAAA,CAAK,kBAAmB,CAAA,CAAE,OAAAD,CAAAA,CAAAA,CAAS,EAAIJ,CAAAA,CAAQ,CAAC,CAAA,CACxD,IAAML,CAAAA,CAAAA,CAAW,IACnB,CAAC,EAEL,CAAC,CACH,CAEae,CAAAA,EAAAA,CAA2B,CAAC,CACvC,OAAAN,CAAAA,CAAAA,CACA,IAAAC,CAAAA,CAAAA,CACA,SAAAC,CAAAA,CACF,CAIkB,GAAA,CAChB,IAAMK,CAAAA,CAAqBP,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAIJ,CAAAA,CAAQ,CAAC,CAAA,CAAG,UAAW,CAAA,CACnE,IAAMH,CAAAA,CAAAA,CAAe,CAAE,EAAA,CAAIS,CAAU,CAAA,EAAA,CAAI,IAAM,CAAA,UAAW,CAAC,CAAA,CAC3D,SAAW,CAAA,MACb,CAAC,CAAA,CACD,OAAOL,EAAAA,CAAcU,CAAqBhB,CAAAA,CAAAA,EAAe,CACnDA,CAAAA,CAAW,IACbU,EAAAA,CAAAA,CAAK,MAAO,CAAA,CACV,MAAQ,CAAA,IAAA,CACR,OAAQA,CAAK,CAAA,kBAAA,CAAmB,CAAE,OAAA,CAAAD,CAAS,CAAA,EAAA,CAAIJ,CAAQ,CAAC,CACxD,CAAA,IAAA,CAAML,CAAW,CAAA,IACnB,CAAC,EAEL,CAAC,CACH,EClFA,IAAMiB,EAAAA,CAA0D,CAAC,CAC/D,OAAAR,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CACF,CAAM,GAAA,CACJ,GAAM,CAAE,OAAAgT,CAAAA,CAAQ,CAAIhT,CAAAA,CAAAA,CAEpB,GAAIgT,CAAY,GAAA,KAAA,CACd,OAGF,GAAI,OAAOA,CAAAA,EAAY,QACrB,CAAA,OAAOA,CAGT,CAAA,GAAM,CAAE,OAAA,CAAAC,CAAQ,CAAA,CAAIV,CAAQ,CAAA,EAAA,CAE5B,GAAKU,CAAAA,CAIL,OAAOA,CAAAA,CAAQ,OAAOD,CAAAA,EAAY,QAAWA,CAAAA,CAAAA,CAAU,CAAC,CAAA,EAAG,GAC7D,CAAA,CAEaE,EAA8B,CAAA,CAAC,CAAE,OAAA,CAAAX,EAAS,MAAAvS,CAAAA,CAAO,CAAM,GAAA,CAClE,IAAMwS,CAAAA,CAAOD,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAI7S,EAAS,CAAC,CAEpCyT,CAAAA,CAAAA,CAAehE,CAAiB,CAAA,CACpC,OAAQoD,CAAQ,CAAA,MAAA,CAChB,YAAcC,CAAAA,CAAAA,CAAK,oBAAqB,EAC1C,CAAC,CAAA,CACKU,CAAeV,CAAAA,CAAAA,CAAK,MAAO,CAAA,CAC/B,MAAQW,CAAAA,CAAAA,CACR,IAAM,CAAA,cACR,CAAC,CACKC,CAAAA,CAAAA,CAAeZ,CAAK,CAAA,MAAA,CAAO,CAC/B,MAAA,CAAQW,CACR,CAAA,IAAA,CAAM,cACR,CAAC,CACKE,CAAAA,CAAAA,CAAgBb,CAAK,CAAA,MAAA,CAAO,CAChC,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQA,CAAK,CAAA,kBAAA,CAAmB,CAAE,OAAA,CAAAD,CAAS,CAAA,EAAA,CAAIJ,CAAQ,CAAC,CACxD,CAAA,IAAA,CAAM,eACR,CAAC,CAEKmB,CAAAA,CAAAA,CAAqBtT,EAAO,iBAC9BwS,CAAAA,CAAAA,CAAK,MAAO,CAAA,CACV,MAAQA,CAAAA,CAAAA,CAAK,kBAAmB,CAAA,CAC9B,OAAAD,CAAAA,CAAAA,CACA,EAAIvS,CAAAA,CAAAA,CAAO,iBACb,CAAC,CACD,CAAA,IAAA,CAAM,oBACR,CAAC,CAAA,CACD,MAEEuT,CAAAA,CAAAA,CAAgC,EAAC,CAEjCC,CAAkBT,CAAAA,EAAAA,CAAqB,CAAE,OAAA,CAAAR,CAAS,CAAA,MAAA,CAAAvS,CAAO,CAAC,CAChE,CAAA,GAAIwT,EAAiB,CACnB,IAAMC,CAAMjE,CAAAA,EAAAA,CAASgE,CAAe,CAAA,CAChCC,CAAI,CAAA,QAAA,EAAYA,CAAI,CAAA,IAAA,EAAQ,CAACD,CAAAA,CAAgB,QAAS,CAAA,GAAG,CAC3DD,EAAAA,CAAAA,CAAc,KAAK,CACjB,GAAA,CAAK5T,CAAoB4S,CAAAA,CAAAA,CAAQ,MAAM,CAAA,CACvC,KAAOiB,CAAAA,CACT,CAAC,EAEL,CAEI,cAAA,GAAkBxT,CAAUA,EAAAA,CAAAA,CAAO,YACrCuT,EAAAA,CAAAA,CAAc,KAAK,CACjB,GAAA,CAAK,cACL,CAAA,KAAA,CAAO,IACT,CAAC,CAGH,CAAA,IAAMG,CAAyB,CAAA,CAC7BhF,CAAS,CAAA,cAAA,CAAe,CACtB,YAAA,CAAc0E,CAAa,CAAA,IAAA,CAC3B,WAAYG,CAAc,CAAA,MAAA,CACtB,CAAC7E,CAAAA,CAAS,gBAAiB,CAAA,CAAE,GAAK6E,CAAAA,CAAc,CAAC,CAAC,CAClD,CAAA,MAAA,CACJ,KAAO,CAAA,CAAC7E,CAAS,CAAA,iBAAA,CAAkB,CAAE,QAAU2E,CAAAA,CAAAA,CAAc,IAAK,CAAC,CAAC,CACtE,CAAC,CACH,CAEM/J,CAAAA,CAAAA,CAAYoF,CAAS,CAAA,aAAA,CAAc,CACvC,WAAA,CAAa,IACb,CAAA,UAAA,CAAYA,CAAS,CAAA,cAAA,CAAe,CAClC,YAAA,CAAcwE,CAAa,CAAA,IAAA,CAC3B,UAAYI,CAAAA,CAAAA,CACR,CACE5E,CAAAA,CAAS,cAAe,CAAA,CACtB,YAAc4E,CAAAA,CAAAA,CAAmB,IACjC,CAAA,UAAA,CAAYI,CACd,CAAC,CACH,CACAA,CAAAA,CACN,CAAC,CAAA,CACD,IAAM,CAAA,QACR,CAAC,CAAA,CACDlB,CAAK,CAAA,GAAA,CAAIlJ,CAAS,EACpB,CCrGO,CAAA,IAAMqK,GAAwC,CAAC,CAAE,OAAApB,CAAAA,CAAQ,CAAM,GAAA,CACpE,IAAMC,CAAAA,CAAOD,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAI7S,EAAS,CAAC,CAEpCyT,CAAAA,CAAAA,CAAehE,EAAiB,CACpC,MAAA,CAAQoD,CAAQ,CAAA,MAAA,CAChB,YAAcC,CAAAA,CAAAA,CAAK,oBAAqB,EAC1C,CAAC,CAAA,CACKa,CAAgBb,CAAAA,CAAAA,CAAK,MAAO,CAAA,CAChC,MAAQ,CAAA,IAAA,CACR,MAAQA,CAAAA,CAAAA,CAAK,kBAAmB,CAAA,CAAE,OAAAD,CAAAA,CAAAA,CAAS,EAAIJ,CAAAA,CAAQ,CAAC,CAAA,CACxD,IAAM,CAAA,eACR,CAAC,CAAA,CACKyB,CAAapB,CAAAA,CAAAA,CAAK,OAAO,CAC7B,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQW,CACR,CAAA,IAAA,CAAM,QACR,CAAC,CACKU,CAAAA,CAAAA,CAAuBrB,CAAK,CAAA,MAAA,CAAO,CACvC,KAAA,CAAO,sBACP,CAAA,MAAA,CAAQ,KACR,MAAQW,CAAAA,CAAAA,CACR,IAAM,CAAA,eACR,CAAC,CAAA,CAEKW,CAA2BpF,CAAAA,CAAAA,CAAS,iBAAkB,CAAA,CAC1D,QAAUmF,CAAAA,CAAAA,CAAqB,IACjC,CAAC,CACKE,CAAAA,CAAAA,CAAQrF,EAAS,iBAAkB,CAAA,CAAE,QAAU,CAAA,GAAI,CAAC,CAAA,CAEpDsF,CAAyBtF,CAAAA,CAAAA,CAAS,oBAAqB,CAAA,CAC3D,OAAS,CAAA,CACP,6EACA,CAAA,yEAAA,CACA,EACA,CAAA,oEAAA,CACA,mEACA,CAAA,sDACF,CACA,CAAA,UAAA,CAAY,IACZ,CAAA,IAAA,CAAM,oBACN,CAAA,IAAA,CAAMA,CAAS,CAAA,gBAAA,CAAiB,CAC9B,UAAA,CAAY,CACVA,CAAAA,CAAS,oBAAqB,CAAA,CAC5B,KAAM,UACN,CAAA,QAAA,CAAU,KACV,CAAA,IAAA,CAAMA,CAAS,CAAA,iBAAA,CAAkB,CAC/B,aAAA,CAAe,CACbA,CAAAA,CAAS,oBAAqB,CAAA,CAC5B,KAAO,CAAA,CAACoF,CAA0BC,CAAAA,CAAK,CACzC,CAAC,CACH,CACA,CAAA,QAAA,CAAUH,CAAW,CAAA,IACvB,CAAC,CACH,CAAC,CACH,CACA,CAAA,UAAA,CAAYlF,CAAS,CAAA,iBAAA,CAAkB,CACrC,aAAA,CAAe,CACbA,CAAS,CAAA,oBAAA,CAAqB,CAC5B,KAAA,CAAO,CACLA,CAAAA,CAAS,iBAAkB,CAAA,CACzB,aAAe,CAAA,CAACoF,CAAwB,CAAA,CACxC,QAAU,CAAA,UACZ,CAAC,CAAA,CACDC,CACF,CACF,CAAC,CACH,CAAA,CACA,QAAUH,CAAAA,CAAAA,CAAW,IACvB,CAAC,CACH,CAAC,CACD,CAAA,cAAA,CAAgB,CACd,CACE,OAASlF,CAAAA,CAAAA,CAAS,kBAAkB,CAAE,QAAA,CAAU2E,CAAc,CAAA,IAAK,CAAC,CAAA,CACpE,OAASS,CAAAA,CAAAA,CACT,IAAM,CAAA,GACR,CACF,CACF,CAAC,CAAA,CAEDtB,CAAK,CAAA,GAAA,CAAIwB,CAAsB,EACjC,CAAA,CCjFO,IAAMC,EAAAA,CAAqC,CAAC,CAAE,OAAA1B,CAAAA,CAAAA,CAAS,MAAAvS,CAAAA,CAAO,CAAM,GAAA,CACzEuS,CAAQ,CAAA,UAAA,CAAW,CACjB,eAAA,CAAiBvS,EAAO,eACxB,CAAA,EAAA,CAAIN,EACJ,CAAA,IAAA,CAAMM,CAAO,CAAA,MACf,CAAC,CAAA,CAED2T,EAAuB,CAAA,CAAE,OAAApB,CAAAA,CAAgB,CAAC,CAAA,CAC1CW,EAAa,CAAA,CAAE,OAAAX,CAAAA,CAAAA,CAAS,MAAAvS,CAAAA,CAAO,CAAC,EAClC,CCTO,CAAA,IAAMkU,EAAuC,CAAA,CAClD,GAAGzU,EAAAA,CACH,QAAUwU,CAAAA,EAAAA,CACV,eAAgB,IAAM,EACtB,CAAA,IAAA,CAAM,uBACN,CAAA,YAAA,CAAc,KAChB,CAAA,CCNO,IAAMC,EAAAA,CAAuC,CAClD,GAAGzU,EACH,CAAA,QAAA,CAAUwU,EACV,CAAA,cAAA,CAAgB,IAAM,EAAC,CACvB,IAAM,CAAA,uBAAA,CACN,YAAc,CAAA,KAChB,CCNO,CAAA,IAAMC,EAAuC,CAAA,CAClD,GAAGzU,EAAAA,CACH,QAAUwU,CAAAA,EAAAA,CACV,cAAgB,CAAA,IAAM,EACtB,CAAA,IAAA,CAAM,sBACN,CAAA,YAAA,CAAc,KAChB,CAAA,CCNO,IAAMC,EAAAA,CAAuC,CAClD,GAAGzU,EACH,CAAA,QAAA,CAAUwU,EACV,CAAA,cAAA,CAAgB,IAAM,EACtB,CAAA,IAAA,CAAM,sBACR,CAAA,CCPO,IAAMC,EAAAA,CAAuC,CAClD,QAAA,CAAU,IAAM,EAChB,CAAA,cAAA,CAAgB,IAAM,EACtB,CAAA,KAAA,CAAO,CAAC,QAAQ,CAAA,CAChB,IAAM,CAAA,gBAAA,CACN,MAAQ,CAAA,QACV,CCNO,CAAA,IAAMA,EAAuC,CAAA,CAClD,QAAU,CAAA,IAAM,EAAC,CACjB,cAAgB,CAAA,IAAM,EACtB,CAAA,KAAA,CAAO,CAAC,QAAQ,CAChB,CAAA,IAAA,CAAM,cACN,CAAA,MAAA,CAAQ,QACV,CAAA,CCNO,IAAMA,EAAAA,CAAuC,CAClD,QAAA,CAAU,IAAM,GAChB,cAAgB,CAAA,IAAM,EAAC,CACvB,KAAO,CAAA,CAAC,QAAQ,CAAA,CAChB,IAAM,CAAA,cAAA,CACN,MAAQ,CAAA,QACV,CCNO,CAAA,IAAMA,EAAuC,CAAA,CAClD,QAAU,CAAA,IAAM,EAAC,CACjB,cAAgB,CAAA,IAAM,EAAC,CACvB,KAAO,CAAA,CAAC,QAAQ,CAAA,CAChB,IAAM,CAAA,aAAA,CACN,MAAQ,CAAA,QACV,ECNO,IAAMA,EAAAA,CAAuC,CAClD,QAAA,CAAU,IAAM,EAChB,CAAA,cAAA,CAAgB,IAAM,EACtB,CAAA,KAAA,CAAO,CAAC,QAAQ,CAChB,CAAA,IAAA,CAAM,aACN,MAAQ,CAAA,QACV,CCAA,CAAA,IAAMC,EAAU,CAAA,CACd9T,EACAE,CAAAA,EAAAA,CACAH,EACAE,CAAAA,EAAAA,CACAH,EACF,CAAA,CAEaiU,EAAyBrU,CAAAA,CAAAA,EAAyB,CAC7D,IAAI+R,EAAa/R,CAAK,CAAA,OAAA,CAAQ,mCAAqC,CAAA,GAAG,CAGtE,CAAA,GADAE,EAA6B,CAAA,SAAA,CAAY,CACrCA,CAAAA,EAAAA,CAA6B,IAAK6R,CAAAA,CAAU,CAC9C,CAAA,OAAO,CAAIA,CAAAA,EAAAA,CAAU,GAGvB,IAAWuC,IAAAA,CAAAA,IAAUF,EAAS,CAAA,CAC5B,GAAIrC,CAAAA,CAAW,UAAW,CAAA,GAAG,CAC3B,CAAA,OAAOA,CAGTA,CAAAA,CAAAA,CAAaA,CAAW,CAAA,OAAA,CAAQuC,CAAQ,CAAA,KAAK,EAC/C,CAEA,OAAOvC,CACT,CAAA,CCrBA,IAAMwC,EAAAA,CAAY,SAEZC,CAAAA,EAAAA,CAAc,CAAC,CACnB,MAAAvU,CAAAA,CAAAA,CACA,MAAAwU,CAAAA,CACF,CAMM,GAAA,CACAxU,EAAO,IAAS,GAAA,MAAA,GACdwU,CAAO,CAAA,WAAA,EACT,OAAOA,CAAAA,CAAO,WAGZA,CAAAA,CAAAA,CAAO,qBAAqB,CAAA,EAC9B,OAAOA,CAAAA,CAAO,qBAAqB,CAAA,CAGjCA,CAAO,CAAA,iBAAiB,GAC1B,OAAOA,CAAAA,CAAO,iBAAiB,CAAA,CAG7BA,CAAO,CAAA,aAAa,CACtB,EAAA,OAAOA,CAAO,CAAA,aAAa,CAGzBA,CAAAA,CAAAA,CAAO,KACT,EAAA,OAAOA,CAAO,CAAA,KAAA,EAGpB,CAEMC,CAAAA,EAAAA,CAA6B,CAAC,CAClC,OAAAlC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ0U,CAAAA,CACV,CAIiC,GAAA,CAC/B,GAAI,KAAA,CAAM,OAAQA,CAAAA,CAAO,EACvB,OAAOA,CAAAA,CAAQ,GAAK3K,CAAAA,CAAAA,EAClB0K,EAA2B,CAAA,CACzB,OAAAlC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ+J,CAAAA,CACV,CAAC,CACH,CAGF,CAAA,IAAMyK,EAAS,eAAgBE,CAAAA,CAAO,CAEtC,CAAA,GAAIF,CAAO,CAAA,IAAA,CAGT,OAAAA,CAAAA,CAAO,IAAO,CAAA,SAAA,CAAUA,CAAO,CAAA,IAAI,CAC5BA,CAAAA,CAAAA,CAkCT,GA/BAD,EAAAA,CAAY,CAAE,MAAAvU,CAAAA,CAAAA,CAAQ,MAAAwU,CAAAA,CAAO,CAAC,CAAA,CAG5BA,CAAO,CAAA,oBAAA,EACP,OAAOA,CAAAA,CAAO,oBAAyB,EAAA,SAAA,GAEvCA,CAAO,CAAA,oBAAA,CAAuBC,EAA2B,CAAA,CACvD,OAAAlC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQwU,CAAAA,CAAAA,CAAO,oBACjB,CAAC,CAGCA,CAAAA,CAAAA,CAAAA,CAAO,KACTA,GAAAA,CAAAA,CAAO,KAAQA,CAAAA,CAAAA,CAAO,KAAM,CAAA,GAAA,CAAKzK,GAC/B0K,EAA2B,CAAA,CACzB,OAAAlC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ+J,CAAAA,CACV,CAAC,CACH,CAGEyK,CAAAA,CAAAA,CAAAA,CAAO,KACTA,GAAAA,CAAAA,CAAO,KAAQC,CAAAA,EAAAA,CAA2B,CACxC,OAAAlC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQwU,CAAAA,CAAAA,CAAO,KACjB,CAAC,CAGCA,CAAAA,CAAAA,CAAAA,CAAO,UACT,CAAA,IAAA,IAAWzU,CAAQyU,IAAAA,CAAAA,CAAO,UAAY,CAAA,CACpC,IAAM3G,CAAW2G,CAAAA,CAAAA,CAAO,UAAWzU,CAAAA,CAAI,CAEnC,CAAA,OAAO8N,CAAa,EAAA,SAAA,GACtB2G,CAAO,CAAA,UAAA,CAAWzU,CAAI,CAAA,CAAI0U,EAA2B,CAAA,CACnD,OAAAlC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ6N,CAAAA,CACV,CAAC,CAAA,EAEL,CAGF,OAAO2G,CACT,CAAA,CAEMG,EAA6B,CAAA,CAAC,CAClC,OAAA,CAAApC,CACA,CAAA,MAAA,CAAAvS,EACA,MAAQ0U,CAAAA,CACV,CAIgE,GAAA,CAC9D,GAAI,KAAA,CAAM,OAAQA,CAAAA,CAAO,CACvB,CAAA,OAAOA,CAAQ,CAAA,GAAA,CAAK3K,CAClB4K,EAAAA,EAAAA,CAA2B,CACzB,OAAA,CAAApC,EACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ+J,CAAAA,CACV,CAAC,CACH,CAGF,CAAA,IAAMyK,CAAS,CAAA,eAAA,CAAgBE,CAAO,CAAA,CAEtC,GAAI,MAAA,GAAUF,CAGZ,CAAA,OAAAA,EAAO,IAAO,CAAA,SAAA,CAAUA,CAAO,CAAA,IAAI,CAC5BA,CAAAA,CAAAA,CAsDT,GAnDAD,EAAAA,CAAY,CAAE,MAAA,CAAAvU,CAAQ,CAAA,MAAA,CAAAwU,CAAO,CAAC,CAG5BA,CAAAA,CAAAA,CAAO,sBACP,OAAOA,CAAAA,CAAO,oBAAyB,EAAA,SAAA,GAEvCA,CAAO,CAAA,oBAAA,CAAuBG,EAA2B,CAAA,CACvD,OAAApC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQwU,CAAAA,CAAAA,CAAO,oBACjB,CAAC,GAGCA,CAAO,CAAA,KAAA,GACTA,CAAO,CAAA,KAAA,CAAQA,CAAO,CAAA,KAAA,CAAM,GAAKzK,CAAAA,CAAAA,EAC/B4K,EAA2B,CAAA,CACzB,OAAApC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ+J,CAAAA,CACV,CAAC,CACH,CAAA,CAAA,CAGEyK,CAAO,CAAA,KAAA,GACTA,CAAO,CAAA,KAAA,CAAQA,CAAO,CAAA,KAAA,CAAM,GAAKzK,CAAAA,CAAAA,EAC/B4K,EAA2B,CAAA,CACzB,OAAApC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,OAAQ+J,CACV,CAAC,CACH,CAAA,CAAA,CAGEyK,CAAO,CAAA,KAAA,GACTA,CAAO,CAAA,KAAA,CAAQG,EAA2B,CAAA,CACxC,OAAApC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQwU,CAAAA,CAAAA,CAAO,KACjB,CAAC,CAGCA,CAAAA,CAAAA,CAAAA,CAAO,KACTA,GAAAA,CAAAA,CAAO,KAAQA,CAAAA,CAAAA,CAAO,KAAM,CAAA,GAAA,CAAKzK,CAC/B4K,EAAAA,EAAAA,CAA2B,CACzB,OAAA,CAAApC,CACA,CAAA,MAAA,CAAAvS,EACA,MAAQ+J,CAAAA,CACV,CAAC,CACH,CAGEyK,CAAAA,CAAAA,CAAAA,CAAO,UACT,CAAA,IAAA,IAAWzU,CAAQyU,IAAAA,CAAAA,CAAO,UAAY,CAAA,CACpC,IAAM3G,CAAAA,CAAW2G,CAAO,CAAA,UAAA,CAAWzU,CAAI,CAEnC,CAAA,OAAO8N,CAAa,EAAA,SAAA,GACtB2G,CAAO,CAAA,UAAA,CAAWzU,CAAI,CAAA,CAAI4U,EAA2B,CAAA,CACnD,OAAApC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ6N,CAAAA,CACV,CAAC,CAEL,EAAA,CAGF,OAAO2G,CACT,CAEMI,CAAAA,EAAAA,CAA4B,CAAC,CACjC,OAAArC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ0U,CAAAA,CACV,CAIiC,GAAA,CAC/B,GAAI,KAAA,CAAM,OAAQA,CAAAA,CAAO,CACvB,CAAA,OAAOA,CAAQ,CAAA,GAAA,CAAK3K,CAClB6K,EAAAA,EAAAA,CAA0B,CACxB,OAAA,CAAArC,CACA,CAAA,MAAA,CAAAvS,CACA,CAAA,MAAA,CAAQ+J,CACV,CAAC,CACH,CAGF,CAAA,IAAMyK,CAAS,CAAA,eAAA,CAAgBE,CAAO,CAAA,CAqEtC,GAnEAH,EAAAA,CAAY,CAAE,MAAA,CAAAvU,CAAQ,CAAA,MAAA,CAAAwU,CAAO,CAAC,EAE1BA,CAAO,CAAA,IAAA,GAGTA,CAAO,CAAA,IAAA,CAAO,SAAUA,CAAAA,CAAAA,CAAO,IAAI,CAAA,CAAA,CAInCA,CAAO,CAAA,oBAAA,EACP,OAAOA,CAAAA,CAAO,oBAAyB,EAAA,SAAA,GAEvCA,CAAO,CAAA,oBAAA,CAAuBI,GAA0B,CACtD,OAAA,CAAArC,CACA,CAAA,MAAA,CAAAvS,CACA,CAAA,MAAA,CAAQwU,CAAO,CAAA,oBACjB,CAAC,CAAA,CAAA,CAGCA,CAAO,CAAA,KAAA,GACTA,CAAO,CAAA,KAAA,CAAQA,CAAO,CAAA,KAAA,CAAM,GAAKzK,CAAAA,CAAAA,EAC/B6K,EAA0B,CAAA,CACxB,OAAArC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ+J,CAAAA,CACV,CAAC,CACH,CAGEyK,CAAAA,CAAAA,CAAAA,CAAO,KACTA,GAAAA,CAAAA,CAAO,MAAQA,CAAO,CAAA,KAAA,CAAM,GAAKzK,CAAAA,CAAAA,EAC/B6K,EAA0B,CAAA,CACxB,OAAArC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ+J,CAAAA,CACV,CAAC,CACH,CAGEyK,CAAAA,CAAAA,CAAAA,CAAO,QACTA,CAAO,CAAA,KAAA,CAAQI,EAA0B,CAAA,CACvC,OAAArC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQwU,CAAAA,CAAAA,CAAO,KACjB,CAAC,CAGCA,CAAAA,CAAAA,CAAAA,CAAO,KACTA,GAAAA,CAAAA,CAAO,MAAQA,CAAO,CAAA,KAAA,CAAM,GAAKzK,CAAAA,CAAAA,EAC/B6K,EAA0B,CAAA,CACxB,OAAArC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ+J,CAAAA,CACV,CAAC,CACH,CAGEyK,CAAAA,CAAAA,CAAAA,CAAO,cACTA,CAAO,CAAA,WAAA,CAAcA,CAAO,CAAA,WAAA,CAAY,GAAKzK,CAAAA,CAAAA,EAC3C6K,EAA0B,CAAA,CACxB,OAAArC,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ+J,CAAAA,CACV,CAAC,CACH,GAGEyK,CAAO,CAAA,UAAA,CACT,IAAWzU,IAAAA,CAAAA,IAAQyU,CAAO,CAAA,UAAA,CAAY,CACpC,IAAM3G,CAAW2G,CAAAA,CAAAA,CAAO,UAAWzU,CAAAA,CAAI,CAEnC,CAAA,OAAO8N,CAAa,EAAA,SAAA,GACtB2G,EAAO,UAAWzU,CAAAA,CAAI,CAAI6U,CAAAA,EAAAA,CAA0B,CAClD,OAAA,CAAArC,CACA,CAAA,MAAA,CAAAvS,CACA,CAAA,MAAA,CAAQ6N,CACV,CAAC,CAEL,EAAA,CAGF,OAAO2G,CACT,EAEMK,EAAa,CAAA,CAAC,CAClB,IAAA,CAAA9U,CACA,CAAA,MAAA,CAAAC,CACA,CAAA,MAAA,CAAAwU,CACF,CAAA,GAQc,CACZ,IAAMM,CAAa9U,CAAAA,CAAAA,CAAO,WAAcD,GAAAA,CAAAA,CAAMyU,CAAM,CAAA,EAAK,CAAGzU,EAAAA,CAAI,CAChE,MAAA,CAAA,CAAA,OAAOqU,EAAsBU,CAAAA,CAAU,CACzC,CAAA,CAEMC,EAAgB,CAAA,CAAC,CACrB,OAAA,CAAAxC,CACA,CAAA,MAAA,CAAAvS,CACF,CAGM,GAAA,CACJ,GAAKuS,CAAAA,CAAQ,IAAK,CAAA,WAAA,CAIlB,IAAWxS,IAAAA,CAAAA,IAAQwS,CAAQ,CAAA,IAAA,CAAK,WAAa,CAAA,CAC3C,IAAMiC,CAAAA,CAASjC,CAAQ,CAAA,IAAA,CAAK,YAAYxS,CAAI,CAAA,CACtCuH,CAAMmN,CAAAA,EAAAA,CAA2B,CACrC,OAAA,CAAAlC,CACA,CAAA,MAAA,CAAAvS,CACA,CAAA,MAAA,CAAAwU,CACF,CAAC,CACKlL,CAAAA,CAAAA,CAAYoF,CAAS,CAAA,aAAA,CAAc,CACvC,SAAW,CAAA,OAAA,CACX,WAAa,CAAA,IAAA,CACb,UAAYA,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CAAE,GAAApH,CAAAA,CAAI,CAAC,CAAA,CAC7C,IAAMuN,CAAAA,EAAAA,CAAW,CAAE,IAAA,CAAA9U,CAAM,CAAA,MAAA,CAAAC,CAAQ,CAAA,MAAA,CAAAwU,CAAO,CAAC,CAC3C,CAAC,CACDjC,CAAAA,CAAAA,CAAQ,IAAK,CAAA,CAAE,EAAI+B,CAAAA,EAAU,CAAC,CAAA,CAAG,IAAIhL,CAAS,EAChD,CACF,CAAA,CAEM0L,EAAgB,CAAA,CAAC,CACrB,OAAA,CAAAzC,CACA,CAAA,MAAA,CAAAvS,CACF,CAAA,GAGM,CACJ,GAAKuS,CAAQ,CAAA,IAAA,CAAK,WAIlB,IAAWxS,IAAAA,CAAAA,IAAQwS,CAAQ,CAAA,IAAA,CAAK,UAAW,CAAA,OAAA,CAAS,CAClD,IAAMiC,CAASjC,CAAAA,CAAAA,CAAQ,IAAK,CAAA,UAAA,CAAW,OAAQxS,CAAAA,CAAI,CAC7CuH,CAAAA,CAAAA,CAAMqN,GAA2B,CACrC,OAAA,CAAApC,CACA,CAAA,MAAA,CAAAvS,CACA,CAAA,MAAA,CAAAwU,CACF,CAAC,CACKlL,CAAAA,CAAAA,CAAYoF,CAAS,CAAA,aAAA,CAAc,CACvC,SAAA,CAAW,OACX,CAAA,WAAA,CAAa,IACb,CAAA,UAAA,CAAYA,CAAS,CAAA,gBAAA,CAAiB,CAAE,GAAA,CAAApH,CAAI,CAAC,CAC7C,CAAA,IAAA,CAAMuN,EAAW,CAAA,CAAE,IAAA9U,CAAAA,CAAAA,CAAM,MAAAC,CAAAA,CAAAA,CAAQ,OAAAwU,CAAO,CAAC,CAC3C,CAAC,CACDjC,CAAAA,CAAAA,CAAQ,IAAK,CAAA,CAAE,EAAI+B,CAAAA,EAAU,CAAC,CAAA,CAAG,GAAIhL,CAAAA,CAAS,EAChD,CACF,EAEM2L,EAAgB,CAAA,CAAC,CACrB,OAAA,CAAA1C,CACA,CAAA,MAAA,CAAAvS,CACF,CAAA,GAGM,CACJ,GAAKuS,CAAQ,CAAA,IAAA,CAAK,UAIlB,CAAA,IAAA,IAAWxS,CAAQwS,IAAAA,CAAAA,CAAQ,KAAK,UAAW,CAAA,OAAA,CAAS,CAClD,IAAMiC,CAASjC,CAAAA,CAAAA,CAAQ,IAAK,CAAA,UAAA,CAAW,OAAQxS,CAAAA,CAAI,CAC7CuH,CAAAA,CAAAA,CAAMsN,EAA0B,CAAA,CACpC,OAAArC,CAAAA,CAAAA,CACA,OAAAvS,CACA,CAAA,MAAA,CAAAwU,CACF,CAAC,CACKlL,CAAAA,CAAAA,CAAYoF,CAAS,CAAA,aAAA,CAAc,CACvC,SAAA,CAAW,OACX,CAAA,WAAA,CAAa,IACb,CAAA,UAAA,CAAYA,CAAS,CAAA,gBAAA,CAAiB,CAAE,GAAApH,CAAAA,CAAI,CAAC,CAAA,CAC7C,IAAMuN,CAAAA,EAAAA,CAAW,CAAE,IAAA,CAAA9U,CAAM,CAAA,MAAA,CAAAC,CAAQ,CAAA,MAAA,CAAAwU,CAAO,CAAC,CAC3C,CAAC,EACDjC,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAI+B,EAAU,CAAC,CAAG,CAAA,GAAA,CAAIhL,CAAS,EAChD,CACF,CAAA,CAEa4L,EAAkC,CAAA,CAAC,CAAE,OAAA,CAAA3C,EAAS,MAAAvS,CAAAA,CAAO,CAAM,GAAA,CAOtE,GANAuS,CAAAA,CAAQ,UAAW,CAAA,CACjB,eAAiBvS,CAAAA,CAAAA,CAAO,eACxB,CAAA,EAAA,CAAIsU,EACJ,CAAA,IAAA,CAAMtU,CAAO,CAAA,MACf,CAAC,CAAA,CAEG,SAAauS,GAAAA,CAAAA,CAAQ,IAAM,CAAA,CAC7BwC,EAAc,CAAA,CACZ,OAASxC,CAAAA,CAAAA,CACT,MAAAvS,CAAAA,CACF,CAAC,CAAA,CACD,MACF,CAEA,OAAQuS,CAAQ,CAAA,IAAA,CAAK,OAAS,EAC5B,KAAK,OAAA,CACL,KAAK,OAAA,CACL,KAAK,OAAA,CACL,KAAK,OAAA,CACL,KAAK,OAAA,CACHyC,EAAc,CAAA,CACZ,QAASzC,CACT,CAAA,MAAA,CAAAvS,CACF,CAAC,CACD,CAAA,MACF,KAAK,OAAA,CACL,KAAK,OAAA,CACHiV,EAAc,CAAA,CACZ,OAAS1C,CAAAA,CAAAA,CACT,MAAAvS,CAAAA,CACF,CAAC,CACD,CAAA,MAGJ,CACF,CAAA,CCvZO,IAAMmV,EAAAA,CAAN,KAAqB,CAIlB,gBACA,CAAA,QAAA,CAA0B,EAAC,CAC3B,eACA,CAAA,QAAA,CAAW,IAAI,GAAA,CACf,MAAkC,CAAA,EAClC,CAAA,KAAA,CACA,KAED,CAAA,UAAA,CAAyB,CAC9B,IAAA,CAAM,EACN,CAAA,KAAA,CAAO,EACT,CAQO,CAAA,WAAA,CAAY,CACjB,GAAA,CAAAC,CACA,CAAA,eAAA,CAAAC,CAAkB,CAAA,KAAA,CAClB,MAAAtX,CAAAA,CAAAA,CAAS,IACT,CAAA,cAAA,CAAAuX,EACA,IAAAvV,CAAAA,CACF,CASG,CAAA,CACD,IAAK,CAAA,gBAAA,CAAmBsV,CACxB,CAAA,IAAA,CAAK,eAAkBC,CAAAA,CAAAA,CACvB,IAAK,CAAA,KAAA,CAAQ,IAAK,CAAA,QAAA,CAASvV,CAAI,CAAA,CAC/B,KAAK,KAAQoM,CAAAA,mBAAAA,CAAK,OAAQiJ,CAAAA,CAAAA,CAAK,IAAK,CAAA,KAAK,CAErCrX,CAAAA,CAAAA,EACF,IAAK,CAAA,QAAA,CAAS,IACZ,CAAA,uDACF,EAEJ,CAEO,GAAOkQ,CAAAA,GAAAA,CAAAA,CAAgC,CAC5C,IAAA,CAAK,MAAS,CAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAOA,CAAK,EACxC,CAOO,eAAA,CAAgB,CACrB,IAAA,CAAA8B,CACA,CAAA,SAAA,CAAAwF,CACF,CAAA,CAEe,CACb,IAAMC,CAAAA,CAAW,IAAK,CAAA,UAAA,CAAWD,CAAS,CAAA,CAAExF,CAAI,CAAA,CAChD,GAAI,CAACyF,CACH,CAAA,MAAM,IAAI,KAAA,CACR,CAAuBzF,oBAAAA,EAAAA,CAAI,iBAAiBwF,CAAS,CAAA,UAAA,CACvD,CAGF,CAAA,OAAAC,CAAS,CAAA,IAAA,CAAO,KAET,CAAA,CACL,OAAS,CAAA,KAAA,CACT,IAAMA,CAAAA,CAAAA,CAAS,IACjB,CACF,CAEA,IAAW,iBAA2B,CACpC,OAAO,IAAK,CAAA,gBACd,CAEO,UAAA,CAAW,CAChB,SAAA,CAAAD,CACA,CAAA,GAAGzR,CACL,CAAA,CAEe,CACb,OAAO2R,EAAuB,CAAA,CAC5B,KAAM,IAAK,CAAA,eAAA,CACX,SAAW,CAAA,IAAA,CAAK,UAAWF,CAAAA,CAAS,CACpC,CAAA,GAAGzR,CACL,CAAC,CACH,CAOO,MAAO,CAAA,CACZ,MAAAoG,CAAAA,CAAAA,CACA,GAAGwL,CACL,CAAA,CAEqB,CACnB,IAAIC,CAAY,CAAA,IAAA,CAAK,QAAS,CAAA,GAAA,CAAIzL,CAAM,CAAA,CAEnCyL,CACHA,GAAAA,CAAAA,CAAY,IAAI,GAAA,CAChB,IAAK,CAAA,QAAA,CAAS,IAAIzL,CAAQyL,CAAAA,CAAS,CAGrC,CAAA,CAAA,IAAMjG,CAAQiG,CAAAA,CAAAA,CAAU,GAAID,CAAAA,CAAAA,CAAa,IAAI,CAAA,CAC7C,OAAIhG,CAAAA,CACK,CACL,GAAGA,CACH,CAAA,IAAA,CAAMA,EAAM,KAASA,EAAAA,CAAAA,CAAM,IAC7B,CAAA,EAGFiG,CAAU,CAAA,GAAA,CAAID,CAAa,CAAA,IAAA,CAAMA,CAAY,CAAA,CACtC,CACL,GAAGA,CACH,CAAA,IAAA,CAAMA,CAAa,CAAA,KAAA,EAASA,CAAa,CAAA,IAC3C,CACF,CAAA,CAEO,OAAU,EAAA,CACf,OAAO,CAAC,IAAK,CAAA,MAAA,CAAO,MACtB,CAEO,oBAAuB,EAAA,CAC5B,GAAM,CAAE,KAAA3V,CAAK,CAAA,CAAI6V,EAAsB,CAAA,IAAA,CAAK,KAAK,CAAA,CACjD,OAAO7V,CACT,CAEO,kBAAA,CAAmB,CACxB,OAAA,CAAAwS,CACA,CAAA,EAAA,CAAAN,CACF,CAAA,CAGW,CACT,IAAI4D,CAAAA,CAAW,EAGf,CAAA,GAAI5D,CAAG,CAAA,UAAA,CAAW,GAAG,CAAA,CAAG,CACtB,IAAI6D,CAAiC,CAAA,EAGrC,CAAA,GAAIvD,CAAQ,CAAA,MAAA,CAAO,WAAY,CAC7B,IAAMwD,CAAWxD,CAAAA,CAAAA,CAAQ,MAAO,CAAA,UAAA,CAAW,KAAM,CAAA,GAAG,CACpDuD,CAAAA,CAAAA,CAAkBC,CAAS,CAAA,KAAA,CAAM,CAAGA,CAAAA,CAAAA,CAAS,MAAS,CAAA,CAAC,EACzD,CACAF,CAAW1J,CAAAA,mBAAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,GAAI,EAAA,CAAG,GAAG2J,CAAAA,CAAiB7D,CAAE,EAC/D,CAAO,KAAA,CACL,IAAMO,CAAAA,CAAOD,EAAQ,IAAK,CAAA,CAAE,EAAAN,CAAAA,CAAG,CAAC,CAAA,CAChC,GAAI,CAACO,CACH,CAAA,MAAM,IAAI,KAAA,CAAM,CAAgBP,aAAAA,EAAAA,CAAE,CAAiB,eAAA,CAAA,CAAA,CAErD4D,EAAWrD,CAAK,CAAA,MAClB,CAEA,IAAMwD,CAAgB,CAAA,IAAA,CAAK,KAAM,CAAA,KAAA,CAAM7J,mBAAK,CAAA,GAAG,CACzC8J,CAAAA,CAAAA,CAAgBJ,CAAS,CAAA,KAAA,CAAM1J,mBAAK,CAAA,GAAG,EAEzC/I,CAAQ,CAAA,EAAA,CACR8S,CAAe,CAAA,EAAA,CACnB,IAAW7F,IAAAA,CAAAA,IAAQ2F,CAEjB,CAAA,GADA5S,CAAS,EAAA,CAAA,CACL6S,CAAc7S,CAAAA,CAAK,CAAMiN,GAAAA,CAAAA,CAAM,CACjC,IAAM8F,CAAY,CAAA,KAAA,CAAM,IAAK,CAAA,CAC3B,MAAQH,CAAAA,CAAAA,CAAc,MAAS5S,CAAAA,CACjC,CAAC,CAAA,CAAE,IAAK,CAAA,EAAE,CACJgT,CAAAA,CAAAA,CAAqBH,CAAc,CAAA,KAAA,CAAM7S,CAAK,CAC9CiT,CAAAA,CAAAA,CAAiBD,CAAmB,CAAA,KAAA,CACxC,CACAA,CAAAA,CAAAA,CAAmB,MAAS,CAAA,CAC9B,CACIC,CAAAA,CAAAA,CAAe,MACjBA,EAAAA,CAAAA,CAAe,IAAK,CAAA,EAAE,CAExBH,CAAAA,CAAAA,CAAAA,CACGC,EAAU,IAAK,CAAA,KAAK,CAAK,EAAA,IAAA,EAAQE,CAAe,CAAA,IAAA,CAAK,GAAG,CAAA,CAC3D,KACF,CAGF,IAAMC,CAAAA,CAAWL,CAAcA,CAAAA,CAAAA,CAAc,MAAS,CAAA,CAAC,EAEvD,OAAO,CAAA,EAAGC,CAAY,CAAA,EAAGN,EAAsBU,CAAAA,CAAQ,CAAE,CAAA,IAAI,CAC/D,CAAA,CAEO,MAAOC,CAAAA,CAAAA,CAA2C,CACvD3H,mBAAAA,CAAG,MAAO,CAAA,IAAA,CAAK,MAAO2H,CAAO,EAC/B,CAKO,UAAA,EAAa,CAClB,IAAA,CAAK,MAAS,CAAA,IAAA,CAAK,MAAO,CAAA,KAAA,CAAM,CAAG,CAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAS,CAAC,EAC3D,CAEQ,QAASD,CAAAA,CAAAA,CAAkB,CACjC,GAAIA,CAAS,CAAA,QAAA,CAAS,OAAO,CAAA,CAC3B,OAAOA,CAAAA,CAGT,GAAM,CAAE,SAAAE,CAAAA,CAAAA,CAAW,IAAAzW,CAAAA,CAAK,EAAI6V,EAAsBU,CAAAA,CAAQ,CAC1D,CAAA,OAAO,CAACvW,CAAAA,CAAM,KAAOyW,CAAAA,CAAS,CAAE,CAAA,MAAA,CAAO,OAAO,CAAA,CAAE,IAAK,CAAA,GAAG,CAC1D,CAEO,SAASnF,CAAoB,CAAA;AAAA,CAAA,CAAM,CACxC,IAAIoF,CAAmB,CAAA,EACnB,CAAA,IAAA,CAAK,QAAS,CAAA,MAAA,EAChBA,CAAO,CAAA,IAAA,CAAK,IAAK,CAAA,QAAA,CAAS,IAAK,CAAA;AAAA,CAAI,CAAC,EAEtC,IAAMC,CAAAA,CAA+B,EACrC,CAAA,IAAA,GAAW,CAACC,CAAAA,CAAShB,CAAS,CAAA,GAAK,KAAK,QAAS,CAAA,OAAA,EAAW,CAAA,CAC1D,IAAM1K,CAAAA,CAAU,MAAM,IAAK0K,CAAAA,CAAAA,CAAU,MAAO,EAAC,CACvC9T,CAAAA,CAAAA,CAAO6M,EAAS,uBAAwB,CAAA,CAC5C,QAAAzD,CACA,CAAA,MAAA,CAAQ0L,CACV,CAAC,CAAA,CACDD,CAAmB,CAAA,IAAA,CAAK9U,EAAe,CAAA,CAAE,KAAAC,CAAK,CAAC,CAAC,EAClD,CACA,OAAI6U,EAAmB,MACrBD,EAAAA,CAAAA,CAAO,IAAKC,CAAAA,CAAAA,CAAmB,IAAK,CAAA;AAAA,CAAI,CAAC,CAAA,CAE3CD,CAASA,CAAAA,CAAAA,CAAO,MACd,CAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAK5U,CACf,EAAA,OAAOA,CAAS,EAAA,QAAA,CACZA,CACAD,CAAAA,EAAAA,CAAe,CAAE,IAAA,CAAAC,CAAM,CAAA,QAAA,CAAU,IAAK,CAAC,CAC7C,CACF,CACO4U,CAAAA,CAAAA,CAAO,IAAKpF,CAAAA,CAAS,CAC9B,CAEO,MAAMA,CAAY,CAAA;AAAA,CAAA,CAAM,CAC7B,GAAI,IAAA,CAAK,OAAQ,EAAA,CAAG,CAClB,IAAK,CAAA,MAAA,CAAO,CAAE,KAAA,CAAO,IAAK,CAAC,CAAA,CAC3B,MACF,CAEA,IAAI+D,CAAM,CAAA,IAAA,CAAK,KACf,CAAA,GAAI,OAAO,IAAK,CAAA,KAAA,EAAU,QAAU,CAAA,CAClC,IAAMtQ,CAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,KAAA,CAAMqH,oBAAK,GAAG,CAAA,CACvCiJ,EAAMtQ,CAAM,CAAA,KAAA,CAAM,EAAGA,CAAM,CAAA,MAAA,CAAS,CAAC,CAAA,CAAE,KAAKqH,mBAAK,CAAA,GAAG,EACtD,CACAwC,GAAcyG,CAAG,CAAA,CACjBxG,mBAAG,CAAA,aAAA,CAAc,KAAK,KAAO,CAAA,IAAA,CAAK,QAASyC,CAAAA,CAAS,CAAC,EACvD,CACF,CAcMoE,CAAAA,EAAAA,CAAyB,CAAC,CAC9B,IAAA,CAAA1F,CACA,CAAA,IAAA,CAAMuF,EACN,KAAAsB,CAAAA,CAAAA,CAAQ,CACR,CAAA,MAAA,CAAAC,EAAS,KACT,CAAA,eAAA,CAAAC,EACA,SAAAvB,CAAAA,CACF,IAA8C,CAC5C,IAAMzQ,CAAQiL,CAAAA,CAAAA,CAAK,MAAM,GAAG,CAAA,CACtBhQ,CAAO+E,CAAAA,CAAAA,CAAMA,EAAM,MAAS,CAAA,CAAC,CAAK,EAAA,EAAA,CAExC,GAAI,CAAC/E,CAAAA,CACH,OAAO,CACL,QAAS,KACT,CAAA,IAAA,CAAM,EACR,CAAA,CAGF,IAAMyV,CAAWD,CAAAA,CAAAA,CAAUxF,CAAI,CAAA,CAC/B,GAAIyF,CACF,CAAA,OAAO,CACL,OAAA,CAAS,MACT,IAAMA,CAAAA,CAAAA,CAAS,IACjB,CAGF,CAAA,IAAMuB,EAAoBD,CAAkB/W,GAAAA,CAAI,CAAKA,EAAAA,CAAAA,CACjDiX,EAAiBpF,CAAW,CAAA,CAC9B,IAAM0D,CAAAA,CAAAA,CACN,MAAOyB,CACT,CAAC,CAEGH,CAAAA,CAAAA,CAAQ,IACVI,CAAiB,CAAA,CAAA,EAAGA,CAAc,CAAA,EAAGJ,CAAK,CAG5C,CAAA,CAAA,CAAA,IAAIK,CAAY1B,CAAAA,CAAAA,CAAUyB,CAAc,CACxC,CAAA,OAAIC,CACEA,CAAAA,CAAAA,CAAU,OAASlH,CACd,CAAA,CACL,OAAS,CAAA,KAAA,CACT,KAAMkH,CAAU,CAAA,IAClB,EAGKxB,EAAuB,CAAA,CAC5B,KAAA1F,CACA,CAAA,IAAA,CAAMuF,CACN,CAAA,KAAA,CAAOsB,EAAQ,CACf,CAAA,MAAA,CAAAC,CACA,CAAA,eAAA,CAAAC,EACA,SAAAvB,CAAAA,CACF,CAAC,CAAA,CAGEsB,GAOLI,CAAY,CAAA,CACV,IAAAlH,CAAAA,CAAAA,CACA,KAAMqE,EAAsB4C,CAAAA,CAAc,CAC5C,CAAA,CACAzB,EAAUyB,CAAc,CAAA,CAAIC,CAC5B1B,CAAAA,CAAAA,CAAU0B,EAAU,IAAI,CAAA,CAAIA,CAErB,CAAA,CACL,QAAS,IACT,CAAA,IAAA,CAAMA,EAAU,IAClB,CAAA,EAhBS,CACL,OAAS,CAAA,KAAA,CACT,IAAM,CAAA,EACR,CAcJ,CAEMrB,CAAAA,EAAAA,CAAyBU,CAAqB,EAAA,CAClD,IAAM5G,CAAQ4G,CAAAA,CAAAA,CAAS,KAAM,CAAA,eAAe,EACtCE,CAAY9G,CAAAA,CAAAA,CAAQA,CAAM,CAAA,CAAC,EAAE,KAAM,CAAA,CAAC,CAAI,CAAA,EAAA,CACxC3P,EAAOuW,CAAS,CAAA,KAAA,CACpB,CACAA,CAAAA,CAAAA,CAAS,QAAUE,CAAYA,CAAAA,CAAAA,CAAU,MAAS,CAAA,CAAA,CAAI,EACxD,CACA,CAAA,OAAO,CAAE,SAAAA,CAAAA,CAAAA,CAAW,KAAAzW,CAAK,CAC3B,CC1ZA,CAiEO,IAAMmX,EAAN,CAAA,KAAwD,CAKtD,MAIA,CAAA,KAAA,CAIA,EAIA,CAAA,IAAA,CAKC,UAER,WAAY,CAAA,CAAE,MAAAtX,CAAAA,CAAAA,CAAQ,KAAAuQ,CAAK,CAAA,CAAmC,CAC5D,IAAA,CAAK,OAASvQ,CACd,CAAA,IAAA,CAAK,KAAQ,CAAA,GACb,IAAK,CAAA,EAAA,CAAK,EAAC,CACX,KAAK,SAAY,CAAA,GACjB,IAAK,CAAA,IAAA,CAAOuQ,EACd,CAKA,MAAa,SACXgH,CAAAA,CAAAA,CAAAA,GACGrT,EACY,CACV,IAAA,CAAK,SAAUqT,CAAAA,CAAK,GAIzB,MAAM,OAAA,CAAQ,GACZ,CAAA,IAAA,CAAK,UAAUA,CAAK,CAAA,CAAE,GAAI,CAAA,CAACC,EAAYhU,CAAU,GAAA,CAC/C,GAAI,CAEF,IAAMrE,CAAWqY,CAAAA,CAAAA,CAAW,GAAGtT,CAAI,EACnC,OAAO,OAAA,CAAQ,OAAQ/E,CAAAA,CAAQ,CACjC,CAASG,MAAAA,CAAAA,CAAO,CACd,MAAQ,OAAA,CAAA,KAAA,CACN,+BAAwBiY,CAAK,CAAA;AAAA,OAAA,EAAa/T,CAAK;AAAA,WAAA,EAAgB,IAAK,CAAA,SAAA,CAAUU,CAAM,CAAA,IAAA,CAAM,CAAC,CAAC,CAAA,CAC9F,CACM5E,CAAAA,CACR,CACF,CAAC,CACH,EACF,CAMO,WAAWsT,CAAmC,CAAA,CAEnD,IAAMxD,CAAAA,CAAcwD,CAAK,CAAA,IAAA,CAAK,KAAM,CAAA,GAAG,EACjC6E,CAAYlL,CAAAA,mBAAAA,CAAK,OACrB,CAAA,IAAA,CAAK,OAAO,MAAO,CAAA,IAAA,CACnB,GAAG6C,CAAAA,CAAY,MAAM,CAAGA,CAAAA,CAAAA,CAAY,MAAS,CAAA,CAAC,CAChD,CAAA,CACMsI,CAAc,CAAA,IAAInC,GAAe,CACrC,GAAA,CAAKkC,CACL,CAAA,eAAA,CAAiB7E,EAAK,eACtB,CAAA,cAAA,CAAgBA,CAAK,CAAA,cAAA,CACrB,KAAM,CAAGxD,EAAAA,CAAAA,CAAYA,CAAY,CAAA,MAAA,CAAS,CAAC,CAAC,CAC9C,GAAA,CAAA,CAAC,EACD,OAAK,IAAA,CAAA,KAAA,CAAMwD,CAAK,CAAA,EAAE,EAAI8E,CACfA,CAAAA,CACT,CAKO,IAAA,CAAK,CAAE,EAAArF,CAAAA,CAAG,CAAwD,CAAA,CACvE,OAAO,IAAA,CAAK,KAAMA,CAAAA,CAAE,CACtB,CAMO,YAAA,CAAgBlC,CAAc,CAAA,CACnC,OAAOG,EAAc,CAAA,CACnB,IAAAH,CAAAA,CAAAA,CACA,KAAM,IAAK,CAAA,EACb,CAAC,CACH,CAKO,UAAA,CAAcA,CAAc,CAAA,CACjC,OAAOG,EAAc,CAAA,CACnB,IAAAH,CAAAA,CAAAA,CACA,KAAM,IAAK,CAAA,IACb,CAAC,CACH,CAKO,SACLoH,CAAAA,CAAAA,CACAC,CACM,CAAA,CACD,IAAK,CAAA,SAAA,CAAUD,CAAK,CAAA,GACvB,KAAK,SAAUA,CAAAA,CAAK,CAAI,CAAA,IAE1B,IAAK,CAAA,SAAA,CAAUA,CAAK,CAAA,CAAE,KAAKC,CAAU,EACvC,CACF,CAAA,CCtLA,IAAMG,EAAiB,CAAA,CAAC,CACtB,IAAA,CAAAxH,EACA,OAAAyH,CAAAA,CAAAA,CACA,MAAAhD,CAAAA,CACF,IAIe,CACb,IAAA,IAAWiD,CAAUD,IAAAA,CAAAA,CACnB,GAAIC,CAAkB,YAAA,MAAA,CAAA,CAEpB,GADAA,CAAAA,CAAO,SAAY,CAAA,CAAA,CACfA,CAAO,CAAA,IAAA,CAAK1H,CAAI,CAClB,CAAA,OAAO,KAEJ,CAAA,KAAA,CACL,IAAM2H,CAAQD,CAAAA,CAAAA,CAAO,CAAC,CAAA,EAAK,GACrBvZ,CAAQuZ,CAAAA,CAAAA,CAAO,CAAC,CAAA,CACtB,GAAIvZ,CAAAA,GAAU,MACZ,CAAA,CAAA,GAAIsW,EAAOkD,CAAK,CAAA,CACd,OAAO,KAAA,CAAA,KAAA,GAEAlD,EAAOkD,CAAK,CAAA,GAAMxZ,CAC3B,CAAA,OAAO,KAEX,CAGF,OAAO,MACT,CAAA,CAKayZ,EAAgB,CAAA,CAAC,CAC5B,cAAA,CAAAC,EACA,cAAAC,CAAAA,CAAAA,CACA,GAAGC,CACL,IAMM,CAACF,CAAAA,EAAkB,CAACC,CAAAA,CACf,KAGLD,CACEL,EAAAA,EAAAA,CAAe,CAAE,GAAGO,CAAO,CAAA,OAAA,CAASF,CAAe,CAAC,EAC/C,KAIPC,CAAAA,CAAAA,CACKN,EAAe,CAAA,CAAE,GAAGO,CAAO,CAAA,OAAA,CAASD,CAAe,CAAC,EAGtD,IAGHE,CAAAA,EAAAA,CAAgBC,CAChBA,EAAAA,CAAAA,CAAQ,UAAW,CAAA,GAAG,CACjBA,CAAAA,CAAAA,CAAQ,MAAM,CAAC,CAAA,CAAE,KAAM,CAAA,GAAG,EAG5B,IAAI,MAAA,CAAOA,CAAO,CAAA,CAGdC,GACXC,CACY,EAAA,CACZ,GAAKA,CAAAA,CAIL,OAAI,OAAOA,CAAa,EAAA,QAAA,CACf,CAACH,EAAaG,CAAAA,CAAQ,CAAC,CAAA,CAGzBA,EAAS,GAAKF,CAAAA,CAAAA,EAAYD,EAAaC,CAAAA,CAAO,CAAC,CACxD,CAAA,CClFO,IAAMG,CAAAA,CAAyB,CAAC,CACrC,MAAAC,CAAAA,CAAAA,CACA,OAAAC,CACF,CAAA,GAGuC,CACrC,IAAMtW,EAAS,CAAE,GAAGsW,CAAO,CAAA,CAgD3B,GA9CID,CACEA,GAAAA,CAAAA,CAAO,MACLrW,GAAAA,CAAAA,CAAO,OACTA,CAAO,CAAA,MAAA,CAAS,CACd,GAAGA,EAAO,MACV,CAAA,GAAGqW,CAAO,CAAA,MACZ,EAEArW,CAAO,CAAA,MAAA,CAASqW,CAAO,CAAA,MAAA,CAAA,CAIvBA,EAAO,MACLrW,GAAAA,CAAAA,CAAO,MACTA,CAAAA,CAAAA,CAAO,MAAS,CAAA,CACd,GAAGA,CAAAA,CAAO,OACV,GAAGqW,CAAAA,CAAO,MACZ,CAAA,CAEArW,EAAO,MAASqW,CAAAA,CAAAA,CAAO,MAIvBA,CAAAA,CAAAA,CAAAA,CAAO,OACLrW,CAAO,CAAA,IAAA,CACTA,CAAO,CAAA,IAAA,CAAO,CACZ,GAAGA,CAAO,CAAA,IAAA,CACV,GAAGqW,CAAO,CAAA,IACZ,CAEArW,CAAAA,CAAAA,CAAO,KAAOqW,CAAO,CAAA,IAAA,CAAA,CAIrBA,CAAO,CAAA,KAAA,GACLrW,EAAO,KACTA,CAAAA,CAAAA,CAAO,KAAQ,CAAA,CACb,GAAGA,CAAAA,CAAO,KACV,CAAA,GAAGqW,EAAO,KACZ,CAAA,CAEArW,CAAO,CAAA,KAAA,CAAQqW,EAAO,KAKxB,CAAA,CAAA,CAAA,CAAA,CAAC,MAAO,CAAA,IAAA,CAAKrW,CAAM,CAAE,CAAA,MAAA,CAIzB,OAAOA,CACT,CC5DO,CAAA,IAAMuW,EAA6CvY,CAAAA,CAAAA,EAAiB,CACzE,IAAMwY,CAAAA,CAAWxY,CAAK,CAAA,OAAA,CAAQ,oCAAqC,GAAG,CAAA,CACtE,OAAAE,EAAAA,CAA6B,UAAY,CAEvCA,CAAAA,EAAAA,CAA6B,IAAKsY,CAAAA,CAAQ,CACD,CAAA,CAAA,CAAA,EAAIA,CAAQ,CAAA,CAAA,CAAKA,CAE9D,CAgBaC,CAAAA,EAAAA,CAA+BzY,CAC1CA,EAAAA,CAAAA,CACG,QAAQ,oBAAsB,CAAA,EAAE,CAChC,CAAA,OAAA,CAAQ,oCAAqC,GAAG,CAAA,CAChD,OAAQ,CAAA,OAAA,CAAS,GAAG,CAAA,CAEZ0Y,EAAkC1Y,CAAAA,CAAAA,EAAiB,CAC9D,IAAM2Y,CAAAA,CAAkB3Y,CAAK,CAAA,OAAA,CAAQ,KAAM,OAAO,CAAA,CAClD,OAAOyY,EAAAA,CAA4BE,CAAe,CACpD,CAAA,CCzBO,IAAMC,EAAAA,CAA0B,CAAC,CACtC,OAAApG,CAAAA,CAAAA,CACA,GAAAN,CACA,CAAA,MAAA,CAAA2G,CACA,CAAA,YAAA,CAAAC,EACA,IAAA1M,CAAAA,CACF,CAMM,GAAA,CACJ,GAAI,CAAC8F,CAAAA,CACH,OAGF,IAAM6G,EAAe,CAAGF,EAAAA,CAAAA,CAAO,WAAY,EAAC,IAAIzM,CAAI,CAAA,CAAA,CAEhD0M,CAAa,CAAA,GAAA,CAAI5G,CAAE,CACjBM,CAAAA,CAAAA,CAAQ,MAAO,CAAA,IAAA,CAAK,QAAU,QAEhC,EAAA,OAAA,CAAQ,IACN,CAAA,CAAA,oCAAA,EAA6BN,CAAE,CAAA,IAAA,EAAO6G,CAAY,CAAA,yHAAA,CACpD,EAGFD,CAAa,CAAA,GAAA,CAAI5G,CAAI6G,CAAAA,CAAY,EAErC,CAOaC,CAAAA,EAAAA,CAAgB,CAAC,CAC5B,QAAAxG,CACA,CAAA,EAAA,CAAAN,CACA,CAAA,MAAA,CAAA2G,CACA,CAAA,IAAA,CAAAzM,CACF,CAAA,GAKc,CACZ,GACE8F,CAAAA,GACC,CAACM,CAAAA,CAAQ,OAAO,OAAQ,CAAA,cAAc,CACrCA,EAAAA,CAAAA,CAAQ,OAAO,OAAQ,CAAA,cAAc,CAAE,CAAA,WAAA,CAAA,CAEzC,OAAOX,CAAAA,CAAW,CAChB,IAAA,CAAM,YACN,KAAO4G,CAAAA,EAAAA,CAA4BvG,CAAE,CACvC,CAAC,CAGH,CAAA,IAAM+G,CAAyB7M,CAAAA,CAAAA,CAC5B,QAAQ,UAAY,CAAA,OAAO,CAE3B,CAAA,OAAA,CAAQ,QAAU,CAAA,GAAG,CAExB,CAAA,OAAOyF,EAAW,CAChB,IAAA,CAAM,WACN,CAAA,KAAA,CAAO,GAAGgH,CAAM,CAAA,CAAA,EAAII,CAAsB,CAAA,CAC5C,CAAC,CACH,CAAA,CC5EA,IAAMC,EAAAA,CACJ,0TACIC,CAAAA,EAAAA,CAAiB,mCACjBC,CAAAA,EAAAA,CAA8B,gCAC9BC,EAAiB,CAAA,6BAAA,CACjBC,EACJ,CAAA,6CAAA,CAIWC,GAAsB,CAAC,CAClC,SAAAC,CAAAA,CACF,KAGEN,EAAe,CAAA,SAAA,CAAY,CACpBA,CAAAA,EAAAA,CAAe,IAAKM,CAAAA,CAAS,CAGzBC,CAAAA,CAAAA,EAAAA,CAAyB,CAAC,CACrC,SAAA,CAAAD,CACF,CAAA,GAE+B,CAE7B,GADAL,EAAAA,CAAe,SAAY,CAAA,CAAA,CACvBA,GAAe,IAAKK,CAAAA,CAAS,CAC/B,CAAA,OAAO,MAIT,CAAA,GADAJ,EAA4B,CAAA,SAAA,CAAY,EACpCA,EAA4B,CAAA,IAAA,CAAKI,CAAS,CAAA,CAC5C,OAAO,WAIT,CAAA,GADAH,EAAe,CAAA,SAAA,CAAY,EACvBA,EAAe,CAAA,IAAA,CAAKG,CAAS,CAAA,CAC/B,OAAO,MAIT,CAAA,GADAF,EAA6B,CAAA,SAAA,CAAY,EACrCA,EAA6B,CAAA,IAAA,CAAKE,CAAS,CAAA,CAC7C,OAAO,mBAEX,CAAA,CC1BO,IAAME,EAAAA,CAAkB,CAAC,CAC9B,OAAA,CAAApa,CACF,CAAA,GAEgC,CAC9B,GAAM,CAAE,SAAA,CAAAka,EAAW,MAAA/E,CAAAA,CAAO,CAAInV,CAAAA,CAAAA,CAE9B,OAAImV,CAAU,EAAA,MAAA,GAAUA,CACf,CAAA,CACL,MAAO,CAAC,CAAE,GAAGA,CAAO,CAAC,CACvB,CAGGA,CAAAA,CAAAA,CAWHA,EAAO,IAAS,GAAA,QAAA,EAChB,CAACA,CAAAA,CAAO,QACR8E,EAAoB,CAAA,CAAE,SAAAC,CAAAA,CAAU,CAAC,CAE1B,CAAA,CACL,GAAG/E,CAAAA,CACH,MAAQ,CAAA,QACV,CAGKA,CAAAA,CAAAA,CApBD8E,GAAoB,CAAE,SAAA,CAAAC,CAAU,CAAC,EAC5B,CACL,MAAA,CAAQ,QACR,CAAA,IAAA,CAAM,QACR,CAEF,CAAA,MAeJ,CAEaG,CAAAA,EAAAA,CAAkB,CAAC,CAC9B,SAAAC,CAAAA,CAAAA,CACA,SAAA5a,CACF,CAAA,GAG2B,CAEzB,IAAA,IAAWwa,KAAaI,CAAa,EAAA,EACnC,CAAA,OAAO,CACL,SAAAJ,CAAAA,CAAAA,CACA,MAAQxa,CAAAA,CAAAA,CAAS,MACjB,CAAA,IAAA,CAAMya,EAAuB,CAAA,CAAE,UAAAD,CAAU,CAAC,CAC5C,CAEJ,EClEO,IAAMK,EAAAA,CAA8B,CACzC,OAAA,CACA,SACA,QACA,CAAA,QAAA,CACA,MACA,CAAA,OACF,CAEO,CAAA,SAASC,CAA4B,CAAA,CAC1C,SAAAC,CAAWF,CAAAA,EACb,CAAmC,CAAA,GAAY,CACzCE,CAAAA,CAAS,MAAW,GAAA,CAAA,GACtBA,EAAWF,EAEb,CAAA,CAAA,IAAMG,CAAU,CAAA,CAAA,EAAA,EAAKD,CAAS,CAAA,IAAA,CAAK,GAAG,CAAC,KACvC,OAAO,IAAI,MAAOC,CAAAA,CAAO,CAC3B,CCdO,IAAMC,CAAmB,CAAA,CAAC,CAC/B,KAAAC,CAAAA,CAAAA,CACA,eAAAC,CAAAA,CAAAA,CAAkB,KAClB,mBAAAC,CAAAA,CAAAA,CAAsB,KACtB,CAAA,MAAA,CAAA3F,CACF,CAMOyF,GAAAA,CAAAA,CAAM,MAIPzF,CAAAA,CAAAA,CAAO,OAAS,OAClBA,EAAAA,CAAAA,CAAO,KAAQyF,CAAAA,CAAAA,CACRzF,GAGLyF,CAAM,CAAA,MAAA,GAAW,CACnBzF,EAAAA,CAAAA,CAAO,KAAQyF,CAAAA,CAAAA,CACfzF,CAAO,CAAA,eAAA,CAAkB0F,EAClB1F,CAGL2F,EAAAA,CAAAA,EAEF3F,CAAS,CAAA,CACP,GAAGA,CACH,CAAA,GAAGyF,CAAM,CAAA,CAAC,CACZ,CACOzF,CAAAA,CAAAA,GAGTA,CAAO,CAAA,KAAA,CAAQyF,CACRzF,CAAAA,CAAAA,CAAAA,CAxBEA,CChBJ,CAAA,IAAM4F,GAAqB,CAChCrK,CAAAA,CACAsK,CACG,GAAA,CACH,QAAWta,CAAQsa,IAAAA,CAAAA,CAEjB,GADkBA,CAAAA,CAAQta,CAAI,CACZgQ,GAAAA,CAAAA,CAChB,OAAOhQ,CAAAA,CAGX,OAAOkQ,CAAAA,CAAUF,CAAI,CACvB,ECTO,IAAMuK,CAAAA,CAA0B,CACrCC,CAAAA,CACAC,IACgD,CAChD,GAAI,CAACD,CAAAA,EAAG,OACN,OAAOC,CAAAA,EAAG,MAASA,CAAAA,CAAAA,CAAI,MAGzB,CAAA,GAAI,CAACA,CAAAA,EAAG,OACN,OAAOD,CAAAA,CAGT,IAAME,CAAAA,CAAe,IAAI,GAAIF,CAAAA,CAAC,CAE9B,CAAA,IAAA,IAAWG,KAASF,CAClBC,CAAAA,CAAAA,CAAa,GAAIC,CAAAA,CAAK,CAGxB,CAAA,OAAOD,CAAa,CAAA,IAAA,CAAOF,EAAE,MAAS,CAAA,KAAA,CAAM,IAAKE,CAAAA,CAAY,EAAIF,CACnE,CAAA,CCXO,IAAMI,EAAAA,CAAgB,CAAC,CAC5B,MAAA,CAAAnG,CACF,CAAA,GAE4C,CAC1C,GAAIA,CAAO,CAAA,IAAA,CACT,OAAOA,CAAO,CAAA,IAAA,CAIhB,GAAIA,CAAAA,CAAO,WACT,OAAO,QAEX,CAEMoG,CAAAA,EAAAA,CAAmB,CAAC,CACxB,QAAA,CAAAC,CACA,CAAA,MAAA,CAAArG,CACF,CAAA,GAGM,CACAA,CAAAA,CAAO,cACTqG,CAAS,CAAA,WAAA,CAAcrG,CAAO,CAAA,WAAA,CAAA,CAG5BA,EAAO,KACTqG,GAAAA,CAAAA,CAAS,KAAQrG,CAAAA,CAAAA,CAAO,OAE5B,CAEMsG,CAAAA,EAAAA,CAAkB,CAAC,CACvB,SAAAD,CACA,CAAA,MAAA,CAAArG,CACF,CAAA,GAGM,CACAA,CAAO,CAAA,OAAA,GAAY,MACrBqG,GAAAA,CAAAA,CAAS,QAAUrG,CAAO,CAAA,OAAA,CAAA,CAGxBA,CAAO,CAAA,gBAAA,CACLA,EAAO,OAAY,GAAA,MAAA,GACrBqG,CAAS,CAAA,gBAAA,CAAmBrG,CAAO,CAAA,OAAA,CAAA,CAE5BA,CAAO,CAAA,OAAA,GAAY,SAC5BqG,CAAS,CAAA,OAAA,CAAUrG,CAAO,CAAA,OAAA,CAAA,CAGxBA,EAAO,gBACLA,CAAAA,CAAAA,CAAO,OAAY,GAAA,MAAA,GACrBqG,EAAS,gBAAmBrG,CAAAA,CAAAA,CAAO,OAE5BA,CAAAA,CAAAA,CAAAA,CAAO,OAAY,GAAA,MAAA,GAC5BqG,CAAS,CAAA,OAAA,CAAUrG,EAAO,OAGxBA,CAAAA,CAAAA,CAAAA,CAAO,MACTqG,GAAAA,CAAAA,CAAS,OAASrG,CAAO,CAAA,MAAA,CAAA,CAGvBA,CAAO,CAAA,QAAA,GAAa,SACtBqG,CAAS,CAAA,QAAA,CAAWrG,CAAO,CAAA,QAAA,CAAA,CAGzBA,CAAO,CAAA,SAAA,GAAc,MACvBqG,GAAAA,CAAAA,CAAS,UAAYrG,CAAO,CAAA,SAAA,CAAA,CAG1BA,CAAO,CAAA,QAAA,GAAa,SACtBqG,CAAS,CAAA,QAAA,CAAWrG,CAAO,CAAA,QAAA,CAAA,CAGzBA,EAAO,SAAc,GAAA,MAAA,GACvBqG,CAAS,CAAA,SAAA,CAAYrG,CAAO,CAAA,SAAA,CAAA,CAG1BA,CAAO,CAAA,OAAA,GACTqG,EAAS,OAAUrG,CAAAA,CAAAA,CAAO,OAGxBA,CAAAA,CAAAA,CAAAA,CAAO,WACTqG,CAAS,CAAA,WAAA,CAAc,MACvBA,CAAAA,CAAAA,CAAS,aAAeP,CAAwBO,CAAAA,CAAAA,CAAS,YAAc,CAAA,CACrE,MACF,CAAC,CAEL,EAAA,CAAA,CAEME,GAAa,CAAC,CAClB,OAAAxI,CAAAA,CAAAA,CACA,SAAAsI,CAAW,CAAA,EACX,CAAA,MAAA,CAAArG,EACA,KAAAsD,CAAAA,CACF,CAKuB,GAAA,CACjBtD,CAAO,CAAA,QAAA,EAAYA,CAAO,CAAA,QAAA,GAAaA,EAAO,QAChDqG,CAAAA,CAAAA,CAAS,IAAO,CAAA,OAAA,CAEhBA,EAAS,IAAO,CAAA,OAAA,CAGlB,IAAIG,CAAAA,CAAsC,EAE1C,CAAA,GAAIxG,CAAO,CAAA,KAAA,CAAO,CAChB,IAAMyG,CAAgBC,CAAAA,CAAAA,CAAiB,CACrC,OAAA3I,CAAAA,CAAAA,CACA,MAAQiC,CAAAA,CAAAA,CAAO,MACf,KAAAsD,CAAAA,CACF,CAAC,CAAA,CAOD,GALA+C,CAAS,CAAA,YAAA,CAAeP,CACtBO,CAAAA,CAAAA,CAAS,aACTI,CAAc,CAAA,YAChB,CAGE,CAAA,CAACD,EAAY,MACbxG,EAAAA,CAAAA,CAAO,QACPA,EAAAA,CAAAA,CAAO,WAAaA,CAAO,CAAA,QAAA,CAE3BwG,CAAc,CAAA,KAAA,CAAMxG,EAAO,QAAQ,CAAA,CAAE,IAAKyG,CAAAA,CAAa,CAEnD,CAAA,KAAA,GAAA,MAAA,GAAUzG,CAAO,CAAA,KAAA,CACnBwG,EAAY,IAAKC,CAAAA,CAAa,CACzB,CAAA,KAAA,CACL,IAAME,CAAU3G,CAAAA,CAAAA,CAAO,KAAM,CAAA,KAAA,CACzB2G,GAAWA,CAAQ,CAAA,MAAA,CAAS,CAAK,EAAA,CAAC3G,CAAO,CAAA,KAAA,CAAM,YAAY,CAAA,CAE7DqG,EAAW,CACT,GAAGA,CACH,CAAA,GAAGI,CACL,CAEAD,CAAAA,CAAAA,CAAY,IAAKC,CAAAA,CAAa,EAElC,CAEJ,CAEA,OAAAJ,CAAAA,CAAWb,CAAiB,CAAA,CAC1B,KAAOgB,CAAAA,CAAAA,CACP,OAAQH,CACV,CAAC,CAEMA,CAAAA,CACT,EAEMO,EAAe,CAAA,CAAC,CACpB,QAAA,CAAAP,EAAW,EACb,CAMEA,IAAAA,CAAAA,CAAS,KAAO,SAETA,CAAAA,CAAAA,CAAAA,CAGHQ,EAAc,CAAA,CAAC,CACnB,QAAAR,CAAAA,CAAAA,CAAW,EAAC,CACZ,OAAArG,CACF,CAAA,IAMEqG,CAAS,CAAA,IAAA,CAAOrG,EAAO,IAEhBqG,CAAAA,CAAAA,CAAAA,CAGHS,EAAc,CAAA,CAAC,CACnB,OAAA,CAAA/I,CACA,CAAA,QAAA,CAAAsI,EAAW,EAAC,CACZ,MAAArG,CAAAA,CAAAA,CACA,MAAAsD,CACF,CAAA,GAKuB,CACrB+C,CAAAA,CAAS,KAAO,QAEhB,CAAA,IAAMU,CAAoD,CAAA,EAE1D,CAAA,IAAA,IAAWxb,CAAQyU,IAAAA,CAAAA,CAAO,WAAY,CACpC,IAAM3G,CAAW2G,CAAAA,CAAAA,CAAO,WAAWzU,CAAI,CAAA,CACvC,GAAI,OAAO8N,GAAa,SAEjB,CAAA,CACL,IAAM2N,CAAAA,CAAmBN,CAAiB,CAAA,CACxC,OAAA3I,CAAAA,CAAAA,CACA,OAAQ1E,CACR,CAAA,KAAA,CAAAiK,CACF,CAAC,EACD+C,CAAS,CAAA,YAAA,CAAeP,CACtBO,CAAAA,CAAAA,CAAS,aACTW,CAAiB,CAAA,YACnB,CACAD,CAAAA,CAAAA,CAAiBxb,CAAI,CAAIyb,CAAAA,EAC3B,CACF,CAMA,GAJI,MAAO,CAAA,IAAA,CAAKD,CAAgB,CAAA,CAAE,SAChCV,CAAS,CAAA,UAAA,CAAaU,CAGpB/G,CAAAA,CAAAA,CAAAA,CAAO,uBAAyB,MAC7BqG,CAAAA,CAAAA,CAAS,UACZA,GAAAA,CAAAA,CAAS,oBAAuB,CAAA,CAC9B,IAAM,CAAA,SACR,WAEO,OAAOrG,CAAAA,CAAO,oBAAyB,EAAA,SAAA,CAChDqG,EAAS,oBAAuB,CAAA,CAC9B,IAAMrG,CAAAA,CAAAA,CAAO,qBAAuB,SAAY,CAAA,OAClD,CACK,CAAA,KAAA,CACL,IAAMiH,CAAAA,CAA+BP,CAAiB,CAAA,CACpD,QAAA3I,CACA,CAAA,MAAA,CAAQiC,CAAO,CAAA,oBAAA,CACf,MAAAsD,CACF,CAAC,CAGC+C,CAAAA,CAAAA,CAAAA,CAAS,YACTY,CAA6B,CAAA,IAAA,GAAS,SAEtCZ,IAAAA,CAAAA,CAAS,oBAAuBY,CAAAA,CAAAA,EAEpC,CAEA,OAAIjH,EAAO,QACTqG,GAAAA,CAAAA,CAAS,QAAWrG,CAAAA,CAAAA,CAAO,UAGtBqG,CACT,CAAA,CAEMa,EAAc,CAAA,CAAC,CACnB,QAAAb,CAAAA,CAAAA,CAAW,EACb,CAMEA,IAAAA,CAAAA,CAAS,IAAO,CAAA,QAAA,CAETA,GAGHc,EAAe,CAAA,CAAC,CACpB,MAAA,CAAAnH,CACF,CAEuB,GAAA,CACrB,IAAMqG,CAAAA,CAA4B,EAElC,CAAA,OAAAD,EAAiB,CAAA,CACf,QAAAC,CAAAA,CAAAA,CACA,MAAArG,CAAAA,CACF,CAAC,CAEMqG,CAAAA,CACT,CAEMe,CAAAA,EAAAA,CAAa,CAAC,CAClB,OAAA,CAAArJ,CACA,CAAA,MAAA,CAAAiC,EACA,KAAAsD,CAAAA,CACF,CAIuB,GAAA,CACrB,IAAI+C,CAAAA,CAAWc,EAAa,CAAA,CAAE,OAAAnH,CAAO,CAAC,CAEhCwG,CAAAA,CAAAA,CAAsC,EACtCa,CAAAA,CAAAA,CAAalB,EAAc,CAAA,CAAE,OAAAnG,CAAO,CAAC,CAErCsH,CAAAA,CAAAA,CAAqBtH,CAAO,CAAA,KAAA,CAElC,IAAWuH,IAAAA,CAAAA,IAAqBD,EAAoB,CAClD,IAAME,CAAsBd,CAAAA,CAAAA,CAAiB,CAC3C,OAAA3I,CAAAA,CAAAA,CACA,MAAQwJ,CAAAA,CAAAA,CACR,MAAAjE,CACF,CAAC,CAoBD,CAAA,GAlBA+C,EAAS,YAAeP,CAAAA,CAAAA,CACtBO,CAAS,CAAA,YAAA,CACTmB,EAAoB,YACtB,CAAA,CAEIxH,CAAO,CAAA,QAAA,GACLwH,EAAoB,QACtBA,CAAAA,CAAAA,CAAoB,QAAW,CAAA,CAC7B,GAAGA,CAAoB,CAAA,QAAA,CACvB,GAAGxH,CAAAA,CAAO,QACZ,CAAA,CAEAwH,CAAoB,CAAA,QAAA,CAAWxH,EAAO,QAI1CwG,CAAAA,CAAAA,CAAAA,CAAY,IAAKgB,CAAAA,CAAmB,EAEhCD,CAAkB,CAAA,IAAA,CAAM,CAC1B,IAAME,EAAM1J,CAAQ,CAAA,UAAA,CAAyBwJ,CAAkB,CAAA,IAAI,CAEnE,CAAA,GAAIE,CAAI,CAAA,aAAA,EAAiBnE,EAAM,IAAM,CAAA,CACnC,IAAMoE,CAAAA,CAAyC,CAC7C,UAAY,CAAA,CACV,CAACD,CAAAA,CAAI,aAAa,EAAG,CACnB,KAAO7B,CAAAA,EAAAA,CAAmBtC,CAAM,CAAA,IAAI,CACpC,CAAA,IAAA,CAAM,QACR,CACF,CAAA,CACA,IAAM,CAAA,QACR,EACImE,CAAI,CAAA,QAAA,EAAU,QAASA,CAAAA,CAAAA,CAAI,aAAa,CAC1CC,GAAAA,CAAAA,CAAsB,QAAW,CAAA,CAACD,CAAI,CAAA,aAAa,CAErDjB,CAAAA,CAAAA,CAAAA,CAAY,KAAKkB,CAAqB,EACxC,CAEA,GAAI,CAACpE,CAAM,CAAA,wBAAA,CAAyB,GAAIiE,CAAAA,CAAAA,CAAkB,IAAI,CAAG,CAAA,CAC/D,IAAMI,CAAAA,CAAcjB,CAAiB,CAAA,CACnC,OAAA3I,CAAAA,CAAAA,CACA,OAAQ0J,CACR,CAAA,KAAA,CAAO,CACL,GAAGnE,EACH,IAAMiE,CAAAA,CAAAA,CAAkB,IAC1B,CACF,CAAC,CACDlB,CAAAA,CAAAA,CAAS,YAAeP,CAAAA,CAAAA,CACtBO,CAAS,CAAA,YAAA,CACTsB,CAAY,CAAA,YACd,EACF,CACF,CACF,CAEA,GAAIN,IAAe,QAAU,CAAA,CAC3B,IAAMO,CAAAA,CAAiBC,GAAa,CAClC,OAAA,CAAA9J,CACA,CAAA,MAAA,CAAQ,CACN,GAAGiC,CACH,CAAA,IAAA,CAAM,QACR,CACA,CAAA,KAAA,CAAAsD,CACF,CAAC,EAOD,GALA+C,CAAAA,CAAS,YAAeP,CAAAA,CAAAA,CACtBO,EAAS,YACTuB,CAAAA,CAAAA,CAAe,YACjB,CAAA,CAEIA,EAAe,UAAY,CAAA,CAC7B,IAAWE,IAAAA,CAAAA,IAAoBF,EAAe,QAAY,EAAA,EACxD,CAAA,GAAI,CAACA,CAAe,CAAA,UAAA,CAAWE,CAAgB,CAAA,CAC7C,QAAWP,CAAqBD,IAAAA,CAAAA,CAAoB,CAElD,IAAMS,CAAyBR,CAAAA,CAAAA,CAAkB,IAC7CxJ,CAAAA,CAAAA,CAAQ,WAAyBwJ,CAAkB,CAAA,IAAI,CACvDA,CAAAA,CAAAA,CAEJ,GACEpB,EAAc,CAAA,CAAE,MAAQ4B,CAAAA,CAAuB,CAAC,CAAM,GAAA,QAAA,CACtD,CACA,IAAMP,CAAsBK,CAAAA,EAAAA,CAAa,CACvC,OAAA,CAAA9J,EACA,MAAQ,CAAA,CACN,GAAGgK,CAAAA,CACH,KAAM,QACR,CAAA,CACA,KAAAzE,CAAAA,CACF,CAAC,CAOD,CAAA,GALA+C,CAAS,CAAA,YAAA,CAAeP,CACtBO,CAAAA,CAAAA,CAAS,YACTmB,CAAAA,CAAAA,CAAoB,YACtB,CAEIA,CAAAA,CAAAA,CAAoB,UAAaM,GAAAA,CAAgB,EAAG,CACtDF,CAAAA,CAAe,UAAWE,CAAAA,CAAgB,EACxCN,CAAoB,CAAA,UAAA,CAAWM,CAAgB,CAAA,CACjD,KACF,CACF,CACF,CAGJtB,EAAY,IAAKoB,CAAAA,CAAc,EACjC,CACF,CASA,GAPAvB,CAAAA,CAAWb,CAAiB,CAAA,CAC1B,MAAOgB,CACP,CAAA,eAAA,CAAiB,KACjB,CAAA,mBAAA,CAAqB,IACrB,CAAA,MAAA,CAAQH,CACV,CAAC,EAEGrG,CAAO,CAAA,YAAY,CAAG,CAAA,CAExB,IAAMgI,CAAsC,CAAA,CAC1C,CACE,IAAA,CAAM,MACR,CACF,CAAA,CAEIxB,CAAY,CAAA,MAAA,EACdwB,CAAY,CAAA,OAAA,CAAQ3B,CAAQ,CAAA,CAG9BA,EAAW,CACT,KAAA,CAAO2B,CACP,CAAA,eAAA,CAAiB,IACnB,CAIIA,CAAAA,CAAAA,CAAY,CAAC,CAAA,CAAG,aAClB3B,CAAS,CAAA,UAAA,CAAa2B,CAAY,CAAA,CAAC,CAAG,CAAA,UAAA,CAAA,CAKpCA,CAAY,CAAA,CAAC,EAAG,WAClB3B,GAAAA,CAAAA,CAAS,WAAc2B,CAAAA,CAAAA,CAAY,CAAC,CAAG,CAAA,WAAA,EAE3C,CAEA,OAAO3B,CACT,CAEM4B,CAAAA,EAAAA,CAAY,CAAC,CACjB,QAAAlK,CACA,CAAA,MAAA,CAAAiC,CACA,CAAA,KAAA,CAAAsD,CACF,CAIuB,GAAA,CACrB,IAAI+C,CAAAA,CAAWc,GAAa,CAAE,MAAA,CAAAnH,CAAO,CAAC,EAEtCqG,CAAS,CAAA,IAAA,CAAO,MAEhB,CAAA,IAAMG,CAAsC,CAAA,EAE5C,CAAA,IAAA,GAAW,CAAC5X,CAAOsZ,CAAAA,CAAS,CAAKlI,GAAAA,CAAAA,CAAO,KAAK,OAAQ,EAAA,CAAG,CACtD,IAAMmI,EAAkB,OAAOD,CAAAA,CAC3BE,CAqBJ,CAAA,GAlBED,CAAoB,GAAA,QAAA,EACpBA,CAAoB,GAAA,QAAA,EACpBA,IAAoB,SAEpBC,CAAAA,CAAAA,CAAWD,CACFD,CAAAA,CAAAA,GAAc,KAEnBlI,CAAO,CAAA,YAAY,CACrBoI,GAAAA,CAAAA,CAAW,QAGb,OAAQ,CAAA,IAAA,CACN,WACA,CAAA,CAAA,WAAA,EAAcD,CAAe,CAAA,gBAAA,EAAmBD,CAAS,CAAA,UAAA,CAAA,CACzDlI,EAAO,IACT,CAAA,CAGE,CAACoI,CAAAA,CACH,SAGF,IAAMC,CAAAA,CAAeR,EAAa,CAAA,CAChC,QAAA9J,CACA,CAAA,MAAA,CAAQ,CACN,WAAA,CAAaiC,EAAO,qBAAqB,CAAA,GAAIpR,CAAK,CAAA,CAClD,MACEoR,CAAO,CAAA,iBAAiB,CAAIpR,GAAAA,CAAK,GAAKoR,CAAO,CAAA,aAAa,CAAIpR,GAAAA,CAAK,EAErE,IAAMwZ,CAAAA,CAAAA,GAAa,MAAS,CAAA,QAAA,CAAWA,CACzC,CAAA,CACA,KAAA9E,CAAAA,CACF,CAAC,CAED+E,CAAAA,CAAAA,CAAa,KAAQH,CAAAA,CAAAA,CAGjBE,IAAa,MACfC,GAAAA,CAAAA,CAAa,IAAOD,CAAAA,CAAAA,CAAAA,CAGtB/B,EAAS,YAAeP,CAAAA,CAAAA,CACtBO,CAAS,CAAA,YAAA,CACTgC,CAAa,CAAA,YACf,CAEA7B,CAAAA,CAAAA,CAAY,KAAK6B,CAAY,EAC/B,CAEA,OAAAhC,EAAWb,CAAiB,CAAA,CAC1B,KAAOgB,CAAAA,CAAAA,CACP,OAAQH,CACV,CAAC,CAEMA,CAAAA,CACT,CAEMiC,CAAAA,EAAAA,CAAW,CAAC,CAChB,QAAAvK,CACA,CAAA,MAAA,CAAAiC,CACA,CAAA,KAAA,CAAAsD,CACF,CAIuB,GAAA,CACrB,IAAM+C,CAAAA,CAA4B,EAalC,CAAA,GATAA,CAAS,CAAA,IAAA,CAAO,UAAUrG,CAAO,CAAA,IAAI,CAIrCqG,CAAAA,CAAAA,CAAS,KAAOA,CAAS,CAAA,IAAA,CAAK,OAC5B,CAAA,0BAAA,CACA,yBACF,CAEI,CAAA,CAAC/C,CAAM,CAAA,wBAAA,CAAyB,IAAItD,CAAO,CAAA,IAAI,CAAG,CAAA,CACpD,IAAMuI,CAAAA,CAAYxK,CAAQ,CAAA,UAAA,CAAyBiC,EAAO,IAAI,CAAA,CACxD2H,CAAcjB,CAAAA,CAAAA,CAAiB,CACnC,OAAA3I,CAAAA,CAAAA,CACA,MAAQwK,CAAAA,CAAAA,CACR,MAAO,CACL,GAAGjF,CACH,CAAA,IAAA,CAAMtD,CAAO,CAAA,IACf,CACF,CAAC,EACDqG,CAAS,CAAA,YAAA,CAAeP,CACtBO,CAAAA,CAAAA,CAAS,aACTsB,CAAY,CAAA,YACd,EACF,CAEA,OAAOtB,CACT,CAAA,CAEMmC,EAAoB,CAAA,CAAC,CACzB,OAAA,CAAAzK,CACA,CAAA,QAAA,CAAAsI,EACA,MAAArG,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,IAKuB,CAChB+C,CAAAA,GACHA,CAAWc,CAAAA,EAAAA,CAAa,CAAE,MAAAnH,CAAAA,CAAO,CAAC,CAAA,CAAA,CAGpC,IAAMyI,CAAAA,CAAgC,EAAC,CAEvCnC,GAAgB,CACd,QAAA,CAAUmC,CACV,CAAA,MAAA,CAAAzI,CACF,CAAC,CAAA,CAEGyI,CAAa,CAAA,OAAA,GAAY,MAG3B,OAAOA,CAAAA,CAAa,OAGtB,CAAA,IAAMjC,CAAsC,CAAA,CAC1CqB,EAAa,CAAA,CACX,QAAA9J,CACA,CAAA,QAAA,CAAU0K,CACV,CAAA,MAAA,CAAAzI,EACA,KAAAsD,CAAAA,CACF,CAAC,CAAA,CACD,CACE,IAAM,CAAA,MACR,CACF,CAAA,CAEA,OAAA+C,CAAAA,CAAWb,CAAiB,CAAA,CAC1B,MAAOgB,CACP,CAAA,MAAA,CAAQH,CACV,CAAC,EAEMA,CACT,CAAA,CAEMqC,EAAY,CAAA,CAAC,CACjB,OAAA3K,CAAAA,CAAAA,CACA,MAAAiC,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAIuB,GAAA,CACrB,IAAM+C,CAAWc,CAAAA,EAAAA,CAAa,CAAE,MAAA,CAAAnH,CAAO,CAAC,CAAA,CAExCsG,EAAgB,CAAA,CACd,SAAAD,CACA,CAAA,MAAA,CAAArG,CACF,CAAC,EAED,IAAMzO,CAAAA,CAAO4U,EAAc,CAAA,CAAE,OAAAnG,CAAO,CAAC,CAErC,CAAA,OAAKzO,EAIDyO,CAAO,CAAA,YAAY,CACdwI,CAAAA,EAAAA,CAAkB,CACvB,OAAAzK,CAAAA,CAAAA,CACA,QAAAsI,CAAAA,CAAAA,CACA,MAAQ,CAAA,CACN,GAAGrG,CAAAA,CACH,KAAAzO,CACF,CAAA,CACA,KAAA+R,CAAAA,CACF,CAAC,CAGIuE,CAAAA,EAAAA,CAAa,CAClB,OAAA,CAAA9J,EACA,QAAAsI,CAAAA,CAAAA,CACA,MAAQ,CAAA,CACN,GAAGrG,CAAAA,CACH,IAAAzO,CAAAA,CACF,EACA,KAAA+R,CAAAA,CACF,CAAC,CAAA,CAvBQ+C,CAwBX,CAEMwB,CAAAA,EAAAA,CAAe,CAAC,CACpB,QAAA9J,CACA,CAAA,QAAA,CAAAsI,CACA,CAAA,MAAA,CAAArG,CACA,CAAA,KAAA,CAAAsD,CACF,CAAA,GAKuB,CAUrB,OATK+C,CAAAA,GACHA,CAAWc,CAAAA,EAAAA,CAAa,CAAE,MAAAnH,CAAAA,CAAO,CAAC,CAAA,CAElCsG,GAAgB,CACd,QAAA,CAAAD,CACA,CAAA,MAAA,CAAArG,CACF,CAAC,CAGKA,CAAAA,CAAAA,CAAAA,CAAO,MACb,KAAK,OACH,CAAA,OAAOuG,GAAW,CAChB,OAAA,CAAAxI,CACA,CAAA,QAAA,CAAAsI,EACA,MAAArG,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAAC,CAAA,CACH,KAAK,SAAA,CACH,OAAOsD,EAAa,CAAA,CAElB,SAAAP,CAGF,CAAC,CAAA,CACH,KAAK,SAAA,CACL,KAAK,QAAA,CACH,OAAOQ,EAAAA,CAAY,CAEjB,QAAAR,CAAAA,CAAAA,CACA,OAAArG,CAEF,CAAC,EACH,KAAK,QAAA,CACH,OAAO8G,EAAAA,CAAY,CACjB,OAAA,CAAA/I,CACA,CAAA,QAAA,CAAAsI,EACA,MAAArG,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAAC,CACH,CAAA,KAAK,QACH,CAAA,OAAO4D,GAAY,CAEjB,QAAA,CAAAb,CAGF,CAAC,CACH,CAAA,QAEE,OAAOsC,EAAAA,CAAa,CAElB,QAAAtC,CAAAA,CAAAA,CACA,OAAArG,CAEF,CAAC,CACL,CACF,CAEM2I,CAAAA,EAAAA,CAAe,CAAC,CACpB,QAAA,CAAAtC,CACA,CAAA,MAAA,CAAArG,CACF,CAMOqG,IAAAA,CAAAA,GACHA,CAAWc,CAAAA,EAAAA,CAAa,CAAE,MAAAnH,CAAAA,CAAO,CAAC,CAAA,CAAA,CAGpCqG,CAAS,CAAA,IAAA,CAAO,SAEhBC,CAAAA,EAAAA,CAAgB,CACd,QAAAD,CAAAA,CAAAA,CACA,MAAArG,CAAAA,CACF,CAAC,CAEMqG,CAAAA,CAAAA,CAAAA,CAGIK,CAAmB,CAAA,CAAC,CAC/B,OAAA3I,CAAAA,CAAAA,CACA,MAAAiC,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAKOA,IAAAA,CAAAA,GACHA,EAAQ,CACN,wBAAA,CAA0B,IAAI,GAChC,GAGEA,CAAM,CAAA,IAAA,EACRA,CAAM,CAAA,wBAAA,CAAyB,IAAIA,CAAM,CAAA,IAAI,CAG3CtD,CAAAA,CAAAA,CAAO,IACFsI,CAAAA,EAAAA,CAAS,CACd,OAAA,CAAAvK,EACA,MAAQiC,CAAAA,CAAAA,CACR,KAAAsD,CAAAA,CACF,CAAC,CAGCtD,CAAAA,CAAAA,CAAO,IACFiI,CAAAA,EAAAA,CAAU,CACf,OAAAlK,CAAAA,CAAAA,CACA,MAAQiC,CAAAA,CAAAA,CACR,KAAAsD,CAAAA,CACF,CAAC,CAAA,CAGCtD,EAAO,KACFoH,CAAAA,EAAAA,CAAW,CAChB,OAAA,CAAArJ,EACA,MAAQiC,CAAAA,CAAAA,CACR,KAAAsD,CAAAA,CACF,CAAC,CAICtD,CAAAA,CAAAA,CAAO,IAAQA,EAAAA,CAAAA,CAAO,UACjB0I,CAAAA,EAAAA,CAAU,CACf,OAAA,CAAA3K,EACA,MAAQiC,CAAAA,CAAAA,CACR,KAAAsD,CAAAA,CACF,CAAC,CAGIqF,CAAAA,EAAAA,CAAa,CAElB,MAAA3I,CAAAA,CAEF,CAAC,CAAA,CAAA,CAGU4I,EAAc,CAAA,CAAC,CAC1B,IAAArN,CAAAA,CAAAA,CACA,OAAAwC,CAAAA,CAAAA,CACA,OAAAiC,CACF,CAAA,GAIM,CACCjC,CAAAA,CAAQ,GAAG,UACdA,GAAAA,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAa,EAGrBA,CAAAA,CAAAA,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAW,UACzBA,CAAQ,CAAA,EAAA,CAAG,UAAW,CAAA,OAAA,CAAU,EAGlCA,CAAAA,CAAAA,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAW,QAAQtC,CAAUF,CAAAA,CAAI,CAAC,CAAA,CAAImL,CAAiB,CAAA,CAChE,OAAA3I,CAAAA,CAAAA,CACA,OAAAiC,CACA,CAAA,KAAA,CAAO,CACL,IAAA,CAAAzE,EACA,wBAA0B,CAAA,IAAI,GAChC,CACF,CAAC,EACH,CAAA,CCv0BA,IAAMsN,EAAAA,CACJxB,CAEAA,EAAAA,CAAAA,GAAe,SACfA,EAAAA,CAAAA,GAAe,WACfA,CAAe,GAAA,QAAA,EACfA,CAAe,GAAA,QAAA,CAGJyB,GAAkB,CAAC,CAC9B,OAAA/K,CAAAA,CAAAA,CACA,KAAAxS,CACA,CAAA,MAAA,CAAAyU,CACF,CAAA,GAUwB,CAItB,GAHyBqF,CACvBtH,CAAAA,CAAAA,CAAQ,OAAO,KAAM,CAAA,UACvB,CACqB,CAAA,IAAA,CAAKxS,CAAI,CAC5B,CAAA,OAAO,KAGT,CAAA,GAAI,SAAUyU,CAAQ,CAAA,CACpB,IAAMyH,CAAAA,CAAM1J,EAAQ,UAClBiC,CAAAA,CAAAA,CAAO,IAAQ,EAAA,EACjB,EAEA,GAAI,IAAA,GAAQyH,CAAOA,EAAAA,CAAAA,CAAI,GAAI,CACzB,IAAMc,CACJ,CAAA,QAAA,GAAYd,EACRA,CAAI,CAAA,MAAA,CACJ,CACE,GAAGA,CACH,CAAA,EAAA,CAAI,MACN,CAAA,CAEN,OAAOqB,EAAgB,CAAA,CACrB,OAAA/K,CAAAA,CAAAA,CACA,KAAAxS,CACA,CAAA,MAAA,CAAQgd,CACV,CAAC,CACH,CAEA,OAAOO,EAAgB,CAAA,CACrB,OAAA/K,CAAAA,CAAAA,CACA,IAAAxS,CAAAA,CAAAA,CACA,OAAQkc,CACV,CAAC,CACH,CAEA,GAAI,IAAQzH,GAAAA,CAAAA,CAAQ,CAClB,GAAI,CAACA,CAAO,CAAA,EAAA,CACV,OAAO,MAAA,CAGT,IAAM+I,CAAAA,CACJ,QAAY/I,GAAAA,CAAAA,CACRA,EAAO,MACP,CAAA,CACE,GAAGA,CAAAA,CACH,GAAI,MACN,CAAA,CAEN,OAAO8I,EAAAA,CAAgB,CACrB,OAAA/K,CAAAA,CAAAA,CACA,IAAAxS,CAAAA,CAAAA,CACA,OAAQwd,CACV,CAAC,CACH,CAEA,QAAWxd,CAAQyU,IAAAA,CAAAA,CAAO,UAKxB,CAAA,GAJyBqF,EACvBtH,CAAQ,CAAA,MAAA,CAAO,KAAM,CAAA,UACvB,EAEqB,IAAKxS,CAAAA,CAAI,CAAG,CAAA,CAC/B,IAAM8N,CAAAA,CAAW2G,CAAO,CAAA,UAAA,CAAWzU,CAAI,CAEvC,CAAA,GAAI,OAAO8N,CAAAA,EAAa,WAAa,EAAE,MAAA,GAAUA,CAAW,CAAA,CAAA,CAC1D,IAAMgO,CAAalB,CAAAA,EAAAA,CAAc,CAAE,MAAA,CAAQ9M,CAAS,CAAC,CAGrD,CAAA,GAAIwP,GAAiBxB,CAAU,CAAA,CAC7B,OAAO9b,CAEX,CACF,CAGF,IAAA,IAAWyd,CAAShJ,IAAAA,CAAAA,CAAO,OAAS,EAAC,CAAG,CACtC,IAAMiJ,CAAaH,CAAAA,EAAAA,CAAgB,CACjC,OAAA,CAAA/K,EACA,IAAAxS,CAAAA,CAAAA,CACA,MAAQyd,CAAAA,CACV,CAAC,CACD,CAAA,GAAIC,CACF,CAAA,OAAOA,CAEX,CAEA,OAAO,MACT,CAAA,CC9FA,IAAMC,EAAAA,CAAsB,CAAC,CAC3B,YAAAC,CACA,CAAA,SAAA,CAAAlL,CACF,CAAA,GAGM,CACAA,CAAU,CAAA,UAAA,GAAe,MAC3BkL,GAAAA,CAAAA,CAAY,WAAalL,CAAU,CAAA,UAAA,CAAA,CAGjCA,CAAU,CAAA,WAAA,GACZkL,CAAY,CAAA,WAAA,CAAclL,CAAU,CAAA,WAAA,CAAA,CAGlCA,EAAU,OACZkL,GAAAA,CAAAA,CAAY,OAAUlL,CAAAA,CAAAA,CAAU,SAG9BA,CAAU,CAAA,IAAA,EAAM,MAClBkL,GAAAA,CAAAA,CAAY,KAAOlL,CAAU,CAAA,IAAA,EAEjC,CAEMmL,CAAAA,EAAAA,CAAkB,CAAC,CACvB,MAAAhF,CAAAA,CAAAA,CACA,UAAAnG,CACA,CAAA,IAAA,CAAAtG,CACF,CAAA,GAE0B,CACxB,IAAMwR,CAAAA,CAAkC,CACtC,EAAA,CAAIlL,EAAU,EACd,CAAA,MAAA,CAAAmG,CACA,CAAA,IAAA,CAAAzM,CACF,CAAA,CAEA,OAAAuR,EAAAA,CAAoB,CAClB,WAAAC,CAAAA,CAAAA,CACA,SAAAlL,CAAAA,CACF,CAAC,CAEMkL,CAAAA,CACT,CAEME,CAAAA,EAAAA,CAAyB,CAAC,CAC9B,OAAA,CAAAtL,CACA,CAAA,MAAA,CAAAqG,EACA,SAAAnG,CAAAA,CAAAA,CACA,IAAAtG,CAAAA,CAAAA,CACA,mBAAA2R,CACF,CAAA,GAI0B,CACxB,IAAMH,EAAcC,EAAgB,CAAA,CAAE,MAAAhF,CAAAA,CAAAA,CAAQ,UAAAnG,CAAW,CAAA,IAAA,CAAAtG,CAAK,CAAC,CAE3DsG,CAAAA,CAAAA,CAAU,UACZkL,GAAAA,CAAAA,CAAY,WAAalL,CAAU,CAAA,UAAA,CAAA,CAGrC,IAAIsL,CAAAA,CAAwB,MACtBC,CAAkC,CAAA,CACtC,SAAW,CAAA,EAAA,CACX,OAAQ,CACN,UAAA,CAAY,EAAC,CACb,QAAU,CAAA,EACV,CAAA,IAAA,CAAM,QACR,CACF,CAAA,CACMC,CAA2C,CAAA,GAEjD,IAAWC,IAAAA,CAAAA,IAAwBzL,CAAU,CAAA,WAAA,EAAe,EAAI,CAAA,CAC9D,IAAM0L,CAAAA,CACJ,MAAUD,GAAAA,CAAAA,CACN3L,CAAQ,CAAA,UAAA,CAA4B2L,EAAqB,IAAI,CAAA,CAC7DA,CACA1J,CAAAA,CAAAA,CACJ2J,EAAY,EAAO,GAAA,MAAA,CACfA,CAAY,CAAA,MAAA,CACZ,CACE,GAAGA,CAAAA,CACH,MAAQA,CAAAA,CAAAA,CAAY,IAAS,GAAA,MAAA,CAAS,QAAWA,CAAAA,CAAAA,CAAY,OAC7D,QAAU,CAAA,MAAA,CACV,IAAMA,CAAAA,CAAAA,CAAY,OAAS,MAAS,CAAA,QAAA,CAAWA,CAAY,CAAA,IAC7D,EACA9e,CAAUqa,CAAAA,EAAAA,CAAgB,CAC9B,SAAA,CAAWjH,CAAU,CAAA,QAAA,CACrB,QAAU,CAAA,CAAE,OAAA+B,CAAO,CACrB,CAAC,CAAA,CAED,GAAInV,CAAS,CAAA,CACX,IAAMoe,CAAAA,CAAaH,GAAgB,CACjC,OAAA,CAAA/K,CACA,CAAA,IAAA,CAAM,EACN,CAAA,MAAA,CACElT,CAAQ,CAAA,MAAA,EAAU,SAAUA,CAAQ,CAAA,MAAA,CAChC,CACE,KAAA,CAAO,CAAC,CAAE,GAAGA,CAAQ,CAAA,MAAO,CAAC,CAC7B,CAAA,WAAA,CAAa8e,CAAY,CAAA,WAC3B,CACA,CAAA,CACE,WAAaA,CAAAA,CAAAA,CAAY,YACzB,GAAG9e,CAAAA,CAAQ,MACb,CACR,CAAC,CAEKwb,CAAAA,CAAAA,CAAWK,CAAiB,CAAA,CAChC,QAAA3I,CACA,CAAA,MAAA,CACE,MAAU4L,GAAAA,CAAAA,CACN,CACE,KAAO,CAAA,CACL,CACE,GAAGA,EACH,IAAMA,CAAAA,CAAAA,CAAY,IAClB,CAAA,QAAA,CAAU,EACV,CAAA,IAAA,CAAM,QACR,CACF,EACA,WAAaA,CAAAA,CAAAA,CAAY,WAC3B,CAAA,CACA9e,CAAQ,CAAA,MAAA,EAAU,MAAUA,GAAAA,CAAAA,CAAQ,OAClC,CACE,KAAA,CAAO,CAAC,CAAE,GAAGA,CAAQ,CAAA,MAAO,CAAC,CAAA,CAC7B,YAAa8e,CAAY,CAAA,WAC3B,CACA,CAAA,CACE,WAAaA,CAAAA,CAAAA,CAAY,WACzB,CAAA,GAAG9e,EAAQ,MACb,CAAA,CACR,KAAO,CAAA,MACT,CAAC,CAED2e,CAAAA,CAAAA,CAAkB,SAAY3e,CAAAA,CAAAA,CAAQ,UAElC8e,CAAY,CAAA,EAAA,GAAO,MACrBH,CAAAA,CAAAA,CAAkB,MAASnD,CAAAA,CAAAA,EAE3BmD,CAAkB,CAAA,MAAA,CAAO,WAAYG,CAAY,CAAA,IAAI,CAAItD,CAAAA,CAAAA,CAErDsD,EAAY,QACdF,EAAAA,CAAAA,CAA0B,IAAKE,CAAAA,CAAAA,CAAY,IAAI,CAI/CV,CAAAA,CAAAA,CAAAA,GACFO,CAAkB,CAAA,UAAA,CAAaP,CAG7Bpe,CAAAA,CAAAA,CAAAA,CAAQ,IACV2e,GAAAA,CAAAA,CAAkB,KAAO3e,CAAQ,CAAA,IAAA,EAErC,CAEI8e,CAAAA,CAAY,WACdJ,CAAwB,CAAA,IAAA,EAE5B,CAEIC,CAAAA,CAAkB,YAChBC,CAA0B,CAAA,MAAA,GAC5BD,CAAkB,CAAA,MAAA,CAAO,QAAWC,CAAAA,CAAAA,CAAAA,CAGtCN,CAAY,CAAA,IAAA,CAAOK,EAEfD,CACFJ,GAAAA,CAAAA,CAAY,IAAK,CAAA,QAAA,CAAWI,IAIhC,IAAWhe,IAAAA,CAAAA,IAAQ0S,CAAU,CAAA,SAAA,CAAW,CACjCkL,CAAY,CAAA,SAAA,GACfA,CAAY,CAAA,SAAA,CAAY,EAAC,CAAA,CAG3B,IAAM5e,CAAAA,CAAW0T,EAAU,SAAU1S,CAAAA,CAAI,CACnCqe,CAAAA,CAAAA,CACJ,SAAUrf,CACNwT,CAAAA,CAAAA,CAAQ,UAA2BxT,CAAAA,CAAAA,CAAS,IAAI,CAChDA,CAAAA,CAAAA,CACAM,CAAUqa,CAAAA,EAAAA,CAAgB,CAE9B,SAAA,CAAWjH,CAAU,CAAA,QAAA,CAAWA,EAAU,QAAW,CAAA,CAAC,kBAAkB,CAAA,CACxE,SAAU2L,CACZ,CAAC,CAEG/e,CAAAA,CAAAA,CACFse,EAAY,SAAU5d,CAAAA,CAAI,CAAI,CAAA,CAC5B,UAAWV,CAAQ,CAAA,SAAA,CACnB,MAAQ6b,CAAAA,CAAAA,CAAiB,CACvB,OAAA3I,CAAAA,CAAAA,CACA,MAAQ,CAAA,CACN,YAAa6L,CAAe,CAAA,WAAA,CAC5B,GAAG3E,EAAAA,CAAgB,CAAE,OAAApa,CAAAA,CAAQ,CAAC,CAChC,CACA,CAAA,KAAA,CAAO,MACT,CAAC,CACH,CAEAse,CAAAA,CAAAA,CAAY,SAAU5d,CAAAA,CAAI,EAAI,CAC5B,MAAA,CAAQ,CACN,WAAA,CAAaqe,EAAe,WAG5B,CAAA,IAAA,CAAMre,CAAS,GAAA,KAAA,CAAQ,MAAS,CAAA,SAClC,CACF,EAEJ,CAEA,GAAI0S,CAAAA,CAAU,QAAU,CAAA,CACtB,IAAM4L,CAAkD,CAAA,EAExD,CAAA,IAAA,IAAWC,KAA6B7L,CAAU,CAAA,QAAA,CAChD,IAAW1S,IAAAA,CAAAA,IAAQue,CAA2B,CAAA,CAC5C,IAAMC,CAAAA,CAAuBT,EAAmB,GAAI/d,CAAAA,CAAI,CAExD,CAAA,GAAI,CAACwe,CACH,CAAA,SAGF,IAAIC,CAAAA,CAcJ,GAZID,CAAqB,CAAA,IAAA,GAAS,QAChCC,GAAAA,CAAAA,CAAyBD,CAGvBA,CAAAA,CAAAA,CAAAA,CAAqB,IAAS,GAAA,OAAA,GAChCC,EAAyB,CACvB,WAAA,CAAaD,CAAqB,CAAA,WAAA,CAClC,OAAQ,OACR,CAAA,IAAA,CAAM,MACR,CAAA,CAAA,CAGEA,EAAqB,IAAS,GAAA,QAAA,CAOhC,OANAC,CAAAA,CAAyB,CACvB,WAAA,CAAaD,CAAqB,CAAA,WAAA,CAClC,MAAO,EAAC,CACR,IAAM,CAAA,QACR,EAEQA,CAAqB,CAAA,IAAA,EAC3B,KAAK,aACHC,CAAuB,CAAA,KAAA,CAAM,iBAAoB,CAAA,CAC/C,gBAAkBD,CAAAA,CAAAA,CAAqB,gBACvC,CAAA,MAAA,CAAQA,EAAqB,MAC7B,CAAA,QAAA,CAAUA,CAAqB,CAAA,QACjC,EACA,MACF,KAAK,aACHC,CAAAA,CAAAA,CAAuB,MAAM,iBAAoB,CAAA,CAC/C,MAAQD,CAAAA,CAAAA,CAAqB,MAC7B,CAAA,QAAA,CAAUA,CAAqB,CAAA,QACjC,EACA,MACF,KAAK,UACHC,CAAAA,CAAAA,CAAuB,MAAM,QAAW,CAAA,CACtC,gBAAkBD,CAAAA,CAAAA,CAAqB,iBACvC,MAAQA,CAAAA,CAAAA,CAAqB,MAC/B,CAAA,CACA,MACF,KAAK,UAAA,CACHC,CAAuB,CAAA,KAAA,CAAM,SAAW,CACtC,MAAA,CAAQD,CAAqB,CAAA,MAAA,CAC7B,SAAUA,CAAqB,CAAA,QACjC,CACA,CAAA,KACJ,CAGGC,CAILH,EAAAA,CAAAA,CAAsB,IAAKG,CAAAA,CAAsB,EACnD,CAGEH,CAAsB,CAAA,MAAA,GACxBV,EAAY,QAAWU,CAAAA,CAAAA,EAE3B,CAKA,OAAOV,CACT,CAEac,CAAAA,EAAAA,CAAiB,CAAC,CAC7B,QAAAlM,CACA,CAAA,MAAA,CAAAqG,CACA,CAAA,SAAA,CAAAnG,CACA,CAAA,YAAA,CAAAoG,CACA,CAAA,IAAA,CAAA1M,EACA,kBAAA2R,CAAAA,CACF,CAUM,GAAA,CACJnF,GAAwB,CACtB,OAAA,CAAApG,CACA,CAAA,EAAA,CAAIE,EAAU,WACd,CAAA,MAAA,CAAAmG,CACA,CAAA,YAAA,CAAAC,CACA,CAAA,IAAA,CAAA1M,CACF,CAAC,EAEIoG,CAAQ,CAAA,EAAA,CAAG,KACdA,GAAAA,CAAAA,CAAQ,GAAG,KAAQ,CAAA,EAGhBA,CAAAA,CAAAA,CAAAA,CAAQ,GAAG,KAAMpG,CAAAA,CAAI,CACxBoG,GAAAA,CAAAA,CAAQ,EAAG,CAAA,KAAA,CAAMpG,CAAI,CAAA,CAAI,EAG3BsG,CAAAA,CAAAA,CAAAA,CAAU,EAAKsG,CAAAA,EAAAA,CAAc,CAC3B,OAAAxG,CAAAA,CAAAA,CACA,EAAIE,CAAAA,CAAAA,CAAU,YACd,MAAAmG,CAAAA,CAAAA,CACA,IAAAzM,CAAAA,CACF,CAAC,CAAA,CAEDoG,CAAQ,CAAA,EAAA,CAAG,MAAMpG,CAAI,CAAA,CAAEyM,CAAM,CAAA,CAAIiF,GAAuB,CACtD,OAAA,CAAAtL,CACA,CAAA,MAAA,CAAAqG,EACA,SAAAnG,CAAAA,CAAAA,CACA,IAAAtG,CAAAA,CAAAA,CACA,kBAAA2R,CAAAA,CACF,CAAC,EACH,EC7VA,IAAMY,EAAAA,CACJC,CACY,EAAA,CACZ,OAAQA,CAAkB,EACxB,KAAK,OAAA,CACH,OAAO,KACT,CAAA,KAAK,KACL,CAAA,KAAK,OACL,CAAA,KAAK,KACL,CAAA,KAAK,MACL,QACE,OAAO,MACX,CACF,EAKMC,EACJC,CAAAA,CAAAA,EAC0C,CAC1C,OAAQA,GACN,KAAK,QACL,CAAA,KAAK,OACH,OAAO,QAAA,CACT,KAAK,OAAA,CACL,QACE,OAAO,MACX,CACF,CAAA,CAEaC,GAA0B,CAAC,CACtC,OAAAvM,CAAAA,CAAAA,CACA,UAAAE,CACA,CAAA,UAAA,CAAArN,CACF,CAAA,GAIuC,CACrC,GAAI,CAACA,CAAAA,EAAc,CAAC,MAAO,CAAA,IAAA,CAAKA,CAAU,CAAA,CAAE,OAC1C,OAGF,IAAM2Z,CAAwC,CAAA,GAE9C,IAAWC,IAAAA,CAAAA,IAAwB5Z,CAAY,CAAA,CAC7C,IAAMC,CAAAA,CACJ,MAAU2Z,GAAAA,CAAAA,CACNzM,EAAQ,UAA4ByM,CAAAA,CAAAA,CAAqB,IAAI,CAAA,CAC7DA,EAGN,GAAI3Z,CAAAA,CAAU,EAAO,GAAA,MAAA,EAAUA,EAAU,EAAO,GAAA,UAAA,CAAY,CAErDoN,CAAAA,CAAU,WAEbA,GAAAA,CAAAA,CAAU,WAAc,CAAA,IAI1BA,CAAU,CAAA,WAAA,CAAY,IAAKpN,CAAAA,CAAS,EACpC,QACF,CAEK0Z,CAAiB1Z,CAAAA,CAAAA,CAAU,EAAE,CAChC0Z,GAAAA,CAAAA,CAAiB1Z,CAAU,CAAA,EAAE,CAAI,CAAA,EAGnC0Z,CAAAA,CAAAA,CAAAA,CAAiB1Z,EAAU,EAAE,CAAA,CAAGA,CAAU,CAAA,IAAI,EAAI4Z,EAAuB,CAAA,CACvE,OAAA1M,CAAAA,CAAAA,CACA,UAAAlN,CACF,CAAC,EACH,CAEA,OAAO0Z,CACT,CAEME,CAAAA,EAAAA,CAAyB,CAAC,CAC9B,OAAA,CAAA1M,CACA,CAAA,SAAA,CAAAlN,CACF,CAG0B,GAAA,CACxB,IAAMmP,CAAAA,CAASnP,EAETkY,CACJ/I,CAAAA,CAAAA,EAAU,MAAUA,GAAAA,CAAAA,CAChB,CACE,KAAA,CAAO,CACL,CACE,GAAGA,CACH,CAAA,IAAA,CAAMA,CAAO,CAAA,IAAA,CACb,SAAU,KAAM,CAAA,OAAA,CAAQA,CAAO,CAAA,QAAQ,EAAIA,CAAO,CAAA,QAAA,CAAW,EAAC,CAC9D,IAAMA,CAAAA,CAAAA,CAAO,IACf,CACF,EACA,WAAanP,CAAAA,CAAAA,CAAU,WACzB,CAAA,CACA,CACE,WAAaA,CAAAA,CAAAA,CAAU,WACvB,CAAA,GAAGmP,EACH,QAAU,CAAA,KAAA,CAAM,OAAQA,CAAAA,CAAAA,CAAO,QAAQ,CAAIA,CAAAA,CAAAA,CAAO,QAAW,CAAA,GAC7D,IAAMA,CAAAA,CAAAA,CAAO,IACf,CAAA,CAEAiJ,EAAaH,EAAgB,CAAA,CACjC,OAAA/K,CAAAA,CAAAA,CACA,KAAMlN,CAAU,CAAA,IAAA,CAChB,MAAQkY,CAAAA,CACV,CAAC,CAAA,CAEK2B,CAAQN,CAAAA,EAAAA,CAAavZ,EAAU,EAAE,CAAA,CAIjC8Z,CAAkC,CAAA,CACtC,cAHoB,KAIpB,CAAA,OAAA,CALcT,EAAerZ,CAAAA,CAAAA,CAAU,gBAAgB,CAMvD,CAAA,QAAA,CAAUA,CAAU,CAAA,EAAA,CACpB,IAAMA,CAAAA,CAAAA,CAAU,IAChB,CAAA,MAAA,CAAQ6V,EAAiB,CACvB,OAAA,CAAA3I,CACA,CAAA,MAAA,CAAQgL,EACR,KAAO,CAAA,MACT,CAAC,CAAA,CACD,MAAA2B,CACF,CAAA,CAEA,OAAI7Z,CAAAA,CAAU,WACZ8Z,GAAAA,CAAAA,CAAY,WAAc9Z,CAAAA,CAAAA,CAAU,aAGlCoY,CACF0B,GAAAA,CAAAA,CAAY,UAAa1B,CAAAA,CAAAA,CAAAA,CAGvBpY,EAAU,QACZ8Z,GAAAA,CAAAA,CAAY,QAAW9Z,CAAAA,CAAAA,CAAU,UAG5B8Z,CACT,CAAA,CC3JO,IAAMC,EAAAA,CAAe,CAAC,CAAE,OAAA7M,CAAAA,CAAQ,IAA+B,CACpE,IAAI8M,CAAiC9M,CAAAA,CAAAA,CAAQ,KAAK,OAAW,EAAA,EACzD5C,CAAAA,CAAAA,CAAO4C,EAAQ,IAAK,CAAA,IAAA,EAAQ,EAC1BpG,CAAAA,CAAAA,CAAOoG,CAAQ,CAAA,IAAA,CAAK,QAAY,EAAA,EAAA,CAEtC,GAAI,OAAOA,CAAAA,CAAQ,MAAO,CAAA,KAAA,CAAM,MAAS,QAAU,CAAA,CACjD,IAAMkB,CAAAA,CAAMjE,GAAS+C,CAAQ,CAAA,MAAA,CAAO,KAAM,CAAA,IAAI,CAEzC8M,CAAAA,CAAAA,CAAQ,MACP5L,EAAAA,CAAAA,CAAI,WACN4L,CAAU,CAAA,CAAC5L,CAAI,CAAA,QAAQ,GAItB9D,CACHA,GAAAA,CAAAA,CAAO,CAAG8D,EAAAA,CAAAA,CAAI,IAAI,CAAGA,EAAAA,CAAAA,CAAI,IAAO,CAAA,CAAA,CAAA,EAAIA,CAAI,CAAA,IAAI,CAAK,CAAA,CAAA,EAAE,IAEvD,CAEK4L,CAAAA,CAAQ,MACXA,GAAAA,CAAAA,CAAU,CAAC,EAAE,CAAA,CAAA,CAGf,IAAMpM,CAAAA,CAAUoM,EACb,GAAKC,CAAAA,CAAAA,EAAW,CAAGA,EAAAA,CAAAA,CAAS,GAAGA,CAAM,CAAA,GAAA,CAAA,CAAQ,EAAE,CAAA,EAAG3P,CAAI,CAAGxD,EAAAA,CAAI,CAAE,CAAA,CAAA,CAC/D,OAAO,OAAO,CAAA,CAEb8G,CAAQ,CAAA,MAAA,GACVV,EAAQ,EAAG,CAAA,OAAA,CAAUU,CAAQ,CAAA,GAAA,CAAKQ,CAAS,GAAA,CACzC,GAAAA,CAAAA,CACF,EAAE,CAEN,EAAA,CAAA,CCjBO,IAAM8L,EAAAA,CAAehN,GAAuC,CACjE,IAAMsG,CAAe,CAAA,IAAI,IACnBiF,CAAqB,CAAA,IAAI,GAEzBlG,CAAAA,CAAAA,CAAiBK,EAAc1F,CAAAA,CAAAA,CAAQ,MAAO,CAAA,KAAA,CAAM,OAAO,CAC3DsF,CAAAA,CAAAA,CAAiBI,EAAc1F,CAAAA,CAAAA,CAAQ,OAAO,KAAM,CAAA,OAAO,CAE3DiN,CAAAA,CAAAA,CAAmB,CAACzP,CAAcyE,CAAAA,CAAAA,GACtCmD,EAAc,CAAA,CACZ,IAAA5H,CAAAA,CAAAA,CACA,cAAA6H,CAAAA,CAAAA,CACA,eAAAC,CACA,CAAA,MAAA,CAAArD,CACF,CAAC,EAEH,IAAWzU,IAAAA,CAAAA,IAAQwS,CAAQ,CAAA,IAAA,CAAK,oBAAqB,CACnD,IAAMgM,CAAuBhM,CAAAA,CAAAA,CAAQ,KAAK,mBAAoBxS,CAAAA,CAAI,CAClE+d,CAAAA,CAAAA,CAAmB,IAAI/d,CAAMwe,CAAAA,CAAoB,EACnD,CAEA,GAAIhM,CAAQ,CAAA,IAAA,CAAK,WACf,CAAA,IAAA,IAAWxS,KAAQwS,CAAQ,CAAA,IAAA,CAAK,WAAa,CAAA,CAC3C,IAAMxC,CAAAA,CAAO,CAAiBhQ,cAAAA,EAAAA,CAAI,GAC5ByU,CAASjC,CAAAA,CAAAA,CAAQ,IAAK,CAAA,WAAA,CAAYxS,CAAI,CAEvCyf,CAAAA,CAAAA,CAAiBzP,CAAMyE,CAAAA,CAAM,GAIlC4I,EAAY,CAAA,CACV,IAAArN,CAAAA,CAAAA,CACA,OAAAwC,CAAAA,CAAAA,CACA,MAAAiC,CAAAA,CACF,CAAC,EACH,CAGF4K,EAAa,CAAA,CAAE,QAAA7M,CAAQ,CAAC,CAExB,CAAA,IAAA,IAAWpG,KAAQoG,CAAQ,CAAA,IAAA,CAAK,KAAO,CAAA,CACrC,GAAIpG,CAAAA,CAAK,UAAW,CAAA,IAAI,EACtB,SAGF,IAAMsT,CAAWlN,CAAAA,CAAAA,CAAQ,KAAK,KAAMpG,CAAAA,CAAgB,CAE9CuT,CAAAA,CAAAA,CAAgBD,EAAS,IAC3B,CAAA,CACE,GAAGlN,CAAAA,CAAQ,WAA2BkN,CAAS,CAAA,IAAI,CACnD,CAAA,GAAGA,CACL,CACAA,CAAAA,CAAAA,CAEEE,CAAmC,CAAA,CACvC,SAAUpN,CAAQ,CAAA,IAAA,CAAK,QACvB,CAAA,QAAA,CAAUA,EAAQ,IAAK,CAAA,QAAA,CACvB,SAAW,CAAA,EACX,CAAA,QAAA,CAAUA,CAAQ,CAAA,IAAA,CAAK,QACzB,CACMqN,CAAAA,CAAAA,CACJ,CACE,OAAA,CAAArN,EACA,SAAW,CAAA,CACT,GAAGoN,CAAAA,CACH,GAAI,EACJ,CAAA,UAAA,CAAYb,EAAwB,CAAA,CAClC,OAAAvM,CAAAA,CAAAA,CACA,SAAWoN,CAAAA,CAAAA,CACX,WAAYD,CAAc,CAAA,UAC5B,CAAC,CACH,EACA,YAAA7G,CAAAA,CAAAA,CACA,IAAM1M,CAAAA,CAAAA,CACN,mBAAA2R,CACF,CAAA,CAEI+B,CAAa,CAAA,CAAA,OAAA,EAAU1T,CAAI,CAAA,OAAA,CAAA,CACjC,GACEuT,CAAAA,CAAc,QACdF,CAAiBK,CAAAA,CAAAA,CAAYH,CAAc,CAAA,MAAM,EACjD,CACA,IAAMta,CAAa+S,CAAAA,CAAAA,CAAuB,CACxC,MAAQ2G,CAAAA,EAAAA,CAAwB,CAC9B,OAAA,CAAAvM,CACA,CAAA,SAAA,CAAWmN,CAAc,CAAA,MAAA,CACzB,WAAYA,CAAc,CAAA,MAAA,CAAO,UACnC,CAAC,EACD,MAAQE,CAAAA,CAAAA,CAAc,SAAU,CAAA,UAClC,CAAC,CACDnB,CAAAA,EAAAA,CAAe,CACb,GAAGmB,CACH,CAAA,MAAA,CAAQ,QACR,CAAA,SAAA,CAAW,CACT,GAAGA,CAAAA,CAAc,SACjB,CAAA,GAAGF,EAAc,MACjB,CAAA,UAAA,CAAAta,CACF,CACF,CAAC,EACH,CAEA,IAAM0a,CAAAA,CAAU,CAAU3T,OAAAA,EAAAA,CAAI,CAC9B,IAAA,CAAA,CAAA,GAAIuT,EAAc,GAAOF,EAAAA,CAAAA,CAAiBM,CAASJ,CAAAA,CAAAA,CAAc,GAAG,CAAG,CAAA,CACrE,IAAMta,CAAAA,CAAa+S,EAAuB,CACxC,MAAA,CAAQ2G,EAAwB,CAAA,CAC9B,OAAAvM,CAAAA,CAAAA,CACA,SAAWmN,CAAAA,CAAAA,CAAc,IACzB,UAAYA,CAAAA,CAAAA,CAAc,GAAI,CAAA,UAChC,CAAC,CACD,CAAA,MAAA,CAAQE,CAAc,CAAA,SAAA,CAAU,UAClC,CAAC,CAAA,CACDnB,EAAe,CAAA,CACb,GAAGmB,CACH,CAAA,MAAA,CAAQ,KACR,CAAA,SAAA,CAAW,CACT,GAAGA,CAAAA,CAAc,SACjB,CAAA,GAAGF,EAAc,GACjB,CAAA,UAAA,CAAAta,CACF,CACF,CAAC,EACH,CAEA,IAAM2a,CAAAA,CAAW,CAAU5T,OAAAA,EAAAA,CAAI,CAC/B,KAAA,CAAA,CAAA,GAAIuT,EAAc,IAAQF,EAAAA,CAAAA,CAAiBO,CAAUL,CAAAA,CAAAA,CAAc,IAAI,CAAG,CAAA,CACxE,IAAMta,CAAAA,CAAa+S,EAAuB,CACxC,MAAA,CAAQ2G,EAAwB,CAAA,CAC9B,OAAAvM,CAAAA,CAAAA,CACA,SAAWmN,CAAAA,CAAAA,CAAc,KACzB,UAAYA,CAAAA,CAAAA,CAAc,IAAK,CAAA,UACjC,CAAC,CACD,CAAA,MAAA,CAAQE,CAAc,CAAA,SAAA,CAAU,UAClC,CAAC,CAAA,CACDnB,EAAe,CAAA,CACb,GAAGmB,CAAAA,CACH,MAAQ,CAAA,MAAA,CACR,UAAW,CACT,GAAGA,CAAc,CAAA,SAAA,CACjB,GAAGF,CAAc,CAAA,IAAA,CACjB,UAAAta,CAAAA,CACF,CACF,CAAC,EACH,CAEA,IAAM4a,CAAc,CAAA,CAAA,OAAA,EAAU7T,CAAI,CAAA,QAAA,CAAA,CAClC,GACEuT,CAAc,CAAA,OAAA,EACdF,CAAiBQ,CAAAA,CAAAA,CAAaN,EAAc,OAAO,CAAA,CACnD,CACA,IAAMta,EAAa+S,CAAuB,CAAA,CACxC,MAAQ2G,CAAAA,EAAAA,CAAwB,CAC9B,OAAA,CAAAvM,CACA,CAAA,SAAA,CAAWmN,EAAc,OACzB,CAAA,UAAA,CAAYA,CAAc,CAAA,OAAA,CAAQ,UACpC,CAAC,CAAA,CACD,MAAQE,CAAAA,CAAAA,CAAc,UAAU,UAClC,CAAC,CACDnB,CAAAA,EAAAA,CAAe,CACb,GAAGmB,CACH,CAAA,MAAA,CAAQ,UACR,SAAW,CAAA,CACT,GAAGA,CAAAA,CAAc,UACjB,GAAGF,CAAAA,CAAc,OACjB,CAAA,UAAA,CAAAta,CACF,CACF,CAAC,EACH,CAEA,IAAM6a,CAAAA,CAAY,CAAU9T,OAAAA,EAAAA,CAAI,SAChC,GACEuT,CAAAA,CAAc,KACdF,EAAAA,CAAAA,CAAiBS,EAAWP,CAAc,CAAA,KAAK,CAC/C,CAAA,CACA,IAAMta,CAAa+S,CAAAA,CAAAA,CAAuB,CACxC,MAAA,CAAQ2G,GAAwB,CAC9B,OAAA,CAAAvM,CACA,CAAA,SAAA,CAAWmN,EAAc,KACzB,CAAA,UAAA,CAAYA,CAAc,CAAA,KAAA,CAAM,UAClC,CAAC,CAAA,CACD,MAAQE,CAAAA,CAAAA,CAAc,UAAU,UAClC,CAAC,CACDnB,CAAAA,EAAAA,CAAe,CACb,GAAGmB,CACH,CAAA,MAAA,CAAQ,QACR,SAAW,CAAA,CACT,GAAGA,CAAAA,CAAc,UACjB,GAAGF,CAAAA,CAAc,KACjB,CAAA,UAAA,CAAAta,CACF,CACF,CAAC,EACH,CAEA,IAAM8a,CAAAA,CAAW,CAAU/T,OAAAA,EAAAA,CAAI,QAC/B,GAAIuT,CAAAA,CAAc,IAAQF,EAAAA,CAAAA,CAAiBU,EAAUR,CAAc,CAAA,IAAI,CAAG,CAAA,CACxE,IAAMta,CAAa+S,CAAAA,CAAAA,CAAuB,CACxC,MAAA,CAAQ2G,EAAwB,CAAA,CAC9B,OAAAvM,CAAAA,CAAAA,CACA,UAAWmN,CAAc,CAAA,IAAA,CACzB,UAAYA,CAAAA,CAAAA,CAAc,KAAK,UACjC,CAAC,CACD,CAAA,MAAA,CAAQE,EAAc,SAAU,CAAA,UAClC,CAAC,CAAA,CACDnB,EAAe,CAAA,CACb,GAAGmB,CAAAA,CACH,OAAQ,MACR,CAAA,SAAA,CAAW,CACT,GAAGA,EAAc,SACjB,CAAA,GAAGF,CAAc,CAAA,IAAA,CACjB,WAAAta,CACF,CACF,CAAC,EACH,CAEA,IAAM+a,CAAU,CAAA,CAAA,OAAA,EAAUhU,CAAI,CAC9B,IAAA,CAAA,CAAA,GAAIuT,CAAc,CAAA,GAAA,EAAOF,EAAiBW,CAAST,CAAAA,CAAAA,CAAc,GAAG,CAAA,CAAG,CACrE,IAAMta,CAAAA,CAAa+S,CAAuB,CAAA,CACxC,MAAQ2G,CAAAA,EAAAA,CAAwB,CAC9B,OAAA,CAAAvM,EACA,SAAWmN,CAAAA,CAAAA,CAAc,GACzB,CAAA,UAAA,CAAYA,EAAc,GAAI,CAAA,UAChC,CAAC,CAAA,CACD,OAAQE,CAAc,CAAA,SAAA,CAAU,UAClC,CAAC,CACDnB,CAAAA,EAAAA,CAAe,CACb,GAAGmB,EACH,MAAQ,CAAA,KAAA,CACR,SAAW,CAAA,CACT,GAAGA,CAAc,CAAA,SAAA,CACjB,GAAGF,CAAAA,CAAc,IACjB,UAAAta,CAAAA,CACF,CACF,CAAC,EACH,CACF,CACF,CCzOO,CAAA,IAAMqU,GAAkB,CAAC,CAC9B,OAAApa,CAAAA,CACF,IAEgC,CAC9B,GAAM,CAAE,SAAA,CAAAka,EAAW,MAAA/E,CAAAA,CAAO,CAAInV,CAAAA,CAAAA,CAE9B,OAAImV,CAAAA,EAAU,MAAUA,GAAAA,CAAAA,CACf,CACL,KAAO,CAAA,CAAC,CAAE,GAAGA,CAAO,CAAC,CACvB,CAGGA,CAAAA,CAAAA,CAWHA,EAAO,IAAS,GAAA,QAAA,EAChB,CAACA,CAAAA,CAAO,MACR8E,EAAAA,EAAAA,CAAoB,CAAE,SAAA,CAAAC,CAAU,CAAC,CAAA,CAE1B,CACL,GAAG/E,EACH,MAAQ,CAAA,QACV,CAGKA,CAAAA,CAAAA,CApBD8E,GAAoB,CAAE,SAAA,CAAAC,CAAU,CAAC,CAC5B,CAAA,CACL,MAAQ,CAAA,QAAA,CACR,KAAM,QACR,CAAA,CAEF,MAeJ,CAAA,CAEaG,GAAkB,CAAC,CAC9B,OAAAra,CAAAA,CACF,IAE2B,CAEzB,IAAA,IAAWka,CAAala,IAAAA,CAAAA,CACtB,OAAO,CACL,SAAA,CAAAka,CACA,CAAA,MAAA,CAAQla,EAAQka,CAAS,CAAA,CAAG,MAC5B,CAAA,IAAA,CAAMC,GAAuB,CAAE,SAAA,CAAAD,CAAU,CAAC,CAC5C,CAEJ,CAAA,CCvDO,IAAMoB,EAAAA,CAAgB,CAAC,CAC5B,MAAAnG,CAAAA,CACF,IAE4C,CAC1C,GAAIA,CAAO,CAAA,IAAA,CACT,OAAOA,CAAO,CAAA,IAAA,CAIhB,GAAIA,CAAAA,CAAO,WACT,OAAO,QAEX,CAEMoG,CAAAA,EAAAA,CAAmB,CAAC,CACxB,QAAAC,CAAAA,CAAAA,CACA,OAAArG,CACF,CAAA,GAGM,CACAA,CAAAA,CAAO,aAAe,MACxBqG,GAAAA,CAAAA,CAAS,UAAarG,CAAAA,CAAAA,CAAO,YAG3BA,CAAO,CAAA,WAAA,GACTqG,CAAS,CAAA,WAAA,CAAcrG,CAAO,CAAA,WAAA,CAAA,CAG5BA,CAAO,CAAA,KAAA,GACTqG,EAAS,KAAQrG,CAAAA,CAAAA,CAAO,KAE5B,EAAA,CAAA,CAEMsG,GAAkB,CAAC,CACvB,QAAAD,CAAAA,CAAAA,CACA,OAAArG,CACF,CAAA,GAGM,CACAA,CAAAA,CAAO,UAAY,MACrBqG,GAAAA,CAAAA,CAAS,OAAUrG,CAAAA,CAAAA,CAAO,SAGxBA,CAAO,CAAA,gBAAA,CACLA,CAAO,CAAA,OAAA,GAAY,SACrBqG,CAAS,CAAA,gBAAA,CAAmBrG,CAAO,CAAA,OAAA,CAAA,CAE5BA,EAAO,OAAY,GAAA,MAAA,GAC5BqG,CAAS,CAAA,OAAA,CAAUrG,CAAO,CAAA,OAAA,CAAA,CAGxBA,CAAO,CAAA,gBAAA,CACLA,EAAO,OAAY,GAAA,MAAA,GACrBqG,CAAS,CAAA,gBAAA,CAAmBrG,EAAO,OAE5BA,CAAAA,CAAAA,CAAAA,CAAO,OAAY,GAAA,MAAA,GAC5BqG,EAAS,OAAUrG,CAAAA,CAAAA,CAAO,OAGxBA,CAAAA,CAAAA,CAAAA,CAAO,MACTqG,GAAAA,CAAAA,CAAS,MAASrG,CAAAA,CAAAA,CAAO,QAGvBA,CAAO,CAAA,QAAA,GAAa,MACtBqG,GAAAA,CAAAA,CAAS,SAAWrG,CAAO,CAAA,QAAA,CAAA,CAGzBA,CAAO,CAAA,SAAA,GAAc,SACvBqG,CAAS,CAAA,SAAA,CAAYrG,CAAO,CAAA,SAAA,CAAA,CAG1BA,CAAO,CAAA,QAAA,GAAa,MACtBqG,GAAAA,CAAAA,CAAS,SAAWrG,CAAO,CAAA,QAAA,CAAA,CAGzBA,CAAO,CAAA,SAAA,GAAc,SACvBqG,CAAS,CAAA,SAAA,CAAYrG,CAAO,CAAA,SAAA,CAAA,CAG1BA,EAAO,OACTqG,GAAAA,CAAAA,CAAS,OAAUrG,CAAAA,CAAAA,CAAO,OAGxBA,CAAAA,CAAAA,CAAAA,CAAO,QACTqG,EAAAA,CAAAA,CAAS,YAAc,MACvBA,CAAAA,CAAAA,CAAS,YAAeP,CAAAA,CAAAA,CAAwBO,EAAS,YAAc,CAAA,CACrE,MACF,CAAC,GACQrG,CAAO,CAAA,SAAA,GAChBqG,CAAS,CAAA,WAAA,CAAc,OACvBA,CAAAA,CAAAA,CAAS,YAAeP,CAAAA,CAAAA,CAAwBO,EAAS,YAAc,CAAA,CACrE,OACF,CAAC,GAEL,CAEME,CAAAA,EAAAA,CAAa,CAAC,CAClB,QAAAxI,CACA,CAAA,QAAA,CAAAsI,CAAW,CAAA,EACX,CAAA,MAAA,CAAArG,CACA,CAAA,KAAA,CAAAsD,CACF,CAKuB,GAAA,CACjBtD,CAAO,CAAA,QAAA,EAAYA,EAAO,QAAaA,GAAAA,CAAAA,CAAO,QAChDqG,CAAAA,CAAAA,CAAS,KAAO,OAEhBA,CAAAA,CAAAA,CAAS,IAAO,CAAA,OAAA,CAGlB,IAAIG,CAAAA,CAAsC,EAAC,CAE3C,GAAIxG,CAAO,CAAA,KAAA,CAAO,CAChB,IAAMyG,EAAgBC,CAAiB,CAAA,CACrC,OAAA3I,CAAAA,CAAAA,CACA,OAAQiC,CAAO,CAAA,KAAA,CACf,KAAAsD,CAAAA,CACF,CAAC,CAOD,CAAA,GALA+C,CAAS,CAAA,YAAA,CAAeP,EACtBO,CAAS,CAAA,YAAA,CACTI,CAAc,CAAA,YAChB,EAGE,CAACD,CAAAA,CAAY,MACbxG,EAAAA,CAAAA,CAAO,UACPA,CAAO,CAAA,QAAA,GAAaA,CAAO,CAAA,QAAA,CAE3BwG,CAAc,CAAA,KAAA,CAAMxG,CAAO,CAAA,QAAQ,EAAE,IAAKyG,CAAAA,CAAa,CAEnD,CAAA,KAAA,GAAA,MAAA,GAAUzG,EAAO,KACnBwG,CAAAA,CAAAA,CAAY,IAAKC,CAAAA,CAAa,OACzB,CACL,IAAME,CACJ3G,CAAAA,CAAAA,CAAO,KAAM,CAAA,KAAA,EAASA,CAAO,CAAA,KAAA,CAAM,OAASA,CAAO,CAAA,KAAA,CAAM,KACvD2G,CAAAA,CAAAA,EAAWA,EAAQ,MAAS,CAAA,CAAA,EAAK,CAAC3G,CAAAA,CAAO,MAAM,QAEjDqG,CAAAA,CAAAA,CAAW,CACT,GAAGA,CACH,CAAA,GAAGI,CACL,CAAA,CAEAD,EAAY,IAAKC,CAAAA,CAAa,EAElC,CAEJ,CAEA,OAAAJ,CAAAA,CAAWb,CAAiB,CAAA,CAC1B,MAAOgB,CACP,CAAA,MAAA,CAAQH,CACV,CAAC,CAEMA,CAAAA,CACT,CAEMO,CAAAA,EAAAA,CAAe,CAAC,CACpB,QAAA,CAAAP,CAAW,CAAA,EACb,CAMEA,IAAAA,CAAAA,CAAS,IAAO,CAAA,SAAA,CAETA,GAGHQ,EAAc,CAAA,CAAC,CACnB,QAAA,CAAAR,CAAW,CAAA,EACX,CAAA,MAAA,CAAArG,CACF,CAMEqG,IAAAA,CAAAA,CAAS,IAAOrG,CAAAA,CAAAA,CAAO,KAEhBqG,CAGHS,CAAAA,CAAAA,EAAAA,CAAc,CAAC,CACnB,QAAA/I,CACA,CAAA,QAAA,CAAAsI,CAAW,CAAA,EACX,CAAA,MAAA,CAAArG,CACA,CAAA,KAAA,CAAAsD,CACF,CAKuB,GAAA,CACrB+C,CAAS,CAAA,IAAA,CAAO,SAEhB,IAAMU,CAAAA,CAAoD,EAAC,CAE3D,QAAWxb,CAAQyU,IAAAA,CAAAA,CAAO,UAAY,CAAA,CACpC,IAAM3G,CAAAA,CAAW2G,CAAO,CAAA,UAAA,CAAWzU,CAAI,CACvC,CAAA,GAAI,OAAO8N,CAAAA,EAAa,UAEjB,CACL,IAAM2N,CAAmBN,CAAAA,CAAAA,CAAiB,CACxC,OAAA3I,CAAAA,CAAAA,CACA,MAAQ1E,CAAAA,CAAAA,CACR,MAAAiK,CACF,CAAC,CACD+C,CAAAA,CAAAA,CAAS,aAAeP,CACtBO,CAAAA,CAAAA,CAAS,YACTW,CAAAA,CAAAA,CAAiB,YACnB,CACAD,CAAAA,CAAAA,CAAiBxb,CAAI,CAAA,CAAIyb,EAC3B,CACF,CAMA,GAJI,MAAA,CAAO,IAAKD,CAAAA,CAAgB,CAAE,CAAA,MAAA,GAChCV,EAAS,UAAaU,CAAAA,CAAAA,CAAAA,CAGpB/G,CAAO,CAAA,oBAAA,GAAyB,OAC7BqG,CAAS,CAAA,UAAA,GACZA,CAAS,CAAA,oBAAA,CAAuB,CAC9B,IAAM,CAAA,SACR,CAEO,CAAA,CAAA,KAAA,GAAA,OAAOrG,CAAO,CAAA,oBAAA,EAAyB,SAChDqG,CAAAA,CAAAA,CAAS,qBAAuB,CAC9B,IAAA,CAAMrG,CAAO,CAAA,oBAAA,CAAuB,UAAY,OAClD,CAAA,CAAA,KACK,CACL,IAAMiH,EAA+BP,CAAiB,CAAA,CACpD,OAAA3I,CAAAA,CAAAA,CACA,MAAQiC,CAAAA,CAAAA,CAAO,oBACf,CAAA,KAAA,CAAAsD,CACF,CAAC,CAAA,CAAA,CAGC+C,CAAS,CAAA,UAAA,EACTY,EAA6B,IAAS,GAAA,SAAA,IAEtCZ,CAAS,CAAA,oBAAA,CAAuBY,GAEpC,CAEA,OAAIjH,CAAO,CAAA,QAAA,GACTqG,CAAS,CAAA,QAAA,CAAWrG,CAAO,CAAA,QAAA,CAAA,CAGtBqG,CACT,CAEMa,CAAAA,EAAAA,CAAc,CAAC,CACnB,SAAAb,CAAW,CAAA,EACb,CAAA,IAMEA,EAAS,IAAO,CAAA,QAAA,CAETA,CAGHc,CAAAA,CAAAA,EAAAA,CAAe,CAAC,CACpB,MAAAnH,CAAAA,CACF,IAEuB,CACrB,IAAMqG,CAA4B,CAAA,GAElC,OAAAD,EAAAA,CAAiB,CACf,QAAA,CAAAC,EACA,MAAArG,CAAAA,CACF,CAAC,CAAA,CAEMqG,CACT,CAAA,CAEMe,EAAa,CAAA,CAAC,CAClB,OAAArJ,CAAAA,CAAAA,CACA,MAAAiC,CAAAA,CAAAA,CACA,MAAAsD,CACF,CAAA,GAIuB,CACrB,IAAI+C,EAAWc,EAAa,CAAA,CAAE,MAAAnH,CAAAA,CAAO,CAAC,CAAA,CAEhCwG,CAAsC,CAAA,GACtCa,CAAalB,CAAAA,EAAAA,CAAc,CAAE,MAAA,CAAAnG,CAAO,CAAC,CAAA,CAErCsH,CAAqBtH,CAAAA,CAAAA,CAAO,MAElC,IAAWuH,IAAAA,CAAAA,IAAqBD,CAAoB,CAAA,CAClD,IAAME,CAAsBd,CAAAA,CAAAA,CAAiB,CAC3C,OAAA,CAAA3I,EACA,MAAQwJ,CAAAA,CAAAA,CACR,KAAAjE,CAAAA,CACF,CAAC,CAoBD,CAAA,GAlBA+C,CAAS,CAAA,YAAA,CAAeP,EACtBO,CAAS,CAAA,YAAA,CACTmB,CAAoB,CAAA,YACtB,CAEIxH,CAAAA,CAAAA,CAAO,QACLwH,GAAAA,CAAAA,CAAoB,SACtBA,CAAoB,CAAA,QAAA,CAAW,CAC7B,GAAGA,EAAoB,QACvB,CAAA,GAAGxH,CAAO,CAAA,QACZ,EAEAwH,CAAoB,CAAA,QAAA,CAAWxH,CAAO,CAAA,QAAA,CAAA,CAI1CwG,CAAY,CAAA,IAAA,CAAKgB,CAAmB,CAAA,CAEhC,SAAUD,CAAmB,CAAA,CAC/B,IAAME,CAAAA,CAAM1J,EAAQ,UAAyBwJ,CAAAA,CAAAA,CAAkB,IAAI,CAAA,CAEnE,GAAIE,CAAI,CAAA,aAAA,EAAiBnE,CAAM,CAAA,IAAA,CAAM,CACnC,IAAMoE,CAAyC,CAAA,CAC7C,WAAY,CACV,CAACD,CAAI,CAAA,aAAA,CAAc,YAAY,EAAG,CAChC,KAAO7B,CAAAA,EAAAA,CAAmBtC,EAAM,IAAMmE,CAAAA,CAAAA,CAAI,aAAc,CAAA,OAAO,EAC/D,IAAM,CAAA,QACR,CACF,CAAA,CACA,KAAM,QACR,CAAA,CACIA,CAAI,CAAA,QAAA,EAAU,SAASA,CAAI,CAAA,aAAA,CAAc,YAAY,CAAA,GACvDC,EAAsB,QAAW,CAAA,CAACD,CAAI,CAAA,aAAA,CAAc,YAAY,CAAA,CAAA,CAElEjB,CAAY,CAAA,IAAA,CAAKkB,CAAqB,EACxC,CAEA,GAAI,CAACpE,EAAM,wBAAyB,CAAA,GAAA,CAAIiE,CAAkB,CAAA,IAAI,EAAG,CAC/D,IAAMI,CAAcjB,CAAAA,CAAAA,CAAiB,CACnC,OAAA,CAAA3I,CACA,CAAA,MAAA,CAAQ0J,EACR,KAAO,CAAA,CACL,GAAGnE,CAAAA,CACH,KAAMiE,CAAkB,CAAA,IAC1B,CACF,CAAC,EACDlB,CAAS,CAAA,YAAA,CAAeP,CACtBO,CAAAA,CAAAA,CAAS,YACTsB,CAAAA,CAAAA,CAAY,YACd,EACF,CACF,CACF,CAEA,GAAIN,CAAAA,GAAe,SAAU,CAC3B,IAAMO,CAAiBC,CAAAA,EAAAA,CAAa,CAClC,OAAA9J,CAAAA,CAAAA,CACA,MAAQ,CAAA,CACN,GAAGiC,CACH,CAAA,IAAA,CAAM,QACR,CAAA,CACA,MAAAsD,CACF,CAAC,CAOD,CAAA,GALA+C,EAAS,YAAeP,CAAAA,CAAAA,CACtBO,CAAS,CAAA,YAAA,CACTuB,EAAe,YACjB,CAAA,CAEIA,CAAe,CAAA,UAAA,CAAY,CAC7B,IAAA,IAAWE,CAAoBF,IAAAA,CAAAA,CAAe,UAAY,EAAC,CACzD,GAAI,CAACA,EAAe,UAAWE,CAAAA,CAAgB,CAC7C,CAAA,IAAA,IAAWP,KAAqBD,CAAoB,CAAA,CAElD,IAAMS,CAAAA,CACJ,MAAUR,GAAAA,CAAAA,CACNxJ,CAAQ,CAAA,UAAA,CAAyBwJ,EAAkB,IAAI,CAAA,CACvDA,CAEN,CAAA,GACEpB,GAAc,CAAE,MAAA,CAAQ4B,CAAuB,CAAC,IAAM,QACtD,CAAA,CACA,IAAMP,CAAAA,CAAsBK,EAAa,CAAA,CACvC,OAAA9J,CAAAA,CAAAA,CACA,OAAQ,CACN,GAAGgK,CACH,CAAA,IAAA,CAAM,QACR,CACA,CAAA,KAAA,CAAAzE,CACF,CAAC,EAOD,GALA+C,CAAAA,CAAS,YAAeP,CAAAA,CAAAA,CACtBO,CAAS,CAAA,YAAA,CACTmB,CAAoB,CAAA,YACtB,EAEIA,CAAoB,CAAA,UAAA,GAAaM,CAAgB,CAAA,CAAG,CACtDF,CAAe,CAAA,UAAA,CAAWE,CAAgB,CAAA,CACxCN,EAAoB,UAAWM,CAAAA,CAAgB,CACjD,CAAA,KACF,CACF,CACF,CAGJtB,CAAAA,CAAY,KAAKoB,CAAc,EACjC,CACF,CASA,GAPAvB,CAAWb,CAAAA,CAAAA,CAAiB,CAC1B,KAAA,CAAOgB,EACP,eAAiB,CAAA,KAAA,CACjB,mBAAqB,CAAA,IAAA,CACrB,MAAQH,CAAAA,CACV,CAAC,CAAA,CAEGrG,EAAO,QAAU,CAAA,CAEnB,IAAMgI,CAAAA,CAAsC,CAC1C,CACE,IAAA,CAAM,MACR,CACF,EAEIxB,CAAY,CAAA,MAAA,EACdwB,CAAY,CAAA,OAAA,CAAQ3B,CAAQ,CAAA,CAG9BA,CAAW,CAAA,CACT,MAAO2B,CACP,CAAA,eAAA,CAAiB,IACnB,CAAA,CAIIA,EAAY,CAAC,CAAA,CAAG,UAClB3B,GAAAA,CAAAA,CAAS,WAAa2B,CAAY,CAAA,CAAC,CAAG,CAAA,UAAA,CAAA,CAKpCA,EAAY,CAAC,CAAA,CAAG,WAClB3B,GAAAA,CAAAA,CAAS,YAAc2B,CAAY,CAAA,CAAC,CAAG,CAAA,WAAA,EAE3C,CAEA,OAAO3B,CACT,CAEMuF,CAAAA,EAAAA,CAAa,CAAC,CAClB,OAAA,CAAA7N,CACA,CAAA,MAAA,CAAAiC,CACA,CAAA,KAAA,CAAAsD,CACF,CAAA,GAIuB,CACrB,IAAI+C,CAAAA,CAAWc,EAAa,CAAA,CAAE,OAAAnH,CAAO,CAAC,CAEhCwG,CAAAA,CAAAA,CAAsC,EACtCa,CAAAA,CAAAA,CAAalB,EAAc,CAAA,CAAE,MAAAnG,CAAAA,CAAO,CAAC,CAAA,CAErCsH,EAAqBtH,CAAO,CAAA,KAAA,CAElC,IAAWuH,IAAAA,CAAAA,IAAqBD,EAAoB,CAClD,IAAIE,CAAsBd,CAAAA,CAAAA,CAAiB,CACzC,OAAA3I,CAAAA,CAAAA,CACA,MAAQwJ,CAAAA,CAAAA,CACR,KAAAjE,CAAAA,CACF,CAAC,CAAA,CAED+C,EAAS,YAAeP,CAAAA,CAAAA,CACtBO,CAAS,CAAA,YAAA,CACTmB,EAAoB,YACtB,CAAA,CAGIxH,CAAO,CAAA,aAAA,EAAiB,SAAUuH,CAapCC,GAAAA,CAAAA,CAAsB,CACpB,KAAA,CAAO,CAbsC,CAC7C,UAAY,CAAA,CACV,CAACxH,CAAO,CAAA,aAAA,CAAc,YAAY,EAAG,CACnC,KAAO4F,CAAAA,EAAAA,CACL2B,CAAkB,CAAA,IAAA,CAClBvH,EAAO,aAAc,CAAA,OACvB,CACA,CAAA,IAAA,CAAM,QACR,CACF,CACA,CAAA,IAAA,CAAM,QACR,CAEiCwH,CAAAA,CAAmB,CAClD,CAAA,eAAA,CAAiB,KACnB,CAGFhB,CAAAA,CAAAA,CAAAA,CAAY,IAAKgB,CAAAA,CAAmB,EACtC,CAYA,GAVIxH,CAAO,CAAA,QAAA,EACTwG,CAAY,CAAA,IAAA,CAAK,CAAE,IAAA,CAAM,MAAO,CAAC,CAAA,CAGnCH,CAAWb,CAAAA,CAAAA,CAAiB,CAC1B,KAAOgB,CAAAA,CAAAA,CACP,mBAAqB,CAAA,IAAA,CACrB,OAAQH,CACV,CAAC,CAEGgB,CAAAA,CAAAA,GAAe,QAAU,CAAA,CAE3B,IAAMO,CAAAA,CAAiBC,GAAa,CAClC,OAAA,CAAA9J,CACA,CAAA,MAAA,CAAQ,CACN,GAAGiC,CAAAA,CACH,IAAM,CAAA,QACR,EACA,KAAAsD,CAAAA,CACF,CAAC,CAAA,CAED+C,EAAS,YAAeP,CAAAA,CAAAA,CACtBO,CAAS,CAAA,YAAA,CACTuB,EAAe,YACjB,CAAA,CAEIA,CAAe,CAAA,UAAA,GACjBvB,EAAW,CACT,KAAA,CAAO,CAACA,CAAAA,CAAUuB,CAAc,CAChC,CAAA,eAAA,CAAiB,KACnB,CAAA,EAEJ,CAEA,OAAOvB,CACT,CAAA,CAEM4B,GAAY,CAAC,CACjB,OAAAlK,CAAAA,CAAAA,CACA,OAAAiC,CACA,CAAA,KAAA,CAAAsD,CACF,CAAA,GAIuB,CACrB,IAAI+C,CAAAA,CAAWc,EAAa,CAAA,CAAE,MAAAnH,CAAAA,CAAO,CAAC,CAAA,CAEtCqG,EAAS,IAAO,CAAA,MAAA,CAEhB,IAAMG,CAAAA,CAAsC,EAE5C,CAAA,IAAA,GAAW,CAAC5X,CAAAA,CAAOsZ,CAAS,CAAKlI,GAAAA,CAAAA,CAAO,IAAK,CAAA,OAAA,EAAW,CAAA,CACtD,IAAMmI,CAAAA,CAAkB,OAAOD,CAC3BE,CAAAA,CAAAA,CAqBJ,GAlBED,CAAAA,GAAoB,UACpBA,CAAoB,GAAA,QAAA,EACpBA,CAAoB,GAAA,SAAA,CAEpBC,EAAWD,CACFD,CAAAA,CAAAA,GAAc,IAEnBlI,CAAAA,CAAAA,CAAO,QACToI,GAAAA,CAAAA,CAAW,MAGb,CAAA,CAAA,OAAA,CAAQ,KACN,WACA,CAAA,CAAA,WAAA,EAAcD,CAAe,CAAA,gBAAA,EAAmBD,CAAS,CACzDlI,UAAAA,CAAAA,CAAAA,CAAAA,CAAO,IACT,CAAA,CAGE,CAACoI,CACH,CAAA,SAGF,IAAMC,CAAAA,CAAeR,EAAa,CAAA,CAChC,OAAA9J,CAAAA,CAAAA,CACA,OAAQ,CACN,WAAA,CAAaiC,CAAO,CAAA,qBAAqB,IAAIpR,CAAK,CAAA,CAClD,KACEoR,CAAAA,CAAAA,CAAO,iBAAiB,CAAIpR,GAAAA,CAAK,CAAKoR,EAAAA,CAAAA,CAAO,aAAa,CAAA,GAAIpR,CAAK,CAAA,CAErE,KAAMwZ,CAAa,GAAA,MAAA,CAAS,QAAWA,CAAAA,CACzC,EACA,KAAA9E,CAAAA,CACF,CAAC,CAAA,CAED+E,EAAa,KAAQH,CAAAA,CAAAA,CAGjBE,CAAa,GAAA,MAAA,GACfC,CAAa,CAAA,IAAA,CAAOD,CAGtB/B,CAAAA,CAAAA,CAAAA,CAAS,aAAeP,CACtBO,CAAAA,CAAAA,CAAS,YACTgC,CAAAA,CAAAA,CAAa,YACf,CAEA7B,CAAAA,CAAAA,CAAY,IAAK6B,CAAAA,CAAY,EAC/B,CAEA,OAAAhC,CAAWb,CAAAA,CAAAA,CAAiB,CAC1B,KAAOgB,CAAAA,CAAAA,CACP,MAAQH,CAAAA,CACV,CAAC,CAEMA,CAAAA,CACT,CAEMwF,CAAAA,EAAAA,CAAa,CAAC,CAClB,OAAA,CAAA9N,CACA,CAAA,MAAA,CAAAiC,EACA,KAAAsD,CAAAA,CACF,CAIuB,GAAA,CACrB,IAAI+C,CAAAA,CAAWc,EAAa,CAAA,CAAE,OAAAnH,CAAO,CAAC,CAElCwG,CAAAA,CAAAA,CAAsC,EACpCa,CAAAA,CAAAA,CAAalB,EAAc,CAAA,CAAE,OAAAnG,CAAO,CAAC,CAErCsH,CAAAA,CAAAA,CAAqBtH,CAAO,CAAA,KAAA,CAElC,IAAWuH,IAAAA,CAAAA,IAAqBD,EAAoB,CAClD,IAAIE,CAAsBd,CAAAA,CAAAA,CAAiB,CACzC,OAAA3I,CAAAA,CAAAA,CACA,MAAQwJ,CAAAA,CAAAA,CACR,MAAAjE,CACF,CAAC,CAED+C,CAAAA,CAAAA,CAAS,YAAeP,CAAAA,CAAAA,CACtBO,CAAS,CAAA,YAAA,CACTmB,EAAoB,YACtB,CAAA,CAGIxH,CAAO,CAAA,aAAA,EAAiB,SAAUuH,CAapCC,GAAAA,CAAAA,CAAsB,CACpB,KAAA,CAAO,CAbsC,CAC7C,UAAA,CAAY,CACV,CAACxH,CAAO,CAAA,aAAA,CAAc,YAAY,EAAG,CACnC,KAAO4F,CAAAA,EAAAA,CACL2B,CAAkB,CAAA,IAAA,CAClBvH,EAAO,aAAc,CAAA,OACvB,CACA,CAAA,IAAA,CAAM,QACR,CACF,CAAA,CACA,IAAM,CAAA,QACR,CAEiCwH,CAAAA,CAAmB,CAClD,CAAA,eAAA,CAAiB,KACnB,CAOAA,CAAAA,CAAAA,CAAAA,CAAoB,eAAoB,GAAA,IAAA,EACxCA,EAAoB,KAEpBhB,CAAAA,CAAAA,CAAcA,CAAY,CAAA,MAAA,CAAOgB,EAAoB,KAAK,CAAA,CAE1DhB,CAAY,CAAA,IAAA,CAAKgB,CAAmB,EAExC,CAYA,GAVIxH,EAAO,QACTwG,EAAAA,CAAAA,CAAY,IAAK,CAAA,CAAE,KAAM,MAAO,CAAC,CAGnCH,CAAAA,CAAAA,CAAWb,EAAiB,CAC1B,KAAA,CAAOgB,CACP,CAAA,mBAAA,CAAqB,IACrB,CAAA,MAAA,CAAQH,CACV,CAAC,EAEGgB,CAAe,GAAA,QAAA,CAAU,CAE3B,IAAMO,EAAiBC,EAAa,CAAA,CAClC,OAAA9J,CAAAA,CAAAA,CACA,OAAQ,CACN,GAAGiC,CACH,CAAA,IAAA,CAAM,QACR,CACA,CAAA,KAAA,CAAAsD,CACF,CAAC,EAED+C,CAAS,CAAA,YAAA,CAAeP,CACtBO,CAAAA,CAAAA,CAAS,aACTuB,CAAe,CAAA,YACjB,CAEIA,CAAAA,CAAAA,CAAe,aACjBvB,CAAW,CAAA,CACT,KAAO,CAAA,CAACA,CAAUuB,CAAAA,CAAc,CAChC,CAAA,eAAA,CAAiB,KACnB,CAEJ,EAAA,CAEA,OAAOvB,CACT,EAEMiC,EAAW,CAAA,CAAC,CAChB,OAAA,CAAAvK,EACA,MAAAiC,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAIuB,GAAA,CACrB,IAAM+C,CAAAA,CAA4B,EAMlC,CAAA,GAFAA,CAAS,CAAA,IAAA,CAAO,UAAUrG,CAAO,CAAA,IAAI,CAEjC,CAAA,CAACsD,EAAM,wBAAyB,CAAA,GAAA,CAAItD,CAAO,CAAA,IAAI,CAAG,CAAA,CACpD,IAAMuI,CAAAA,CAAYxK,EAAQ,UAAyBiC,CAAAA,CAAAA,CAAO,IAAI,CAAA,CACxD2H,EAAcjB,CAAiB,CAAA,CACnC,OAAA3I,CAAAA,CAAAA,CACA,OAAQwK,CACR,CAAA,KAAA,CAAO,CACL,GAAGjF,CACH,CAAA,IAAA,CAAMtD,CAAO,CAAA,IACf,CACF,CAAC,CAAA,CACDqG,CAAS,CAAA,YAAA,CAAeP,EACtBO,CAAS,CAAA,YAAA,CACTsB,CAAY,CAAA,YACd,EACF,CAEA,OAAOtB,CACT,CAAA,CAEMmC,EAAoB,CAAA,CAAC,CACzB,OAAA,CAAAzK,EACA,QAAAsI,CAAAA,CAAAA,CACA,MAAArG,CAAAA,CAAAA,CACA,MAAAsD,CACF,CAAA,GAKuB,CAChB+C,CAAAA,GACHA,EAAWc,EAAa,CAAA,CAAE,MAAAnH,CAAAA,CAAO,CAAC,CAAA,CAAA,CAGpC,IAAMyI,CAAAA,CAAgC,EAEtCnC,CAAAA,EAAAA,CAAgB,CACd,QAAA,CAAUmC,EACV,MAAAzI,CAAAA,CACF,CAAC,CAAA,CAEGyI,EAAa,OAAY,GAAA,IAAA,EAG3B,OAAOA,CAAAA,CAAa,OAGtB,CAAA,IAAMjC,CAAsC,CAAA,CAC1CqB,GAAa,CACX,OAAA,CAAA9J,CACA,CAAA,QAAA,CAAU0K,EACV,MAAAzI,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAAC,CACD,CAAA,CACE,IAAM,CAAA,MACR,CACF,CAEA,CAAA,OAAA+C,CAAWb,CAAAA,CAAAA,CAAiB,CAC1B,KAAOgB,CAAAA,CAAAA,CACP,MAAQH,CAAAA,CACV,CAAC,CAEMA,CAAAA,CACT,CAEMqC,CAAAA,EAAAA,CAAY,CAAC,CACjB,OAAA,CAAA3K,CACA,CAAA,MAAA,CAAAiC,CACA,CAAA,KAAA,CAAAsD,CACF,CAAA,GAIuB,CACrB,IAAM+C,CAAAA,CAAWc,EAAa,CAAA,CAAE,OAAAnH,CAAO,CAAC,CAExCsG,CAAAA,EAAAA,CAAgB,CACd,QAAAD,CAAAA,CAAAA,CACA,MAAArG,CAAAA,CACF,CAAC,CAAA,CAED,IAAMzO,CAAAA,CAAO4U,GAAc,CAAE,MAAA,CAAAnG,CAAO,CAAC,EAErC,OAAKzO,CAAAA,CAIAyO,CAAO,CAAA,QAAA,CAYLwI,GAAkB,CACvB,OAAA,CAAAzK,CACA,CAAA,QAAA,CAAAsI,CACA,CAAA,MAAA,CAAQ,CACN,GAAGrG,EACH,IAAAzO,CAAAA,CACF,CACA,CAAA,KAAA,CAAA+R,CACF,CAAC,CAAA,CAnBQuE,EAAa,CAAA,CAClB,QAAA9J,CACA,CAAA,QAAA,CAAAsI,CACA,CAAA,MAAA,CAAQ,CACN,GAAGrG,CACH,CAAA,IAAA,CAAAzO,CACF,CACA,CAAA,KAAA,CAAA+R,CACF,CAAC,EAZM+C,CAwBX,CAAA,CAEMwB,EAAe,CAAA,CAAC,CACpB,OAAA9J,CAAAA,CAAAA,CACA,QAAAsI,CAAAA,CAAAA,CACA,MAAArG,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,IAKuB,CAUrB,OATK+C,CACHA,GAAAA,CAAAA,CAAWc,GAAa,CAAE,MAAA,CAAAnH,CAAO,CAAC,EAElCsG,EAAgB,CAAA,CACd,QAAAD,CAAAA,CAAAA,CACA,MAAArG,CAAAA,CACF,CAAC,CAAA,CAAA,CAGKA,EAAO,IAAM,EACnB,KAAK,OAAA,CACH,OAAOuG,EAAW,CAAA,CAChB,OAAAxI,CAAAA,CAAAA,CACA,SAAAsI,CACA,CAAA,MAAA,CAAArG,CACA,CAAA,KAAA,CAAAsD,CACF,CAAC,CACH,CAAA,KAAK,UACH,OAAOsD,EAAAA,CAAa,CAElB,QAAAP,CAAAA,CAGF,CAAC,CACH,CAAA,KAAK,UACL,KAAK,QAAA,CACH,OAAOQ,EAAAA,CAAY,CAEjB,QAAAR,CAAAA,CAAAA,CACA,OAAArG,CAEF,CAAC,EACH,KAAK,QAAA,CACH,OAAO8G,EAAAA,CAAY,CACjB,OAAA,CAAA/I,CACA,CAAA,QAAA,CAAAsI,EACA,MAAArG,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAAC,CACH,CAAA,KAAK,QACH,CAAA,OAAO4D,GAAY,CAEjB,QAAA,CAAAb,CAGF,CAAC,CAAA,CACH,QAEE,OAAOsC,GAAa,CAElB,QAAA,CAAAtC,EACA,MAAArG,CAAAA,CAEF,CAAC,CACL,CACF,CAAA,CAEM2I,GAAe,CAAC,CACpB,QAAAtC,CAAAA,CAAAA,CACA,OAAArG,CACF,CAAA,IAMOqG,CACHA,GAAAA,CAAAA,CAAWc,GAAa,CAAE,MAAA,CAAAnH,CAAO,CAAC,CAGpCqG,CAAAA,CAAAA,CAAAA,CAAS,IAAO,CAAA,SAAA,CAEhBC,GAAgB,CACd,QAAA,CAAAD,CACA,CAAA,MAAA,CAAArG,CACF,CAAC,CAAA,CAEMqG,CAGIK,CAAAA,CAAAA,CAAAA,CAAmB,CAAC,CAC/B,OAAA,CAAA3I,CACA,CAAA,MAAA,CAAAiC,CACA,CAAA,KAAA,CAAAsD,CACF,CAAA,IAKOA,IACHA,CAAQ,CAAA,CACN,wBAA0B,CAAA,IAAI,GAChC,CAGEA,CAAAA,CAAAA,CAAAA,CAAM,IACRA,EAAAA,CAAAA,CAAM,yBAAyB,GAAIA,CAAAA,CAAAA,CAAM,IAAI,CAAA,CAG3C,MAAUtD,GAAAA,CAAAA,CACLsI,EAAS,CAAA,CACd,QAAAvK,CACA,CAAA,MAAA,CAAAiC,CACA,CAAA,KAAA,CAAAsD,CACF,CAAC,CAAA,CAGCtD,CAAO,CAAA,IAAA,CACFiI,GAAU,CACf,OAAA,CAAAlK,CACA,CAAA,MAAA,CAAQiC,CACR,CAAA,KAAA,CAAAsD,CACF,CAAC,EAGCtD,CAAO,CAAA,KAAA,CACFoH,EAAW,CAAA,CAChB,QAAArJ,CACA,CAAA,MAAA,CAAQiC,CACR,CAAA,KAAA,CAAAsD,CACF,CAAC,CAAA,CAGCtD,CAAO,CAAA,KAAA,CACF4L,GAAW,CAChB,OAAA,CAAA7N,CACA,CAAA,MAAA,CAAQiC,EACR,KAAAsD,CAAAA,CACF,CAAC,CAAA,CAGCtD,EAAO,KACF6L,CAAAA,EAAAA,CAAW,CAChB,OAAA,CAAA9N,EACA,MAAQiC,CAAAA,CAAAA,CACR,KAAAsD,CAAAA,CACF,CAAC,CAAA,CAICtD,CAAO,CAAA,IAAA,EAAQA,EAAO,UACjB0I,CAAAA,EAAAA,CAAU,CACf,OAAA,CAAA3K,EACA,MAAQiC,CAAAA,CAAAA,CACR,KAAAsD,CAAAA,CACF,CAAC,CAGIqF,CAAAA,EAAAA,CAAa,CAElB,MAAA,CAAA3I,CAEF,CAAC,CAAA,CAAA,CAGU4I,EAAc,CAAA,CAAC,CAC1B,IAAArN,CAAAA,CAAAA,CACA,OAAAwC,CAAAA,CAAAA,CACA,OAAAiC,CACF,CAAA,GAIM,CACCjC,CAAAA,CAAQ,EAAG,CAAA,UAAA,GACdA,CAAQ,CAAA,EAAA,CAAG,WAAa,EAAC,CAAA,CAGtBA,CAAQ,CAAA,EAAA,CAAG,WAAW,OACzBA,GAAAA,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAW,QAAU,EAAC,CAAA,CAGnCA,CAAQ,CAAA,EAAA,CAAG,WAAW,OAAQtC,CAAAA,CAAAA,CAAUF,CAAI,CAAC,EAAImL,CAAiB,CAAA,CAChE,OAAA3I,CAAAA,CAAAA,CACA,OAAAiC,CACA,CAAA,KAAA,CAAO,CACL,IAAA,CAAAzE,EACA,wBAA0B,CAAA,IAAI,GAChC,CACF,CAAC,EACH,CChhCA,CAAA,IAAMsN,GACJxB,CAEAA,EAAAA,CAAAA,GAAe,SACfA,EAAAA,CAAAA,GAAe,WACfA,CAAe,GAAA,QAAA,EACfA,CAAe,GAAA,QAAA,CAGJyB,GAAkB,CAAC,CAC9B,OAAA/K,CAAAA,CAAAA,CACA,IAAAxS,CAAAA,CAAAA,CACA,MAAAyU,CAAAA,CACF,IAIwB,CAItB,GAHyBqF,CACvBtH,CAAAA,CAAAA,CAAQ,OAAO,KAAM,CAAA,UACvB,CACqB,CAAA,IAAA,CAAKxS,CAAI,CAC5B,CAAA,OAAO,KAGT,CAAA,GAAI,MAAUyU,GAAAA,CAAAA,CAAQ,CACpB,IAAMyH,EAAM1J,CAAQ,CAAA,UAAA,CAElBiC,CAAO,CAAA,IAAI,EAEb,GAAI,SAAA,GAAayH,CAAO,EAAA,IAAA,GAAQA,EAAK,CACnC,IAAIc,CAMJ,CAAA,GAJI,OAAQd,CACVc,GAAAA,CAAAA,CAAYd,CAAI,CAAA,MAAA,CAAA,CAGd,CAACc,CAAW,CAAA,CAEd,IAAM1d,CAAAA,CAAUqa,GAAgB,CAAE,OAAA,CAASuC,CAAI,CAAA,OAAQ,CAAC,CACpD5c,CAAAA,CAAAA,EAAS,MACX0d,GAAAA,CAAAA,CAAY1d,CAAQ,CAAA,MAAA,EAExB,CAEA,OAAK0d,EAIEO,EAAgB,CAAA,CACrB,OAAA/K,CAAAA,CAAAA,CACA,KAAAxS,CACA,CAAA,MAAA,CAAQgd,CACV,CAAC,EAPQ,KAQX,CAEA,OAAOO,EAAAA,CAAgB,CACrB,OAAA,CAAA/K,CACA,CAAA,IAAA,CAAAxS,EACA,MAAQkc,CAAAA,CACV,CAAC,CACH,CAEA,IAAWlc,IAAAA,CAAAA,IAAQyU,CAAO,CAAA,UAAA,CAKxB,GAJyBqF,CACvBtH,CAAAA,CAAAA,CAAQ,MAAO,CAAA,KAAA,CAAM,UACvB,CAAA,CAEqB,IAAKxS,CAAAA,CAAI,EAAG,CAC/B,IAAM8N,CAAW2G,CAAAA,CAAAA,CAAO,WAAWzU,CAAI,CAAA,CAEvC,GAAI,OAAO8N,GAAa,SAAa,EAAA,EAAE,MAAUA,GAAAA,CAAAA,CAAAA,CAAW,CAC1D,IAAMgO,CAAalB,CAAAA,EAAAA,CAAc,CAAE,MAAQ9M,CAAAA,CAAS,CAAC,CAAA,CAGrD,GAAIwP,EAAiBxB,CAAAA,CAAU,CAC7B,CAAA,OAAO9b,CAEX,CACF,CAGF,IAAWyd,IAAAA,CAAAA,IAAShJ,CAAO,CAAA,KAAA,EAAS,EAAC,CAAG,CACtC,IAAMiJ,CAAAA,CAAaH,EAAgB,CAAA,CACjC,QAAA/K,CACA,CAAA,IAAA,CAAAxS,CACA,CAAA,MAAA,CAAQyd,CACV,CAAC,CAAA,CACD,GAAIC,CAAAA,CACF,OAAOA,CAEX,CAEA,OAAO,MACT,CCtFA,CAAA,IAAMC,EAAsB,CAAA,CAAC,CAC3B,WAAAC,CAAAA,CAAAA,CACA,SAAAlL,CAAAA,CACF,IAGM,CACAA,CAAAA,CAAU,UAAe,GAAA,MAAA,GAC3BkL,CAAY,CAAA,UAAA,CAAalL,CAAU,CAAA,UAAA,CAAA,CAGjCA,EAAU,WACZkL,GAAAA,CAAAA,CAAY,WAAclL,CAAAA,CAAAA,CAAU,aAGlCA,CAAU,CAAA,OAAA,GACZkL,CAAY,CAAA,OAAA,CAAUlL,EAAU,OAG9BA,CAAAA,CAAAA,CAAAA,CAAU,IAAM,EAAA,MAAA,GAClBkL,EAAY,IAAOlL,CAAAA,CAAAA,CAAU,IAEjC,EAAA,CAAA,CAEMmL,GAAkB,CAAC,CACvB,MAAAhF,CAAAA,CAAAA,CACA,UAAAnG,CACA,CAAA,IAAA,CAAAtG,CACF,CAAA,GAE0B,CACxB,IAAMwR,CAAAA,CAAkC,CACtC,EAAA,CAAIlL,CAAU,CAAA,EAAA,CACd,MAAAmG,CAAAA,CAAAA,CACA,KAAAzM,CACF,CAAA,CAEA,OAAAuR,EAAAA,CAAoB,CAClB,WAAAC,CAAAA,CAAAA,CACA,SAAAlL,CAAAA,CACF,CAAC,CAEMkL,CAAAA,CACT,CAEME,CAAAA,EAAAA,CAAyB,CAAC,CAC9B,OAAAtL,CAAAA,CAAAA,CACA,OAAAqG,CACA,CAAA,SAAA,CAAAnG,CACA,CAAA,IAAA,CAAAtG,EACA,kBAAA2R,CAAAA,CACF,CAI0B,GAAA,CACxB,IAAMH,CAAcC,CAAAA,EAAAA,CAAgB,CAAE,MAAA,CAAAhF,CAAQ,CAAA,SAAA,CAAAnG,CAAW,CAAA,IAAA,CAAAtG,CAAK,CAAC,CAAA,CAM/D,GAJIsG,CAAAA,CAAU,aACZkL,CAAY,CAAA,UAAA,CAAalL,CAAU,CAAA,UAAA,CAAA,CAGjCA,EAAU,WAAa,CAAA,CACzB,IAAM0L,CAAAA,CACJ,MAAU1L,GAAAA,CAAAA,CAAU,WAChBF,CAAAA,CAAAA,CAAQ,WAA8BE,CAAU,CAAA,WAAA,CAAY,IAAI,CAAA,CAChEA,EAAU,WACVpT,CAAAA,CAAAA,CAAUqa,EAAgB,CAAA,CAC9B,QAASyE,CAAY,CAAA,OACvB,CAAC,CAAA,CACD,GAAI9e,CAAAA,CAAS,CACX,IAAMoe,EAAaH,EAAgB,CAAA,CACjC,OAAA/K,CAAAA,CAAAA,CACA,KAAM,EACN,CAAA,MAAA,CACElT,CAAQ,CAAA,MAAA,EAAU,SAAUA,CAAQ,CAAA,MAAA,CAChC,CACE,KAAA,CAAO,CAAC,CAAE,GAAGA,CAAAA,CAAQ,MAAO,CAAC,CAAA,CAC7B,WAAa8e,CAAAA,CAAAA,CAAY,WAC3B,CACA,CAAA,CACE,WAAaA,CAAAA,CAAAA,CAAY,YACzB,GAAG9e,CAAAA,CAAQ,MACb,CACR,CAAC,CAAA,CAEDse,CAAY,CAAA,IAAA,CAAO,CACjB,SAAWte,CAAAA,CAAAA,CAAQ,SACnB,CAAA,MAAA,CAAQ6b,EAAiB,CACvB,OAAA,CAAA3I,CACA,CAAA,MAAA,CACE,SAAUE,CAAU,CAAA,WAAA,CAChB,CACE,KAAA,CAAO,CAAC,CAAE,GAAGA,CAAU,CAAA,WAAY,CAAC,CACpC,CAAA,WAAA,CAAa0L,CAAY,CAAA,WAC3B,EACA9e,CAAQ,CAAA,MAAA,EAAU,MAAUA,GAAAA,CAAAA,CAAQ,OAClC,CACE,KAAA,CAAO,CAAC,CAAE,GAAGA,CAAAA,CAAQ,MAAO,CAAC,EAC7B,WAAa8e,CAAAA,CAAAA,CAAY,WAC3B,CAAA,CACA,CACE,WAAaA,CAAAA,CAAAA,CAAY,WACzB,CAAA,GAAG9e,EAAQ,MACb,CAAA,CACR,KAAO,CAAA,MACT,CAAC,CACH,CAEIoe,CAAAA,CAAAA,GACFE,EAAY,IAAK,CAAA,UAAA,CAAaF,CAG5BU,CAAAA,CAAAA,CAAAA,CAAY,WACdR,CAAY,CAAA,IAAA,CAAK,QAAWQ,CAAAA,CAAAA,CAAY,UAGtC9e,CAAQ,CAAA,IAAA,GACVse,CAAY,CAAA,IAAA,CAAK,IAAOte,CAAAA,CAAAA,CAAQ,IAEpC,EAAA,CACF,CAEA,IAAWU,IAAAA,CAAAA,IAAQ0S,CAAU,CAAA,SAAA,CAAW,CACjCkL,CAAY,CAAA,SAAA,GACfA,CAAY,CAAA,SAAA,CAAY,EAG1B,CAAA,CAAA,IAAM5e,CAAW0T,CAAAA,CAAAA,CAAU,SAAU1S,CAAAA,CAAI,CACnCqe,CAAAA,CAAAA,CACJ,SAAUrf,CACNwT,CAAAA,CAAAA,CAAQ,UAA2BxT,CAAAA,CAAAA,CAAS,IAAI,CAChDA,CAAAA,CAAAA,CACAM,CAAUqa,CAAAA,EAAAA,CAAgB,CAC9B,OAAS0E,CAAAA,CAAAA,CAAe,OAC1B,CAAC,CAEG/e,CAAAA,CAAAA,CACFse,CAAY,CAAA,SAAA,CAAU5d,CAAI,CAAI,CAAA,CAC5B,SAAWV,CAAAA,CAAAA,CAAQ,UACnB,MAAQ6b,CAAAA,CAAAA,CAAiB,CACvB,OAAA,CAAA3I,EACA,MAAQ,CAAA,CACN,WAAa6L,CAAAA,CAAAA,CAAe,WAC5B,CAAA,GAAG3E,EAAgB,CAAA,CAAE,QAAApa,CAAQ,CAAC,CAChC,CAAA,CACA,MAAO,MACT,CAAC,CACH,CAAA,CAEAse,EAAY,SAAU5d,CAAAA,CAAI,CAAI,CAAA,CAC5B,MAAQ,CAAA,CACN,WAAaqe,CAAAA,CAAAA,CAAe,YAG5B,IAAMre,CAAAA,CAAAA,GAAS,KAAQ,CAAA,MAAA,CAAS,SAClC,CACF,EAEJ,CAEA,GAAI0S,EAAU,QAAU,CAAA,CACtB,IAAM4L,CAAAA,CAAkD,EAExD,CAAA,IAAA,IAAWC,CAA6B7L,IAAAA,CAAAA,CAAU,SAChD,IAAW1S,IAAAA,CAAAA,IAAQue,CAA2B,CAAA,CAC5C,IAAMC,CAAuBT,CAAAA,CAAAA,CAAmB,GAAI/d,CAAAA,CAAI,EAEnDwe,CAILF,EAAAA,CAAAA,CAAsB,IAAKE,CAAAA,CAAoB,EACjD,CAGEF,CAAsB,CAAA,MAAA,GACxBV,EAAY,QAAWU,CAAAA,CAAAA,EAE3B,CAKA,OAAOV,CACT,CAEac,CAAAA,EAAAA,CAAiB,CAAC,CAC7B,QAAAlM,CACA,CAAA,MAAA,CAAAqG,CACA,CAAA,SAAA,CAAAnG,CACA,CAAA,YAAA,CAAAoG,CACA,CAAA,IAAA,CAAA1M,EACA,kBAAA2R,CAAAA,CACF,CAUM,GAAA,CACJnF,GAAwB,CACtB,OAAA,CAAApG,CACA,CAAA,EAAA,CAAIE,EAAU,WACd,CAAA,MAAA,CAAAmG,CACA,CAAA,YAAA,CAAAC,CACA,CAAA,IAAA,CAAA1M,CACF,CAAC,EAEIoG,CAAQ,CAAA,EAAA,CAAG,KACdA,GAAAA,CAAAA,CAAQ,GAAG,KAAQ,CAAA,EAGhBA,CAAAA,CAAAA,CAAAA,CAAQ,GAAG,KAAMpG,CAAAA,CAAI,CACxBoG,GAAAA,CAAAA,CAAQ,GAAG,KAAMpG,CAAAA,CAAI,CAAI,CAAA,IAGvBsG,CAAU,CAAA,OAAA,GACZF,CAAQ,CAAA,EAAA,CAAG,QAAU,CAAC,GAAIA,CAAQ,CAAA,EAAA,CAAG,SAAW,EAAC,CAAI,GAAGE,CAAAA,CAAU,OAAO,CAAA,CAAA,CAG3EA,CAAU,CAAA,EAAA,CAAKsG,GAAc,CAC3B,OAAA,CAAAxG,CACA,CAAA,EAAA,CAAIE,EAAU,WACd,CAAA,MAAA,CAAAmG,CACA,CAAA,IAAA,CAAAzM,CACF,CAAC,CAAA,CAEDoG,CAAQ,CAAA,EAAA,CAAG,KAAMpG,CAAAA,CAAI,CAAEyM,CAAAA,CAAM,EAAIiF,EAAuB,CAAA,CACtD,OAAAtL,CAAAA,CAAAA,CACA,OAAAqG,CACA,CAAA,SAAA,CAAAnG,CACA,CAAA,IAAA,CAAAtG,EACA,kBAAA2R,CAAAA,CACF,CAAC,EACH,CCrPA,CAAA,IAAMwC,EACJzB,CAAAA,CAAAA,EACwB,CACxB,OAAQA,CAAAA,EAEN,KAAK,QACH,OAAO,MAAA,CACT,QACE,MACJ,CACF,CAKMH,CAAAA,EAAAA,CAAkBQ,CAAuD,EAAA,CAC7E,OAAQA,CAAO,EAGb,KAAK,YAAA,CACL,KAAK,MACH,CAAA,OAAO,KACT,CAAA,QACE,OAAO,MACX,CACF,CAKMN,CAAAA,EAAAA,CACJC,GAC0C,CAC1C,OAAQA,CAAK,EACX,KAAK,QAAA,CACL,KAAK,MAAA,CACH,OAAO,QACT,CAAA,KAAK,QACL,CAAA,KAAK,QACH,OAAO,MACX,CACF,CAAA,CAEaC,GAA0B,CAAC,CACtC,OAAAvM,CAAAA,CAAAA,CACA,UAAAnN,CAAAA,CACF,CAGuC,GAAA,CACrC,GAAI,CAACA,CAAAA,EAAc,CAAC,MAAA,CAAO,KAAKA,CAAU,CAAA,CAAE,MAC1C,CAAA,OAGF,IAAM2Z,CAAwC,CAAA,EAE9C,CAAA,IAAA,IAAWC,CAAwB5Z,IAAAA,CAAAA,CAAY,CAC7C,IAAMC,EACJ,MAAU2Z,GAAAA,CAAAA,CACNzM,CAAQ,CAAA,UAAA,CAA4ByM,EAAqB,IAAI,CAAA,CAC7DA,CAEDD,CAAAA,CAAAA,CAAiB1Z,EAAU,EAAE,CAAA,GAChC0Z,CAAiB1Z,CAAAA,CAAAA,CAAU,EAAE,CAAA,CAAI,EAAC,CAAA,CAGpC0Z,EAAiB1Z,CAAU,CAAA,EAAE,CAAGA,CAAAA,CAAAA,CAAU,IAAI,CAAI4Z,CAAAA,EAAAA,CAAuB,CACvE,OAAA,CAAA1M,EACA,SAAAlN,CAAAA,CACF,CAAC,EACH,CAEA,OAAO0Z,CACT,CAAA,CAEME,GAAyB,CAAC,CAC9B,OAAA1M,CAAAA,CAAAA,CACA,UAAAlN,CACF,CAAA,GAG0B,CAExB,IAAImP,EAASnP,CAAU,CAAA,MAAA,CAEvB,GAAI,CAACmP,CAAQ,CAAA,CACX,IAAMnV,CAAAA,CAAUqa,GAAgB,CAC9B,OAAA,CAASrU,CAAU,CAAA,OACrB,CAAC,CACGhG,CAAAA,CAAAA,GACFmV,CAASnV,CAAAA,CAAAA,CAAQ,QAErB,CAEA,IAAMke,CACJ/I,CAAAA,CAAAA,EAAU,MAAUA,GAAAA,CAAAA,CAChB,CACE,KAAA,CAAO,CAAC,CAAE,GAAGA,CAAO,CAAC,EACrB,UAAYnP,CAAAA,CAAAA,CAAU,UACtB,CAAA,WAAA,CAAaA,EAAU,WACzB,CAAA,CACA,CACE,UAAA,CAAYA,EAAU,UACtB,CAAA,WAAA,CAAaA,CAAU,CAAA,WAAA,CACvB,GAAGmP,CACL,CAAA,CAEAiJ,CAAaH,CAAAA,EAAAA,CAAgB,CACjC,OAAA/K,CAAAA,CAAAA,CACA,IAAMlN,CAAAA,CAAAA,CAAU,KAChB,MAAQkY,CAAAA,CACV,CAAC,CAAA,CAEK2B,CAAQ7Z,CAAAA,CAAAA,CAAU,KAASuZ,EAAAA,EAAAA,CAAavZ,EAAU,EAAE,CAAA,CACpDkb,CACJlb,CAAAA,CAAAA,CAAU,UAAY,MAAYA,CAAAA,CAAAA,CAAU,OAAUqZ,CAAAA,EAAAA,CAAeQ,CAAK,CAMtEC,CAAAA,CAAAA,CAAkC,CACtC,aAAA,CALA9Z,CAAU,CAAA,aAAA,GAAkB,MACxBA,CAAAA,CAAAA,CAAU,cACVib,EAAqBjb,CAAAA,CAAAA,CAAU,EAAE,CAAA,CAIrC,QAAAkb,CACA,CAAA,QAAA,CAAUlb,CAAU,CAAA,EAAA,CACpB,KAAMA,CAAU,CAAA,IAAA,CAChB,MAAQ6V,CAAAA,CAAAA,CAAiB,CACvB,OAAA,CAAA3I,CACA,CAAA,MAAA,CAAQgL,EACR,KAAO,CAAA,MACT,CAAC,CAAA,CACD,MAAA2B,CACF,CAAA,CAEA,OAAI7Z,CAAAA,CAAU,aACZ8Z,CAAY,CAAA,UAAA,CAAa9Z,CAAU,CAAA,UAAA,CAAA,CAGjCA,CAAU,CAAA,WAAA,GACZ8Z,CAAY,CAAA,WAAA,CAAc9Z,EAAU,WAGlCoY,CAAAA,CAAAA,CAAAA,GACF0B,CAAY,CAAA,UAAA,CAAa1B,GAGvBpY,CAAU,CAAA,QAAA,GACZ8Z,CAAY,CAAA,QAAA,CAAW9Z,EAAU,QAG5B8Z,CAAAA,CAAAA,CACT,CAEaqB,CAAAA,EAAAA,CAAiB,CAAC,CAC7B,IAAAzQ,CAAAA,CAAAA,CACA,QAAAwC,CACA,CAAA,SAAA,CAAAlN,CACF,CAAA,GAIM,CACCkN,CAAQ,CAAA,EAAA,CAAG,UACdA,GAAAA,CAAAA,CAAQ,GAAG,UAAa,CAAA,EAGrBA,CAAAA,CAAAA,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAW,UACzBA,GAAAA,CAAAA,CAAQ,GAAG,UAAW,CAAA,UAAA,CAAa,EAAC,CAAA,CAGtCA,EAAQ,EAAG,CAAA,UAAA,CAAW,UAAWtC,CAAAA,CAAAA,CAAUF,CAAI,CAAC,CAAA,CAAIkP,EAAuB,CAAA,CACzE,OAAA1M,CAAAA,CAAAA,CACA,SAAAlN,CAAAA,CACF,CAAC,EACH,CAAA,CCtLA,IAAMob,EAAAA,CAA6B,CAAC,CAClC,OAAA,CAAAlO,CACA,CAAA,WAAA,CAAA4L,CACF,CAG4B,GAAA,CAE1B,IAAM9e,CAAAA,CAAUqa,GAAgB,CAC9B,OAAA,CAASyE,CAAY,CAAA,OACvB,CAAC,CACK3J,CAAAA,CAAAA,CAASnV,CAAUA,CAAAA,CAAAA,CAAQ,OAAS,MAEpCke,CAAAA,CAAAA,CAA4B,CAChC,WAAA,CAAaY,EAAY,WACzB,CAAA,GAAG3J,CACL,CAAA,CAEMkM,CAAsC,CAAA,CAC1C,MAAQxF,CAAAA,CAAAA,CAAiB,CACvB,OAAA3I,CAAAA,CAAAA,CACA,MAAQgL,CAAAA,CAAAA,CACR,MAAO,MACT,CAAC,CACH,CAAA,CAEA,OAAIY,CAAY,CAAA,WAAA,GACduC,CAAc,CAAA,WAAA,CAAcvC,CAAY,CAAA,WAAA,CAAA,CAGtCA,CAAY,CAAA,QAAA,GACduC,EAAc,QAAWvC,CAAAA,CAAAA,CAAY,QAGhCuC,CAAAA,CAAAA,CACT,EAEaC,EAAmB,CAAA,CAAC,CAC/B,IAAA,CAAA5Q,EACA,OAAAwC,CAAAA,CAAAA,CACA,WAAA4L,CAAAA,CACF,CAIM,GAAA,CACC5L,CAAQ,CAAA,EAAA,CAAG,aACdA,CAAQ,CAAA,EAAA,CAAG,UAAa,CAAA,IAGrBA,CAAQ,CAAA,EAAA,CAAG,UAAW,CAAA,aAAA,GACzBA,EAAQ,EAAG,CAAA,UAAA,CAAW,aAAgB,CAAA,EAGxCA,CAAAA,CAAAA,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAW,cAActC,CAAUF,CAAAA,CAAI,CAAC,CAAA,CACjD0Q,GAA2B,CACzB,OAAA,CAAAlO,CACA,CAAA,WAAA,CAAA4L,CACF,CAAC,EACL,CC9DO,CAAA,IAAMiB,EAAe,CAAA,CAAC,CAAE,OAAA,CAAA7M,CAAQ,CAA+B,GAAA,CACpE,GAAIA,CAAAA,CAAQ,KAAK,OAAS,CAAA,CACxBA,CAAQ,CAAA,EAAA,CAAG,QAAUA,CAAQ,CAAA,IAAA,CAAK,OAClC,CAAA,MACF,CAEA,GAAI,OAAOA,CAAAA,CAAQ,OAAO,KAAM,CAAA,IAAA,EAAS,QAAU,CAAA,CACjD,IAAMkB,CAAMjE,CAAAA,EAAAA,CAAS+C,CAAQ,CAAA,MAAA,CAAO,MAAM,IAAI,CAAA,CAC9CA,CAAQ,CAAA,EAAA,CAAG,OAAU,CAAA,CACnB,CACE,GAAA,CAAK,GAAGkB,CAAI,CAAA,QAAA,CAAW,CAAGA,EAAAA,CAAAA,CAAI,QAAQ,CAAQ,GAAA,CAAA,CAAA,EAAE,CAAGA,EAAAA,CAAAA,CAAI,IAAI,CAAGA,EAAAA,CAAAA,CAAI,IAAO,CAAA,CAAA,CAAA,EAAIA,EAAI,IAAI,CAAA,CAAA,CAAK,EAAE,CAAA,CAC9F,CACF,EACF,CAEKlB,CAAQ,CAAA,EAAA,CAAG,UACdA,CAAQ,CAAA,EAAA,CAAG,OAAU,CAAA,CACnB,CACE,GAAK,CAAA,GACP,CACF,CAAA,EAEJ,CCRO,CAAA,IAAMqO,EAAerO,CAAAA,CAAAA,EAAuC,CACjE,IAAMsG,CAAAA,CAAe,IAAI,GAAA,CACnBiF,EAAqB,IAAI,GAAA,CAEzBlG,CAAiBK,CAAAA,EAAAA,CAAc1F,EAAQ,MAAO,CAAA,KAAA,CAAM,OAAO,CAAA,CAC3DsF,CAAiBI,CAAAA,EAAAA,CAAc1F,CAAQ,CAAA,MAAA,CAAO,MAAM,OAAO,CAAA,CAE3DiN,CAAmB,CAAA,CAACzP,EAAcyE,CACtCmD,GAAAA,EAAAA,CAAc,CACZ,IAAA,CAAA5H,EACA,cAAA6H,CAAAA,CAAAA,CACA,cAAAC,CAAAA,CAAAA,CACA,MAAArD,CAAAA,CACF,CAAC,CAAA,CAGH,GAAIjC,CAAQ,CAAA,IAAA,CAAK,UAAY,CAAA,CAC3B,QAAWxS,CAAQwS,IAAAA,CAAAA,CAAQ,IAAK,CAAA,UAAA,CAAW,gBAAiB,CAC1D,IAAMsO,CACJtO,CAAAA,CAAAA,CAAQ,KAAK,UAAW,CAAA,eAAA,CAAgBxS,CAAI,CAAA,CACxCwe,EACJ,MAAUsC,GAAAA,CAAAA,CACNtO,CAAQ,CAAA,UAAA,CAAiCsO,EAAoB,IAAI,CAAA,CACjEA,CACN/C,CAAAA,CAAAA,CAAmB,IAAI/d,CAAMwe,CAAAA,CAAoB,EACnD,CAEA,IAAWxe,IAAAA,CAAAA,IAAQwS,CAAQ,CAAA,IAAA,CAAK,WAAW,UAAY,CAAA,CACrD,IAAMxC,CAAAA,CAAO,2BAA2BhQ,CAAI,CAAA,CAAA,CACtCif,CAAuBzM,CAAAA,CAAAA,CAAQ,KAAK,UAAW,CAAA,UAAA,CAAWxS,CAAI,CAAA,CAC9DsF,CACJ,CAAA,MAAA,GAAU2Z,CACNzM,CAAAA,CAAAA,CAAQ,WAA4ByM,CAAqB,CAAA,IAAI,CAC7DA,CAAAA,CAAAA,CAEDQ,EAAiBzP,CAAM1K,CAAAA,CAAS,CAIrCmb,EAAAA,EAAAA,CAAe,CACb,IAAAzQ,CAAAA,CAAAA,CACA,OAAAwC,CAAAA,CAAAA,CACA,SAAAlN,CAAAA,CACF,CAAC,EACH,CAEA,IAAWtF,IAAAA,CAAAA,IAAQwS,CAAQ,CAAA,IAAA,CAAK,WAAW,aAAe,CAAA,CACxD,IAAMxC,CAAAA,CAAO,8BAA8BhQ,CAAI,CAAA,CAAA,CACzC+gB,CACJvO,CAAAA,CAAAA,CAAQ,KAAK,UAAW,CAAA,aAAA,CAAcxS,CAAI,CAAA,CACtCoe,EACJ,MAAU2C,GAAAA,CAAAA,CACNvO,CAAQ,CAAA,UAAA,CAA8BuO,EAAuB,IAAI,CAAA,CACjEA,CAEDtB,CAAAA,CAAAA,CAAiBzP,EAAMoO,CAAW,CAAA,EAIvCwC,EAAiB,CAAA,CACf,IAAA5Q,CAAAA,CAAAA,CACA,OAAAwC,CAAAA,CAAAA,CACA,YAAA4L,CACF,CAAC,EACH,CAEA,QAAWpe,CAAQwS,IAAAA,CAAAA,CAAQ,IAAK,CAAA,UAAA,CAAW,QAAS,CAClD,IAAMxC,CAAO,CAAA,CAAA,qBAAA,EAAwBhQ,CAAI,CAAA,CAAA,CACnCyU,CAASjC,CAAAA,CAAAA,CAAQ,KAAK,UAAW,CAAA,OAAA,CAAQxS,CAAI,CAAA,CAE9Cyf,EAAiBzP,CAAMyE,CAAAA,CAAM,CAIlC4I,EAAAA,EAAAA,CAAY,CACV,IAAArN,CAAAA,CAAAA,CACA,OAAAwC,CAAAA,CAAAA,CACA,MAAAiC,CAAAA,CACF,CAAC,EACH,CACF,CAEA4K,EAAAA,CAAa,CAAE,OAAA,CAAA7M,CAAQ,CAAC,CAAA,CAExB,IAAWpG,IAAAA,CAAAA,IAAQoG,EAAQ,IAAK,CAAA,KAAA,CAAO,CACrC,IAAMkN,CAAWlN,CAAAA,CAAAA,CAAQ,IAAK,CAAA,KAAA,CAAMpG,CAAyB,CAEvDuT,CAAAA,CAAAA,CAAgBD,CAAS,CAAA,IAAA,CAC3B,CACE,GAAGlN,CAAAA,CAAQ,UAA2BkN,CAAAA,CAAAA,CAAS,IAAI,CACnD,CAAA,GAAGA,CACL,CAAA,CACAA,CAEEG,CAAAA,CAAAA,CAQF,CACF,OAAA,CAAArN,EACA,SAAW,CAAA,CACT,WAAamN,CAAAA,CAAAA,CAAc,YAC3B,EAAI,CAAA,EAAA,CACJ,UAAYZ,CAAAA,EAAAA,CAAwB,CAClC,OAAAvM,CAAAA,CAAAA,CACA,UAAYmN,CAAAA,CAAAA,CAAc,UAC5B,CAAC,CACD,CAAA,QAAA,CAAUnN,EAAQ,IAAK,CAAA,QAAA,CACvB,OAASmN,CAAAA,CAAAA,CAAc,QACvB,OAASA,CAAAA,CAAAA,CAAc,OACzB,CAAA,CACA,aAAA7G,CACA,CAAA,IAAA,CAAM1M,CACN,CAAA,kBAAA,CAAA2R,CACF,CAAA,CAEM+B,CAAa,CAAA,CAAA,OAAA,EAAU1T,CAAI,CAE/BuT,OAAAA,CAAAA,CAAAA,CAAAA,CAAc,MACdF,EAAAA,CAAAA,CAAiBK,EAAYH,CAAc,CAAA,MAAM,CAEjDjB,EAAAA,EAAAA,CAAe,CACb,GAAGmB,CAAAA,CACH,MAAQ,CAAA,QAAA,CACR,UAAW,CACT,GAAGA,CAAc,CAAA,SAAA,CACjB,GAAGF,CAAc,CAAA,MAAA,CACjB,UAAYvH,CAAAA,CAAAA,CAAuB,CACjC,MAAQ2G,CAAAA,EAAAA,CAAwB,CAC9B,OAAA,CAAAvM,EACA,UAAYmN,CAAAA,CAAAA,CAAc,MAAO,CAAA,UACnC,CAAC,CAAA,CACD,MAAQE,CAAAA,CAAAA,CAAc,UAAU,UAClC,CAAC,CACH,CACF,CAAC,CAGH,CAAA,IAAME,CAAU,CAAA,CAAA,OAAA,EAAU3T,CAAI,CAC1BuT,IAAAA,CAAAA,CAAAA,CAAAA,CAAc,GAAOF,EAAAA,CAAAA,CAAiBM,CAASJ,CAAAA,CAAAA,CAAc,GAAG,CAAA,EAClEjB,GAAe,CACb,GAAGmB,CACH,CAAA,MAAA,CAAQ,MACR,SAAW,CAAA,CACT,GAAGA,CAAAA,CAAc,UACjB,GAAGF,CAAAA,CAAc,GACjB,CAAA,UAAA,CAAYvH,CAAuB,CAAA,CACjC,MAAQ2G,CAAAA,EAAAA,CAAwB,CAC9B,OAAAvM,CAAAA,CAAAA,CACA,UAAYmN,CAAAA,CAAAA,CAAc,IAAI,UAChC,CAAC,CACD,CAAA,MAAA,CAAQE,EAAc,SAAU,CAAA,UAClC,CAAC,CACH,CACF,CAAC,CAGH,CAAA,IAAMG,EAAW,CAAU5T,OAAAA,EAAAA,CAAI,CAC3BuT,KAAAA,CAAAA,CAAAA,CAAAA,CAAc,MAAQF,CAAiBO,CAAAA,CAAAA,CAAUL,CAAc,CAAA,IAAI,GACrEjB,EAAe,CAAA,CACb,GAAGmB,CAAAA,CACH,MAAQ,CAAA,MAAA,CACR,SAAW,CAAA,CACT,GAAGA,CAAc,CAAA,SAAA,CACjB,GAAGF,CAAAA,CAAc,KACjB,UAAYvH,CAAAA,CAAAA,CAAuB,CACjC,MAAA,CAAQ2G,GAAwB,CAC9B,OAAA,CAAAvM,CACA,CAAA,UAAA,CAAYmN,CAAc,CAAA,IAAA,CAAK,UACjC,CAAC,EACD,MAAQE,CAAAA,CAAAA,CAAc,SAAU,CAAA,UAClC,CAAC,CACH,CACF,CAAC,CAAA,CAGH,IAAMI,CAAc,CAAA,CAAA,OAAA,EAAU7T,CAAI,CAAA,QAAA,CAAA,CAEhCuT,CAAc,CAAA,OAAA,EACdF,CAAiBQ,CAAAA,CAAAA,CAAaN,EAAc,OAAO,CAAA,EAEnDjB,EAAe,CAAA,CACb,GAAGmB,CACH,CAAA,MAAA,CAAQ,SACR,CAAA,SAAA,CAAW,CACT,GAAGA,CAAAA,CAAc,SACjB,CAAA,GAAGF,EAAc,OACjB,CAAA,UAAA,CAAYvH,CAAuB,CAAA,CACjC,OAAQ2G,EAAwB,CAAA,CAC9B,OAAAvM,CAAAA,CAAAA,CACA,WAAYmN,CAAc,CAAA,OAAA,CAAQ,UACpC,CAAC,EACD,MAAQE,CAAAA,CAAAA,CAAc,SAAU,CAAA,UAClC,CAAC,CACH,CACF,CAAC,EAGH,IAAMK,CAAAA,CAAY,CAAU9T,OAAAA,EAAAA,CAAI,SAE9BuT,CAAc,CAAA,KAAA,EACdF,CAAiBS,CAAAA,CAAAA,CAAWP,EAAc,KAAK,CAAA,EAE/CjB,EAAe,CAAA,CACb,GAAGmB,CAAAA,CACH,MAAQ,CAAA,OAAA,CACR,UAAW,CACT,GAAGA,CAAc,CAAA,SAAA,CACjB,GAAGF,CAAc,CAAA,KAAA,CACjB,UAAYvH,CAAAA,CAAAA,CAAuB,CACjC,MAAQ2G,CAAAA,EAAAA,CAAwB,CAC9B,OAAA,CAAAvM,CACA,CAAA,UAAA,CAAYmN,CAAc,CAAA,KAAA,CAAM,UAClC,CAAC,CAAA,CACD,MAAQE,CAAAA,CAAAA,CAAc,UAAU,UAClC,CAAC,CACH,CACF,CAAC,CAGH,CAAA,IAAMM,CAAW,CAAA,CAAA,OAAA,EAAU/T,CAAI,CAAA,KAAA,CAAA,CAC3BuT,CAAc,CAAA,IAAA,EAAQF,EAAiBU,CAAUR,CAAAA,CAAAA,CAAc,IAAI,CAAA,EACrEjB,GAAe,CACb,GAAGmB,CACH,CAAA,MAAA,CAAQ,OACR,SAAW,CAAA,CACT,GAAGA,CAAAA,CAAc,SACjB,CAAA,GAAGF,CAAc,CAAA,IAAA,CACjB,WAAYvH,CAAuB,CAAA,CACjC,MAAQ2G,CAAAA,EAAAA,CAAwB,CAC9B,OAAAvM,CAAAA,CAAAA,CACA,UAAYmN,CAAAA,CAAAA,CAAc,KAAK,UACjC,CAAC,CACD,CAAA,MAAA,CAAQE,CAAc,CAAA,SAAA,CAAU,UAClC,CAAC,CACH,CACF,CAAC,CAGH,CAAA,IAAMO,EAAU,CAAUhU,OAAAA,EAAAA,CAAI,CAC1BuT,IAAAA,CAAAA,CAAAA,CAAAA,CAAc,KAAOF,CAAiBW,CAAAA,CAAAA,CAAST,CAAc,CAAA,GAAG,CAClEjB,EAAAA,EAAAA,CAAe,CACb,GAAGmB,EACH,MAAQ,CAAA,KAAA,CACR,SAAW,CAAA,CACT,GAAGA,CAAc,CAAA,SAAA,CACjB,GAAGF,CAAAA,CAAc,IACjB,UAAYvH,CAAAA,CAAAA,CAAuB,CACjC,MAAA,CAAQ2G,GAAwB,CAC9B,OAAA,CAAAvM,CACA,CAAA,UAAA,CAAYmN,EAAc,GAAI,CAAA,UAChC,CAAC,CAAA,CACD,OAAQE,CAAc,CAAA,SAAA,CAAU,UAClC,CAAC,CACH,CACF,CAAC,CAGH,CAAA,IAAMmB,CAAY,CAAA,CAAA,OAAA,EAAU5U,CAAI,CAAA,MAAA,CAAA,CAE9BuT,EAAc,KACdF,EAAAA,CAAAA,CAAiBuB,CAAWrB,CAAAA,CAAAA,CAAc,KAAK,CAE/CjB,EAAAA,EAAAA,CAAe,CACb,GAAGmB,EACH,MAAQ,CAAA,OAAA,CACR,SAAW,CAAA,CACT,GAAGA,CAAAA,CAAc,SACjB,CAAA,GAAGF,EAAc,KACjB,CAAA,UAAA,CAAYvH,CAAuB,CAAA,CACjC,OAAQ2G,EAAwB,CAAA,CAC9B,OAAAvM,CAAAA,CAAAA,CACA,WAAYmN,CAAc,CAAA,KAAA,CAAM,UAClC,CAAC,CACD,CAAA,MAAA,CAAQE,CAAc,CAAA,SAAA,CAAU,UAClC,CAAC,CACH,CACF,CAAC,EAEL,CACF,CAAA,CChSO,IAAMnG,EAAAA,CAAkB,CAAC,CAC9B,OAAA,CAAApa,CACF,CAAA,GAEgC,CAC9B,GAAM,CAAE,SAAAka,CAAAA,CAAAA,CAAW,OAAA/E,CAAO,CAAA,CAAInV,CAE9B,CAAA,OAAKmV,EAWHA,CAAO,CAAA,IAAA,GAAS,QAChB,EAAA,CAACA,EAAO,MACR8E,EAAAA,EAAAA,CAAoB,CAAE,SAAA,CAAAC,CAAU,CAAC,CAE1B,CAAA,CACL,GAAG/E,CACH,CAAA,MAAA,CAAQ,QACV,CAAA,CAGKA,EApBD8E,EAAoB,CAAA,CAAE,SAAAC,CAAAA,CAAU,CAAC,CAC5B,CAAA,CACL,MAAQ,CAAA,QAAA,CACR,IAAM,CAAA,QACR,CAEF,CAAA,MAeJ,EAEaG,EAAkB,CAAA,CAAC,CAC9B,OAAA,CAAAra,CACF,CAE2B,GAAA,CAEzB,IAAWka,IAAAA,CAAAA,IAAala,EACtB,OAAO,CACL,SAAAka,CAAAA,CAAAA,CACA,MAAQla,CAAAA,CAAAA,CAAQka,CAAS,CAAA,CAAG,OAC5B,IAAMC,CAAAA,EAAAA,CAAuB,CAAE,SAAA,CAAAD,CAAU,CAAC,CAC5C,CAEJ,CAAA,CC7CO,IAAMyH,EAAiB,CAAA,CAAC,CAC7B,MAAA,CAAAxM,CACF,CAGM,GAAA,OAAOA,CAAO,CAAA,IAAA,EAAS,SAClB,CAACA,CAAAA,CAAO,IAAI,CAAA,CAGjBA,EAAO,IACFA,CAAAA,CAAAA,CAAO,IAIZA,CAAAA,CAAAA,CAAO,WACF,CAAC,QAAQ,CAGX,CAAA,EAGHoG,CAAAA,EAAAA,CAAmB,CAAC,CACxB,SAAAC,CACA,CAAA,MAAA,CAAArG,CACF,CAAA,GAGM,CACAA,CAAO,CAAA,UAAA,GAAe,MACxBqG,GAAAA,CAAAA,CAAS,WAAarG,CAAO,CAAA,UAAA,CAAA,CAG3BA,CAAO,CAAA,WAAA,GACTqG,CAAS,CAAA,WAAA,CAAcrG,CAAO,CAAA,WAAA,CAAA,CAG5BA,EAAO,KACTqG,GAAAA,CAAAA,CAAS,KAAQrG,CAAAA,CAAAA,CAAO,OAE5B,CAEMsG,CAAAA,EAAAA,CAAkB,CAAC,CACvB,SAAAD,CACA,CAAA,MAAA,CAAArG,CACF,CAAA,GAGM,CACJ,GAAIA,CAAO,CAAA,KAAA,GAAU,SACnBqG,CAAS,CAAA,KAAA,CAAQrG,CAAO,CAAA,KAAA,CAGpB,CAACA,CAAO,CAAA,IAAA,CAAA,CACV,GAAIA,CAAAA,CAAO,QAAU,IACnBqG,CAAAA,CAAAA,CAAS,IAAO,CAAA,MAAA,CAAA,KAER,OAAA,OAAOrG,CAAO,CAAA,KAAA,EACpB,KAAK,QAAA,CACL,KAAK,QAAA,CACHqG,EAAS,IAAO,CAAA,QAAA,CAChB,MACF,KAAK,UACHA,CAAS,CAAA,IAAA,CAAO,SAChB,CAAA,MACF,KAAK,QAAA,CACHA,CAAS,CAAA,IAAA,CAAO,SAChB,KACJ,CAKFrG,CAAO,CAAA,OAAA,GAAY,SACrBqG,CAAS,CAAA,OAAA,CAAUrG,CAAO,CAAA,OAAA,CAAA,CAGxBA,EAAO,gBACTqG,GAAAA,CAAAA,CAAS,gBAAmBrG,CAAAA,CAAAA,CAAO,gBAGjCA,CAAAA,CAAAA,CAAAA,CAAO,gBACTqG,GAAAA,CAAAA,CAAS,iBAAmBrG,CAAO,CAAA,gBAAA,CAAA,CAGjCA,CAAO,CAAA,MAAA,GACTqG,EAAS,MAASrG,CAAAA,CAAAA,CAAO,MAGvBA,CAAAA,CAAAA,CAAAA,CAAO,UAAY,MACrBqG,GAAAA,CAAAA,CAAS,OAAUrG,CAAAA,CAAAA,CAAO,OAGxBA,CAAAA,CAAAA,CAAAA,CAAO,QAAa,GAAA,MAAA,GACtBqG,EAAS,QAAWrG,CAAAA,CAAAA,CAAO,QAGzBA,CAAAA,CAAAA,CAAAA,CAAO,YAAc,MACvBqG,GAAAA,CAAAA,CAAS,SAAYrG,CAAAA,CAAAA,CAAO,WAG1BA,CAAO,CAAA,OAAA,GAAY,MACrBqG,GAAAA,CAAAA,CAAS,QAAUrG,CAAO,CAAA,OAAA,CAAA,CAGxBA,CAAO,CAAA,QAAA,GAAa,SACtBqG,CAAS,CAAA,QAAA,CAAWrG,CAAO,CAAA,QAAA,CAAA,CAGzBA,EAAO,SAAc,GAAA,MAAA,GACvBqG,CAAS,CAAA,SAAA,CAAYrG,EAAO,SAG1BA,CAAAA,CAAAA,CAAAA,CAAO,OACTqG,GAAAA,CAAAA,CAAS,OAAUrG,CAAAA,CAAAA,CAAO,OAGxBA,CAAAA,CAAAA,CAAAA,CAAO,UACTqG,CAAS,CAAA,WAAA,CAAc,MACvBA,CAAAA,CAAAA,CAAS,aAAeP,CAAwBO,CAAAA,CAAAA,CAAS,YAAc,CAAA,CACrE,MACF,CAAC,CAAA,EACQrG,CAAO,CAAA,SAAA,GAChBqG,CAAS,CAAA,WAAA,CAAc,OACvBA,CAAAA,CAAAA,CAAS,aAAeP,CAAwBO,CAAAA,CAAAA,CAAS,YAAc,CAAA,CACrE,OACF,CAAC,CAAA,EAEL,CAEME,CAAAA,EAAAA,CAAa,CAAC,CAClB,OAAA,CAAAxI,CACA,CAAA,QAAA,CAAAsI,CAAW,CAAA,EACX,CAAA,MAAA,CAAArG,EACA,KAAAsD,CAAAA,CACF,CAKuB,GAAA,CAElBtD,EAAO,WAAeA,EAAAA,CAAAA,CAAO,WAAY,CAAA,MAAA,EACzCA,EAAO,QAAYA,EAAAA,CAAAA,CAAO,QAAaA,GAAAA,CAAAA,CAAO,QAC/CA,EAAAA,CAAAA,CAAO,KAAU,GAAA,MAAA,CAEjBqG,EAAS,IAAO,CAAA,OAAA,CAEhBA,CAAS,CAAA,IAAA,CAAO,QAGlB,IAAIG,CAAAA,CAAsC,EAAC,CAE3C,QAAWjR,CAAQyK,IAAAA,CAAAA,CAAO,WAAe,EAAA,EAAI,CAAA,CAC3C,IAAMyM,CAAAA,CAAe/F,EAAiB,CACpC,OAAA,CAAA3I,CACA,CAAA,MAAA,CAAQxI,EACR,KAAA+N,CAAAA,CACF,CAAC,CAAA,CACD+C,EAAS,YAAeP,CAAAA,CAAAA,CACtBO,CAAS,CAAA,YAAA,CACToG,CAAa,CAAA,YACf,CACAjG,CAAAA,CAAAA,CAAY,KAAKiG,CAAY,EAC/B,CAEA,GAAIzM,EAAO,KAAO,CAAA,CAChB,IAAMyG,CAAAA,CAAgBC,EAAiB,CACrC,OAAA,CAAA3I,CACA,CAAA,MAAA,CAAQiC,CAAO,CAAA,KAAA,CACf,KAAAsD,CAAAA,CACF,CAAC,CAOD,CAAA,GALA+C,CAAS,CAAA,YAAA,CAAeP,EACtBO,CAAS,CAAA,YAAA,CACTI,CAAc,CAAA,YAChB,EAGE,CAACD,CAAAA,CAAY,MACbxG,EAAAA,CAAAA,CAAO,UACPA,CAAO,CAAA,QAAA,GAAaA,CAAO,CAAA,QAAA,CAE3BwG,EAAc,KAAMxG,CAAAA,CAAAA,CAAO,QAAQ,CAAA,CAAE,KAAKyG,CAAa,CAAA,CAAA,KAClD,CACL,IAAME,EACJ3G,CAAO,CAAA,KAAA,CAAM,KAASA,EAAAA,CAAAA,CAAO,KAAM,CAAA,KAAA,EAASA,CAAO,CAAA,KAAA,CAAM,MAEzD2G,CACAA,EAAAA,CAAAA,CAAQ,MAAS,CAAA,CAAA,EACjB,CAAC6F,EAAe,CAAA,CAAE,MAAQxM,CAAAA,CAAAA,CAAO,KAAM,CAAC,CAAA,CAAE,QAAS,CAAA,MAAM,CAGzDqG,CAAAA,CAAAA,CAAW,CACT,GAAGA,EACH,GAAGI,CACL,CAEAD,CAAAA,CAAAA,CAAY,KAAKC,CAAa,EAElC,CACF,CAEA,OAAAJ,CAAWb,CAAAA,CAAAA,CAAiB,CAC1B,KAAA,CAAOgB,CACP,CAAA,MAAA,CAAQH,CACV,CAAC,EAEMA,CACT,CAAA,CAEMO,EAAe,CAAA,CAAC,CACpB,QAAAP,CAAAA,CAAAA,CAAW,EACb,KAKEA,CAAS,CAAA,IAAA,CAAO,SAETA,CAAAA,CAAAA,CAAAA,CAGHqG,EAAY,CAAA,CAAC,CACjB,QAAA,CAAArG,EAAW,EACb,CAKEA,IAAAA,CAAAA,CAAS,KAAO,MAETA,CAAAA,CAAAA,CAAAA,CAGHQ,EAAc,CAAA,CAAC,CACnB,QAAAR,CAAAA,CAAAA,CAAW,EAAC,CACZ,MAAArG,CAAAA,CACF,CAOEqG,IAAAA,CAAAA,CAAS,KAAOrG,CAAO,CAAA,IAAA,CAEhBqG,CAGHS,CAAAA,CAAAA,EAAAA,CAAc,CAAC,CACnB,OAAA,CAAA/I,CACA,CAAA,QAAA,CAAAsI,EAAW,EAAC,CACZ,MAAArG,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAKuB,GAAA,CACrB+C,EAAS,IAAO,CAAA,QAAA,CAEhB,IAAMU,CAAAA,CAAoD,EAE1D,CAAA,IAAA,IAAWxb,CAAQyU,IAAAA,CAAAA,CAAO,WAAY,CACpC,IAAM3G,CAAW2G,CAAAA,CAAAA,CAAO,UAAWzU,CAAAA,CAAI,CACvC,CAAA,GAAI,OAAO8N,CAAa,EAAA,SAAA,CAEjB,CACL,IAAM2N,EAAmBN,CAAiB,CAAA,CACxC,OAAA3I,CAAAA,CAAAA,CACA,OAAQ1E,CACR,CAAA,KAAA,CAAAiK,CACF,CAAC,EACD+C,CAAS,CAAA,YAAA,CAAeP,CACtBO,CAAAA,CAAAA,CAAS,aACTW,CAAiB,CAAA,YACnB,CACAD,CAAAA,CAAAA,CAAiBxb,CAAI,CAAIyb,CAAAA,EAC3B,CACF,CAMA,GAJI,MAAO,CAAA,IAAA,CAAKD,CAAgB,CAAA,CAAE,MAChCV,GAAAA,CAAAA,CAAS,UAAaU,CAAAA,CAAAA,CAAAA,CAGpB/G,EAAO,oBAAyB,GAAA,MAAA,CAC7BqG,CAAS,CAAA,UAAA,GACZA,EAAS,oBAAuB,CAAA,CAC9B,IAAM,CAAA,SACR,WAEO,OAAOrG,CAAAA,CAAO,oBAAyB,EAAA,SAAA,CAChDqG,CAAS,CAAA,oBAAA,CAAuB,CAC9B,IAAA,CAAMrG,EAAO,oBAAuB,CAAA,SAAA,CAAY,OAClD,CAAA,CAAA,KACK,CACL,IAAMiH,CAAAA,CAA+BP,CAAiB,CAAA,CACpD,QAAA3I,CACA,CAAA,MAAA,CAAQiC,CAAO,CAAA,oBAAA,CACf,KAAAsD,CAAAA,CACF,CAAC,CAAA,CAAA,CAGC+C,EAAS,UACTY,EAAAA,CAAAA,CAA6B,IAAS,GAAA,SAAA,IAEtCZ,EAAS,oBAAuBY,CAAAA,CAAAA,EAEpC,CAEA,OAAIjH,EAAO,QACTqG,GAAAA,CAAAA,CAAS,QAAWrG,CAAAA,CAAAA,CAAO,UAGtBqG,CACT,CAAA,CAEMa,EAAc,CAAA,CAAC,CACnB,QAAAb,CAAAA,CAAAA,CAAW,EACb,KAKEA,CAAS,CAAA,IAAA,CAAO,QAETA,CAAAA,CAAAA,CAAAA,CAGHc,GAAe,CAAC,CACpB,MAAAnH,CAAAA,CACF,CAEuB,GAAA,CACrB,IAAMqG,CAAAA,CAA4B,EAElC,CAAA,OAAAD,EAAiB,CAAA,CACf,SAAAC,CACA,CAAA,MAAA,CAAArG,CACF,CAAC,EAEMqG,CACT,CAAA,CAEMe,EAAa,CAAA,CAAC,CAClB,OAAA,CAAArJ,CACA,CAAA,MAAA,CAAAiC,EACA,KAAAsD,CAAAA,CACF,CAIuB,GAAA,CACrB,IAAI+C,CAAWc,CAAAA,EAAAA,CAAa,CAAE,MAAA,CAAAnH,CAAO,CAAC,CAAA,CAEhCwG,CAAsC,CAAA,EACtCmG,CAAAA,CAAAA,CAAcH,EAAe,CAAA,CAAE,OAAAxM,CAAO,CAAC,CAEvCsH,CAAAA,CAAAA,CAAqBtH,EAAO,KAElC,CAAA,IAAA,IAAWuH,CAAqBD,IAAAA,CAAAA,CAAoB,CAClD,IAAME,CAAAA,CAAsBd,CAAiB,CAAA,CAC3C,QAAA3I,CACA,CAAA,MAAA,CAAQwJ,CACR,CAAA,KAAA,CAAAjE,CACF,CAAC,CAAA,CAoBD,GAlBA+C,CAAAA,CAAS,aAAeP,CACtBO,CAAAA,CAAAA,CAAS,YACTmB,CAAAA,CAAAA,CAAoB,YACtB,CAEIxH,CAAAA,CAAAA,CAAO,QACLwH,GAAAA,CAAAA,CAAoB,QACtBA,CAAAA,CAAAA,CAAoB,QAAW,CAAA,CAC7B,GAAGA,CAAoB,CAAA,QAAA,CACvB,GAAGxH,CAAAA,CAAO,QACZ,CAEAwH,CAAAA,CAAAA,CAAoB,QAAWxH,CAAAA,CAAAA,CAAO,UAI1CwG,CAAY,CAAA,IAAA,CAAKgB,CAAmB,CAAA,CAEhCD,CAAkB,CAAA,IAAA,CAAM,CAC1B,IAAME,EAAM1J,CAAQ,CAAA,UAAA,CAAyBwJ,CAAkB,CAAA,IAAI,EAEnE,GAAIE,CAAAA,CAAI,aAAiBnE,EAAAA,CAAAA,CAAM,KAAM,CACnC,IAAMoE,CAAyC,CAAA,CAC7C,UAAY,CAAA,CACV,CAACD,CAAAA,CAAI,cAAc,YAAY,EAAG,CAChC,KAAA,CAAO7B,GAAmBtC,CAAM,CAAA,IAAA,CAAMmE,CAAI,CAAA,aAAA,CAAc,OAAO,CAC/D,CAAA,IAAA,CAAM,QACR,CACF,CACA,CAAA,IAAA,CAAM,QACR,CAAA,CACIA,EAAI,QAAU,EAAA,QAAA,CAASA,CAAI,CAAA,aAAA,CAAc,YAAY,CACvDC,GAAAA,CAAAA,CAAsB,QAAW,CAAA,CAACD,EAAI,aAAc,CAAA,YAAY,CAElEjB,CAAAA,CAAAA,CAAAA,CAAY,IAAKkB,CAAAA,CAAqB,EACxC,CAEA,GAAI,CAACpE,CAAAA,CAAM,wBAAyB,CAAA,GAAA,CAAIiE,EAAkB,IAAI,CAAA,CAAG,CAC/D,IAAMI,EAAcjB,CAAiB,CAAA,CACnC,OAAA3I,CAAAA,CAAAA,CACA,MAAQ0J,CAAAA,CAAAA,CACR,KAAO,CAAA,CACL,GAAGnE,CACH,CAAA,IAAA,CAAMiE,CAAkB,CAAA,IAC1B,CACF,CAAC,CAAA,CACDlB,CAAS,CAAA,YAAA,CAAeP,EACtBO,CAAS,CAAA,YAAA,CACTsB,CAAY,CAAA,YACd,EACF,CACF,CACF,CAEA,GAAIgF,CAAY,CAAA,QAAA,CAAS,QAAQ,CAAA,CAAG,CAClC,IAAM/E,CAAAA,CAAiBC,EAAa,CAAA,CAClC,QAAA9J,CACA,CAAA,MAAA,CAAQ,CACN,GAAGiC,EACH,IAAM,CAAA,QACR,CACA,CAAA,KAAA,CAAAsD,CACF,CAAC,CAAA,CAOD,GALA+C,CAAAA,CAAS,aAAeP,CACtBO,CAAAA,CAAAA,CAAS,YACTuB,CAAAA,CAAAA,CAAe,YACjB,CAEIA,CAAAA,CAAAA,CAAe,UAAY,CAAA,CAC7B,IAAWE,IAAAA,CAAAA,IAAoBF,CAAe,CAAA,QAAA,EAAY,EACxD,CAAA,GAAI,CAACA,CAAAA,CAAe,WAAWE,CAAgB,CAAA,CAC7C,IAAWP,IAAAA,CAAAA,IAAqBD,EAAoB,CAElD,IAAMS,CAAyBR,CAAAA,CAAAA,CAAkB,IAC7CxJ,CAAAA,CAAAA,CAAQ,UAAyBwJ,CAAAA,CAAAA,CAAkB,IAAI,CACvDA,CAAAA,CAAAA,CAEJ,GACEiF,EAAAA,CAAe,CAAE,MAAQzE,CAAAA,CAAuB,CAAC,CAAA,CAAE,SACjD,QACF,CAAA,CACA,CACA,IAAMP,CAAsBK,CAAAA,EAAAA,CAAa,CACvC,OAAA,CAAA9J,EACA,MAAQ,CAAA,CACN,GAAGgK,CAAAA,CACH,KAAM,QACR,CAAA,CACA,KAAAzE,CAAAA,CACF,CAAC,CAOD,CAAA,GALA+C,CAAS,CAAA,YAAA,CAAeP,CACtBO,CAAAA,CAAAA,CAAS,YACTmB,CAAAA,CAAAA,CAAoB,YACtB,CAEIA,CAAAA,CAAAA,CAAoB,UAAaM,GAAAA,CAAgB,EAAG,CACtDF,CAAAA,CAAe,UAAWE,CAAAA,CAAgB,EACxCN,CAAoB,CAAA,UAAA,CAAWM,CAAgB,CAAA,CACjD,KACF,CACF,CACF,CAGJtB,EAAY,IAAKoB,CAAAA,CAAc,EACjC,CACF,CASA,GAPAvB,CAAAA,CAAWb,CAAiB,CAAA,CAC1B,MAAOgB,CACP,CAAA,eAAA,CAAiB,KACjB,CAAA,mBAAA,CAAqB,IACrB,CAAA,MAAA,CAAQH,CACV,CAAC,EAEGsG,CAAY,CAAA,QAAA,CAAS,MAAM,CAAA,CAAG,CAEhC,IAAM3E,CAAAA,CAAsC,CAC1C,CACE,KAAM,MACR,CACF,CAEIxB,CAAAA,CAAAA,CAAY,MACdwB,EAAAA,CAAAA,CAAY,OAAQ3B,CAAAA,CAAQ,EAG9BA,CAAW,CAAA,CACT,KAAO2B,CAAAA,CAAAA,CACP,gBAAiB,IACnB,EACF,CAEA,OAAO3B,CACT,CAEMuF,CAAAA,EAAAA,CAAa,CAAC,CAClB,QAAA7N,CACA,CAAA,MAAA,CAAAiC,CACA,CAAA,KAAA,CAAAsD,CACF,CAIuB,GAAA,CACrB,IAAI+C,CAAAA,CAAWc,GAAa,CAAE,MAAA,CAAAnH,CAAO,CAAC,EAEhCwG,CAAsC,CAAA,EACtCmG,CAAAA,CAAAA,CAAcH,EAAe,CAAA,CAAE,MAAAxM,CAAAA,CAAO,CAAC,CAEvCsH,CAAAA,CAAAA,CAAqBtH,CAAO,CAAA,KAAA,CAElC,QAAWuH,CAAqBD,IAAAA,CAAAA,CAAoB,CAClD,IAAIE,EAAsBd,CAAiB,CAAA,CACzC,OAAA3I,CAAAA,CAAAA,CACA,MAAQwJ,CAAAA,CAAAA,CACR,KAAAjE,CAAAA,CACF,CAAC,CAED+C,CAAAA,CAAAA,CAAS,YAAeP,CAAAA,CAAAA,CACtBO,EAAS,YACTmB,CAAAA,CAAAA,CAAoB,YACtB,CAAA,CAGIxH,EAAO,aAAiBuH,EAAAA,CAAAA,CAAkB,IAa5CC,GAAAA,CAAAA,CAAsB,CACpB,KAAA,CAAO,CAbsC,CAC7C,WAAY,CACV,CAACxH,CAAO,CAAA,aAAA,CAAc,YAAY,EAAG,CACnC,KAAO4F,CAAAA,EAAAA,CACL2B,EAAkB,IAClBvH,CAAAA,CAAAA,CAAO,aAAc,CAAA,OACvB,CACA,CAAA,IAAA,CAAM,QACR,CACF,EACA,IAAM,CAAA,QACR,CAEiCwH,CAAAA,CAAmB,EAClD,eAAiB,CAAA,KACnB,CAGFhB,CAAAA,CAAAA,CAAAA,CAAY,KAAKgB,CAAmB,EACtC,CAYA,GAVImF,CAAY,CAAA,QAAA,CAAS,MAAM,CAAA,EAC7BnG,EAAY,IAAK,CAAA,CAAE,IAAM,CAAA,MAAO,CAAC,CAGnCH,CAAAA,CAAAA,CAAWb,CAAiB,CAAA,CAC1B,MAAOgB,CACP,CAAA,mBAAA,CAAqB,IACrB,CAAA,MAAA,CAAQH,CACV,CAAC,CAEGsG,CAAAA,CAAAA,CAAY,SAAS,QAAQ,CAAA,CAAG,CAElC,IAAM/E,EAAiBC,EAAa,CAAA,CAClC,OAAA9J,CAAAA,CAAAA,CACA,OAAQ,CACN,GAAGiC,CACH,CAAA,IAAA,CAAM,QACR,CAAA,CACA,KAAAsD,CAAAA,CACF,CAAC,CAED+C,CAAAA,CAAAA,CAAS,YAAeP,CAAAA,CAAAA,CACtBO,EAAS,YACTuB,CAAAA,CAAAA,CAAe,YACjB,CAAA,CAEIA,EAAe,UACjBvB,GAAAA,CAAAA,CAAW,CACT,KAAA,CAAO,CAACA,CAAUuB,CAAAA,CAAc,CAChC,CAAA,eAAA,CAAiB,KACnB,CAEJ,EAAA,CAEA,OAAOvB,CACT,EAEM4B,EAAY,CAAA,CAAC,CACjB,OAAA,CAAAlK,EACA,MAAAiC,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAIuB,GAAA,CACrB,IAAI+C,CAAAA,CAAWc,GAAa,CAAE,MAAA,CAAAnH,CAAO,CAAC,EAEtCqG,CAAS,CAAA,IAAA,CAAO,MAEhB,CAAA,IAAMG,EAAsC,EAAC,CACvCmG,CAAcH,CAAAA,EAAAA,CAAe,CAAE,MAAA,CAAAxM,CAAO,CAAC,EAE7C,IAAW,GAAA,CAACpR,CAAOsZ,CAAAA,CAAS,IAAKlI,CAAO,CAAA,IAAA,CAAK,OAAQ,EAAA,CAAG,CACtD,IAAMmI,CAAAA,CAAkB,OAAOD,CAAAA,CAC3BE,CAqBJ,CAAA,GAlBED,CAAoB,GAAA,QAAA,EACpBA,IAAoB,QACpBA,EAAAA,CAAAA,GAAoB,SAEpBC,CAAAA,CAAAA,CAAWD,EACFD,CAAc,GAAA,IAAA,CAEnByE,CAAY,CAAA,QAAA,CAAS,MAAM,CAC7BvE,GAAAA,CAAAA,CAAW,MAGb,CAAA,CAAA,OAAA,CAAQ,KACN,WACA,CAAA,CAAA,WAAA,EAAcD,CAAe,CAAA,gBAAA,EAAmBD,CAAS,CACzDlI,UAAAA,CAAAA,CAAAA,CAAAA,CAAO,IACT,CAAA,CAGE,CAACoI,CACH,CAAA,SAGF,IAAMC,CAAAA,CAAeR,GAAa,CAChC,OAAA,CAAA9J,CACA,CAAA,MAAA,CAAQ,CACN,KAAA,CAAOmK,CACP,CAAA,WAAA,CAAalI,EAAO,qBAAqB,CAAA,GAAIpR,CAAK,CAAA,CAClD,MACEoR,CAAO,CAAA,iBAAiB,CAAIpR,GAAAA,CAAK,GAAKoR,CAAO,CAAA,aAAa,CAAIpR,GAAAA,CAAK,CACrE,CAAA,IAAA,CAAMwZ,CACR,CAAA,CACA,MAAA9E,CACF,CAAC,CAED+C,CAAAA,CAAAA,CAAS,aAAeP,CACtBO,CAAAA,CAAAA,CAAS,YACTgC,CAAAA,CAAAA,CAAa,YACf,CAEA7B,CAAAA,CAAAA,CAAY,IAAK6B,CAAAA,CAAY,EAC/B,CAEA,OAAAhC,CAAAA,CAAWb,EAAiB,CAC1B,KAAA,CAAOgB,CACP,CAAA,MAAA,CAAQH,CACV,CAAC,CAAA,CAEMA,CACT,CAAA,CAEMwF,GAAa,CAAC,CAClB,OAAA9N,CAAAA,CAAAA,CACA,OAAAiC,CACA,CAAA,KAAA,CAAAsD,CACF,CAAA,GAIuB,CACrB,IAAI+C,CAAAA,CAAWc,EAAa,CAAA,CAAE,OAAAnH,CAAO,CAAC,CAElCwG,CAAAA,CAAAA,CAAsC,EACpCmG,CAAAA,CAAAA,CAAcH,EAAe,CAAA,CAAE,MAAAxM,CAAAA,CAAO,CAAC,CAAA,CAEvCsH,EAAqBtH,CAAO,CAAA,KAAA,CAElC,IAAWuH,IAAAA,CAAAA,IAAqBD,EAAoB,CAClD,IAAIE,CAAsBd,CAAAA,CAAAA,CAAiB,CACzC,OAAA3I,CAAAA,CAAAA,CACA,MAAQwJ,CAAAA,CAAAA,CACR,KAAAjE,CAAAA,CACF,CAAC,CAAA,CAED+C,EAAS,YAAeP,CAAAA,CAAAA,CACtBO,CAAS,CAAA,YAAA,CACTmB,EAAoB,YACtB,CAAA,CAGIxH,CAAO,CAAA,aAAA,EAAiBuH,EAAkB,IAa5CC,GAAAA,CAAAA,CAAsB,CACpB,KAAA,CAAO,CAbsC,CAC7C,UAAY,CAAA,CACV,CAACxH,CAAO,CAAA,aAAA,CAAc,YAAY,EAAG,CACnC,KAAO4F,CAAAA,EAAAA,CACL2B,CAAkB,CAAA,IAAA,CAClBvH,EAAO,aAAc,CAAA,OACvB,CACA,CAAA,IAAA,CAAM,QACR,CACF,CACA,CAAA,IAAA,CAAM,QACR,CAEiCwH,CAAAA,CAAmB,CAClD,CAAA,eAAA,CAAiB,KACnB,CAOAA,CAAAA,CAAAA,CAAAA,CAAoB,eAAoB,GAAA,IAAA,EACxCA,EAAoB,KAEpBhB,CAAAA,CAAAA,CAAcA,CAAY,CAAA,MAAA,CAAOgB,CAAoB,CAAA,KAAK,CAE1DhB,CAAAA,CAAAA,CAAY,KAAKgB,CAAmB,EAExC,CAYA,GAVImF,EAAY,QAAS,CAAA,MAAM,CAC7BnG,EAAAA,CAAAA,CAAY,KAAK,CAAE,IAAA,CAAM,MAAO,CAAC,CAGnCH,CAAAA,CAAAA,CAAWb,CAAiB,CAAA,CAC1B,MAAOgB,CACP,CAAA,mBAAA,CAAqB,IACrB,CAAA,MAAA,CAAQH,CACV,CAAC,CAAA,CAEGsG,CAAY,CAAA,QAAA,CAAS,QAAQ,CAAG,CAAA,CAElC,IAAM/E,CAAAA,CAAiBC,EAAa,CAAA,CAClC,OAAA9J,CAAAA,CAAAA,CACA,OAAQ,CACN,GAAGiC,CACH,CAAA,IAAA,CAAM,QACR,CACA,CAAA,KAAA,CAAAsD,CACF,CAAC,EAED+C,CAAS,CAAA,YAAA,CAAeP,CACtBO,CAAAA,CAAAA,CAAS,aACTuB,CAAe,CAAA,YACjB,CAEIA,CAAAA,CAAAA,CAAe,aACjBvB,CAAW,CAAA,CACT,KAAO,CAAA,CAACA,EAAUuB,CAAc,CAAA,CAChC,eAAiB,CAAA,KACnB,GAEJ,CAEA,OAAOvB,CACT,CAAA,CAEMiC,EAAW,CAAA,CAAC,CAChB,OAAA,CAAAvK,EACA,MAAAiC,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,IAIuB,CACrB,IAAM+C,CAAWc,CAAAA,EAAAA,CAAa,CAAE,MAAAnH,CAAAA,CAAO,CAAC,CAAA,CAMxC,GAFAqG,CAAAA,CAAS,IAAO,CAAA,SAAA,CAAUrG,EAAO,IAAI,CAAA,CAEjC,CAACsD,CAAAA,CAAM,yBAAyB,GAAItD,CAAAA,CAAAA,CAAO,IAAI,CAAA,CAAG,CACpD,IAAMuI,CAAAA,CAAYxK,CAAQ,CAAA,UAAA,CAAyBiC,CAAO,CAAA,IAAI,CACxD2H,CAAAA,CAAAA,CAAcjB,EAAiB,CACnC,OAAA,CAAA3I,CACA,CAAA,MAAA,CAAQwK,EACR,KAAO,CAAA,CACL,GAAGjF,CAAAA,CACH,KAAMtD,CAAO,CAAA,IACf,CACF,CAAC,CACDqG,CAAAA,CAAAA,CAAS,YAAeP,CAAAA,CAAAA,CACtBO,EAAS,YACTsB,CAAAA,CAAAA,CAAY,YACd,EACF,CAEA,OAAOtB,CACT,CAEMwB,CAAAA,EAAAA,CAAe,CAAC,CACpB,OAAA,CAAA9J,CACA,CAAA,QAAA,CAAAsI,CACA,CAAA,MAAA,CAAArG,CACA,CAAA,KAAA,CAAAsD,CACF,CAOuB,GAAA,CAUrB,OATK+C,CAAAA,GACHA,EAAWc,EAAa,CAAA,CAAE,MAAAnH,CAAAA,CAAO,CAAC,CAElCsG,CAAAA,EAAAA,CAAgB,CACd,QAAA,CAAAD,CACA,CAAA,MAAA,CAAArG,CACF,CAAC,GAGKA,CAAO,CAAA,IAAA,EACb,KAAK,QACH,OAAOuG,EAAAA,CAAW,CAChB,OAAA,CAAAxI,EACA,QAAAsI,CAAAA,CAAAA,CACA,MAAArG,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAAC,CAAA,CACH,KAAK,SACH,CAAA,OAAOsD,EAAa,CAAA,CAElB,QAAA,CAAAP,CAEF,CAAC,CAAA,CACH,KAAK,SAAA,CACL,KAAK,QACH,CAAA,OAAOQ,EAAY,CAAA,CAEjB,QAAA,CAAAR,CACA,CAAA,MAAA,CAAArG,CACF,CAAC,CAAA,CACH,KAAK,MAAA,CACH,OAAO0M,EAAU,CAAA,CAEf,QAAArG,CAAAA,CAEF,CAAC,CACH,CAAA,KAAK,QACH,CAAA,OAAOS,GAAY,CACjB,OAAA,CAAA/I,CACA,CAAA,QAAA,CAAAsI,EACA,MAAArG,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAAC,CAAA,CACH,KAAK,QAAA,CACH,OAAO4D,EAAY,CAAA,CAEjB,SAAAb,CAEF,CAAC,EACH,QAEE,OAAOsC,EAAa,CAAA,CAElB,QAAAtC,CAAAA,CAAAA,CACA,OAAArG,CACF,CAAC,CACL,CACF,EAEM4M,EAAiB,CAAA,CAAC,CACtB,OAAA,CAAA7O,EACA,QAAAsI,CAAAA,CAAAA,CACA,MAAArG,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAOuB,GAAA,CAChB+C,IACHA,CAAWc,CAAAA,EAAAA,CAAa,CAAE,MAAA,CAAAnH,CAAO,CAAC,CAAA,CAAA,CAGpC,IAAMyI,CAAAA,CAAgC,EAEtCnC,CAAAA,EAAAA,CAAgB,CACd,QAAA,CAAUmC,CACV,CAAA,MAAA,CAAAzI,CACF,CAAC,EAEGA,CAAO,CAAA,IAAA,CAAK,QAAS,CAAA,MAAM,GAAKyI,CAAa,CAAA,OAAA,GAAY,IAG3D,EAAA,OAAOA,EAAa,OAGtB,CAAA,IAAMjC,CAAsC,CAAA,EAE5C,CAAA,IAAA,IAAWjV,CAAQyO,IAAAA,CAAAA,CAAO,KACxB,GAAIzO,CAAAA,GAAS,MACXiV,CAAAA,CAAAA,CAAY,KAAK,CAAE,IAAA,CAAM,MAAO,CAAC,OAC5B,CACL,IAAM6B,CAAeR,CAAAA,EAAAA,CAAa,CAChC,OAAA,CAAA9J,CACA,CAAA,QAAA,CAAU0K,EACV,MAAQ,CAAA,CACN,GAAGzI,CAAAA,CACH,KAAAzO,CACF,CAAA,CACA,KAAA+R,CAAAA,CACF,CAAC,CAED+C,CAAAA,CAAAA,CAAS,YAAeP,CAAAA,CAAAA,CACtBO,EAAS,YACTgC,CAAAA,CAAAA,CAAa,YACf,CAAA,CAEA7B,EAAY,IAAK6B,CAAAA,CAAY,EAC/B,CAGF,OAAAhC,CAAWb,CAAAA,CAAAA,CAAiB,CAC1B,KAAA,CAAOgB,EACP,MAAQH,CAAAA,CACV,CAAC,CAAA,CAEMA,CACT,CAAA,CAEMqC,EAAY,CAAA,CAAC,CACjB,OAAA3K,CAAAA,CAAAA,CACA,MAAAiC,CAAAA,CAAAA,CACA,MAAAsD,CACF,CAAA,GAIuB,CACrB,IAAM+C,EAAWc,EAAa,CAAA,CAAE,MAAAnH,CAAAA,CAAO,CAAC,CAAA,CAExCsG,EAAgB,CAAA,CACd,SAAAD,CACA,CAAA,MAAA,CAAArG,CACF,CAAC,EAED,IAAM2M,CAAAA,CAAcH,EAAe,CAAA,CAAE,OAAAxM,CAAO,CAAC,CAE7C,CAAA,OAAI2M,CAAY,CAAA,MAAA,GAAW,CAClB9E,CAAAA,EAAAA,CAAa,CAClB,OAAA9J,CAAAA,CAAAA,CACA,QAAAsI,CAAAA,CAAAA,CACA,OAAQ,CACN,GAAGrG,CACH,CAAA,IAAA,CAAM2M,EAAY,CAAC,CACrB,CACA,CAAA,KAAA,CAAArJ,CACF,CAAC,CAAA,CAGIsJ,EAAe,CAAA,CACpB,QAAA7O,CACA,CAAA,QAAA,CAAAsI,CACA,CAAA,MAAA,CAAQ,CACN,GAAGrG,CAAAA,CACH,IAAM2M,CAAAA,CACR,EACA,KAAArJ,CAAAA,CACF,CAAC,CACH,CAEMqF,CAAAA,EAAAA,CAAe,CAAC,CACpB,SAAAtC,CACA,CAAA,MAAA,CAAArG,CACF,CAAA,IAKOqG,IACHA,CAAWc,CAAAA,EAAAA,CAAa,CAAE,MAAA,CAAAnH,CAAO,CAAC,CAAA,CAAA,CAGpCqG,CAAS,CAAA,IAAA,CAAO,SAEhBC,CAAAA,EAAAA,CAAgB,CACd,QAAA,CAAAD,EACA,MAAArG,CAAAA,CACF,CAAC,CAAA,CAEMqG,GAGIK,CAAmB,CAAA,CAAC,CAC/B,OAAA,CAAA3I,EACA,MAAAiC,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAKOA,IAAAA,CAAAA,GACHA,CAAQ,CAAA,CACN,yBAA0B,IAAI,GAChC,CAGEA,CAAAA,CAAAA,CAAAA,CAAM,MACRA,CAAM,CAAA,wBAAA,CAAyB,GAAIA,CAAAA,CAAAA,CAAM,IAAI,CAG3CtD,CAAAA,CAAAA,CAAO,IACFsI,CAAAA,EAAAA,CAAS,CACd,OAAAvK,CAAAA,CAAAA,CACA,MAAQiC,CAAAA,CAAAA,CACR,MAAAsD,CACF,CAAC,CAGCtD,CAAAA,CAAAA,CAAO,KACFiI,EAAU,CAAA,CACf,OAAAlK,CAAAA,CAAAA,CACA,OAAQiC,CACR,CAAA,KAAA,CAAAsD,CACF,CAAC,CAGCtD,CAAAA,CAAAA,CAAO,KACFoH,CAAAA,EAAAA,CAAW,CAChB,OAAArJ,CAAAA,CAAAA,CACA,MAAQiC,CAAAA,CAAAA,CACR,MAAAsD,CACF,CAAC,CAGCtD,CAAAA,CAAAA,CAAO,MACF4L,EAAW,CAAA,CAChB,OAAA7N,CAAAA,CAAAA,CACA,MAAQiC,CAAAA,CAAAA,CACR,KAAAsD,CAAAA,CACF,CAAC,CAGCtD,CAAAA,CAAAA,CAAO,KACF6L,CAAAA,EAAAA,CAAW,CAChB,OAAA9N,CAAAA,CAAAA,CACA,MAAQiC,CAAAA,CAAAA,CACR,MAAAsD,CACF,CAAC,CAICtD,CAAAA,CAAAA,CAAO,IAAQA,EAAAA,CAAAA,CAAO,UACjB0I,CAAAA,EAAAA,CAAU,CACf,OAAA3K,CAAAA,CAAAA,CACA,MAAQiC,CAAAA,CAAAA,CACR,MAAAsD,CACF,CAAC,CAGIqF,CAAAA,EAAAA,CAAa,CAElB,MAAA3I,CAAAA,CACF,CAAC,CAAA,CAAA,CAGU4I,EAAc,CAAA,CAAC,CAC1B,IAAArN,CAAAA,CAAAA,CACA,OAAAwC,CAAAA,CAAAA,CACA,OAAAiC,CACF,CAAA,GAIM,CACCjC,CAAAA,CAAQ,GAAG,UACdA,GAAAA,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAa,EAAC,CAAA,CAGtBA,CAAQ,CAAA,EAAA,CAAG,WAAW,OACzBA,GAAAA,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAW,QAAU,EAAC,CAAA,CAGnCA,CAAQ,CAAA,EAAA,CAAG,WAAW,OAAQtC,CAAAA,CAAAA,CAAUF,CAAI,CAAC,CAAImL,CAAAA,CAAAA,CAAiB,CAChE,OAAA,CAAA3I,EACA,MAAAiC,CAAAA,CAAAA,CACA,KAAO,CAAA,CACL,KAAAzE,CACA,CAAA,wBAAA,CAA0B,IAAI,GAChC,CACF,CAAC,EACH,CC1kCA,CAAA,IAAMsN,EACJ8D,CAAAA,CAAAA,EAEAA,CAAY,CAAA,QAAA,CAAS,SAAS,CAC9BA,EAAAA,CAAAA,CAAY,QAAS,CAAA,SAAS,GAC9BA,CAAY,CAAA,QAAA,CAAS,QAAQ,CAAA,EAC7BA,EAAY,QAAS,CAAA,QAAQ,CAGlB7D,CAAAA,EAAAA,CAAkB,CAAC,CAC9B,OAAA,CAAA/K,CACA,CAAA,IAAA,CAAAxS,EACA,MAAAyU,CAAAA,CACF,CAIwB,GAAA,CAItB,GAHyBqF,CACvBtH,CAAAA,CAAAA,CAAQ,MAAO,CAAA,KAAA,CAAM,UACvB,CACqB,CAAA,IAAA,CAAKxS,CAAI,CAAA,CAC5B,OAAO,KAAA,CAGT,GAAIyU,CAAAA,CAAO,KAAM,CACf,IAAMyH,CAAM1J,CAAAA,CAAAA,CAAQ,WAElBiC,CAAO,CAAA,IAAI,CAEb,CAAA,GAAI,YAAayH,CAAO,EAAA,IAAA,GAAQA,CAAK,CAAA,CACnC,IAAIc,CAAAA,CAMJ,GAJI,IAAA,GAAQd,IACVc,CAAYd,CAAAA,CAAAA,CAAI,MAGd,CAAA,CAAA,CAACc,EAAW,CAEd,IAAM1d,CAAUqa,CAAAA,EAAAA,CAAgB,CAAE,OAASuC,CAAAA,CAAAA,CAAI,OAAQ,CAAC,CACpD5c,CAAAA,CAAAA,EAAS,MACX0d,GAAAA,CAAAA,CAAY1d,EAAQ,MAExB,EAAA,CAEA,OAAK0d,CAAAA,CAIEO,GAAgB,CACrB,OAAA,CAAA/K,CACA,CAAA,IAAA,CAAAxS,EACA,MAAQgd,CAAAA,CACV,CAAC,CAAA,CAPQ,KAQX,CAEA,OAAOO,EAAAA,CAAgB,CACrB,OAAA/K,CAAAA,CAAAA,CACA,IAAAxS,CAAAA,CAAAA,CACA,OAAQkc,CACV,CAAC,CACH,CAEA,QAAWlc,CAAQyU,IAAAA,CAAAA,CAAO,UAKxB,CAAA,GAJyBqF,CACvBtH,CAAAA,CAAAA,CAAQ,MAAO,CAAA,KAAA,CAAM,UACvB,CAEqB,CAAA,IAAA,CAAKxS,CAAI,CAAA,CAAG,CAC/B,IAAM8N,CAAAA,CAAW2G,CAAO,CAAA,UAAA,CAAWzU,CAAI,CAEvC,CAAA,GAAI,OAAO8N,CAAAA,EAAa,SAAW,CAAA,CAEjC,IAAMsT,CAAAA,CAAcH,GAAe,CAAE,MAAA,CAAQnT,CAAS,CAAC,EAEvD,GAAI,CAACsT,CAAY,CAAA,MAAA,CAAQ,CAEvB,IAAME,CAAAA,CAAAA,CADqBxT,CAAS,CAAA,KAAA,EAASA,CAAS,CAAA,KAAA,EACG,EAAC,EAAG,OAC1D2G,CAAWA,EAAAA,CAAAA,CAAO,IAAS,GAAA,MAC9B,EACA,GAAI6M,CAAAA,CAA0B,MAAW,GAAA,CAAA,CAAG,CAC1C,IAAMF,CAAAA,CAAcH,EAAe,CAAA,CACjC,OAAQK,CAA0B,CAAA,CAAC,CACrC,CAAC,EACD,GAAIhE,EAAAA,CAAiB8D,CAAW,CAAA,CAC9B,OAAOphB,CAEX,CACF,CAEA,GAAIsd,GAAiB8D,CAAW,CAAA,CAC9B,OAAOphB,CAEX,CACF,CAGF,IAAWyd,IAAAA,CAAAA,IAAShJ,EAAO,KAAS,EAAA,EAAI,CAAA,CACtC,IAAMiJ,CAAaH,CAAAA,EAAAA,CAAgB,CACjC,OAAA,CAAA/K,EACA,IAAAxS,CAAAA,CAAAA,CACA,MAAQyd,CAAAA,CACV,CAAC,CAAA,CACD,GAAIC,CAAAA,CACF,OAAOA,CAEX,CAEA,OAAO,MACT,ECjGA,IAAMC,EAAAA,CAAsB,CAAC,CAC3B,YAAAC,CACA,CAAA,SAAA,CAAAlL,CACF,CAAA,GAGM,CACAA,CAAAA,CAAU,UAAe,GAAA,MAAA,GAC3BkL,EAAY,UAAalL,CAAAA,CAAAA,CAAU,UAGjCA,CAAAA,CAAAA,CAAAA,CAAU,cACZkL,CAAY,CAAA,WAAA,CAAclL,CAAU,CAAA,WAAA,CAAA,CAGlCA,EAAU,OACZkL,GAAAA,CAAAA,CAAY,OAAUlL,CAAAA,CAAAA,CAAU,OAG9BA,CAAAA,CAAAA,CAAAA,CAAU,IAAM,EAAA,MAAA,GAClBkL,EAAY,IAAOlL,CAAAA,CAAAA,CAAU,IAEjC,EAAA,CAAA,CAEMmL,GAAkB,CAAC,CACvB,MAAAhF,CAAAA,CAAAA,CACA,UAAAnG,CACA,CAAA,IAAA,CAAAtG,CACF,CAAA,GAE0B,CACxB,IAAMwR,CAAkC,CAAA,CACtC,GAAIlL,CAAU,CAAA,EAAA,CACd,MAAAmG,CAAAA,CAAAA,CACA,KAAAzM,CACF,CAAA,CAEA,OAAAuR,EAAAA,CAAoB,CAClB,WAAAC,CAAAA,CAAAA,CACA,SAAAlL,CAAAA,CACF,CAAC,CAAA,CAEMkL,CACT,CAAA,CAEME,GAAyB,CAAC,CAC9B,OAAAtL,CAAAA,CAAAA,CACA,OAAAqG,CACA,CAAA,SAAA,CAAAnG,CACA,CAAA,IAAA,CAAAtG,EACA,kBAAA2R,CAAAA,CACF,CAI0B,GAAA,CACxB,IAAMH,CAAAA,CAAcC,EAAgB,CAAA,CAAE,OAAAhF,CAAQ,CAAA,SAAA,CAAAnG,CAAW,CAAA,IAAA,CAAAtG,CAAK,CAAC,CAAA,CAM/D,GAJIsG,CAAAA,CAAU,aACZkL,CAAY,CAAA,UAAA,CAAalL,CAAU,CAAA,UAAA,CAAA,CAGjCA,EAAU,WAAa,CAAA,CACzB,IAAM0L,CAAAA,CACJ,SAAU1L,CAAU,CAAA,WAAA,CAChBF,CAAQ,CAAA,UAAA,CAA8BE,EAAU,WAAY,CAAA,IAAI,CAChEA,CAAAA,CAAAA,CAAU,YACVpT,CAAUqa,CAAAA,EAAAA,CAAgB,CAC9B,OAAA,CAASyE,CAAY,CAAA,OACvB,CAAC,CAAA,CACD,GAAI9e,CAAS,CAAA,CACX,IAAMoe,CAAAA,CAAaH,GAAgB,CACjC,OAAA,CAAA/K,CACA,CAAA,IAAA,CAAM,GACN,MAAQ,CAAA,CACN,WAAa4L,CAAAA,CAAAA,CAAY,WACzB,CAAA,GAAG9e,CAAQ,CAAA,MACb,CACF,CAAC,CAAA,CAEDse,CAAY,CAAA,IAAA,CAAO,CACjB,SAAWte,CAAAA,CAAAA,CAAQ,SACnB,CAAA,MAAA,CAAQ6b,EAAiB,CACvB,OAAA,CAAA3I,CACA,CAAA,MAAA,CAAQ,CACN,WAAA,CAAa4L,CAAY,CAAA,WAAA,CACzB,GAAI,MAAU1L,GAAAA,CAAAA,CAAU,WACpBA,CAAAA,CAAAA,CAAU,YACVpT,CAAQ,CAAA,MACd,CACA,CAAA,KAAA,CAAO,MACT,CAAC,CACH,CAEIoe,CAAAA,CAAAA,GACFE,CAAY,CAAA,IAAA,CAAK,UAAaF,CAAAA,CAAAA,CAAAA,CAG5BU,EAAY,QACdR,GAAAA,CAAAA,CAAY,IAAK,CAAA,QAAA,CAAWQ,EAAY,QAGtC9e,CAAAA,CAAAA,CAAAA,CAAQ,IACVse,GAAAA,CAAAA,CAAY,KAAK,IAAOte,CAAAA,CAAAA,CAAQ,IAEpC,EAAA,CACF,CAEA,IAAA,IAAWU,CAAQ0S,IAAAA,CAAAA,CAAU,UAAW,CACjCkL,CAAAA,CAAY,SACfA,GAAAA,CAAAA,CAAY,UAAY,EAAC,CAAA,CAG3B,IAAM5e,CAAAA,CAAW0T,EAAU,SAAU1S,CAAAA,CAAI,CACnCqe,CAAAA,CAAAA,CACJ,MAAUrf,GAAAA,CAAAA,CACNwT,CAAQ,CAAA,UAAA,CAA2BxT,EAAS,IAAI,CAAA,CAChDA,CACAM,CAAAA,CAAAA,CAAUqa,GAAgB,CAC9B,OAAA,CAAS0E,CAAe,CAAA,OAC1B,CAAC,CAEG/e,CAAAA,CAAAA,CACFse,CAAY,CAAA,SAAA,CAAU5d,CAAI,CAAA,CAAI,CAC5B,SAAA,CAAWV,EAAQ,SACnB,CAAA,MAAA,CAAQ6b,CAAiB,CAAA,CACvB,QAAA3I,CACA,CAAA,MAAA,CAAQ,CACN,WAAA,CAAa6L,EAAe,WAC5B,CAAA,GAAG3E,EAAgB,CAAA,CAAE,QAAApa,CAAQ,CAAC,CAChC,CAAA,CACA,MAAO,MACT,CAAC,CACH,CAAA,CAEAse,EAAY,SAAU5d,CAAAA,CAAI,CAAI,CAAA,CAC5B,OAAQ,CACN,WAAA,CAAaqe,CAAe,CAAA,WAAA,CAG5B,IAAMre,CAAAA,CAAAA,GAAS,KAAQ,CAAA,MAAA,CAAS,SAClC,CACF,EAEJ,CAEA,GAAI0S,EAAU,QAAU,CAAA,CACtB,IAAM4L,CAAAA,CAAkD,EAExD,CAAA,IAAA,IAAWC,CAA6B7L,IAAAA,CAAAA,CAAU,QAChD,CAAA,IAAA,IAAW1S,CAAQue,IAAAA,CAAAA,CAA2B,CAC5C,IAAMC,CAAAA,CAAuBT,CAAmB,CAAA,GAAA,CAAI/d,CAAI,CAEnDwe,CAAAA,CAAAA,EAILF,CAAsB,CAAA,IAAA,CAAKE,CAAoB,EACjD,CAGEF,CAAsB,CAAA,MAAA,GACxBV,CAAY,CAAA,QAAA,CAAWU,CAE3B,EAAA,CAKA,OAAOV,CACT,CAAA,CAEac,EAAiB,CAAA,CAAC,CAC7B,OAAAlM,CAAAA,CAAAA,CACA,MAAAqG,CAAAA,CAAAA,CACA,UAAAnG,CACA,CAAA,YAAA,CAAAoG,CACA,CAAA,IAAA,CAAA1M,CACA,CAAA,kBAAA,CAAA2R,CACF,CAAA,GAUM,CACJnF,EAAwB,CAAA,CACtB,OAAApG,CAAAA,CAAAA,CACA,GAAIE,CAAU,CAAA,WAAA,CACd,MAAAmG,CAAAA,CAAAA,CACA,aAAAC,CACA,CAAA,IAAA,CAAA1M,CACF,CAAC,CAEIoG,CAAAA,CAAAA,CAAQ,EAAG,CAAA,KAAA,GACdA,EAAQ,EAAG,CAAA,KAAA,CAAQ,EAAC,CAAA,CAGjBA,EAAQ,EAAG,CAAA,KAAA,CAAMpG,CAAI,CAAA,GACxBoG,EAAQ,EAAG,CAAA,KAAA,CAAMpG,CAAI,CAAA,CAAI,EAAC,CAAA,CAGxBsG,CAAU,CAAA,OAAA,GACZF,EAAQ,EAAG,CAAA,OAAA,CAAU,CAAC,GAAIA,EAAQ,EAAG,CAAA,OAAA,EAAW,EAAC,CAAI,GAAGE,CAAU,CAAA,OAAO,CAG3EA,CAAAA,CAAAA,CAAAA,CAAU,EAAKsG,CAAAA,EAAAA,CAAc,CAC3B,OAAA,CAAAxG,EACA,EAAIE,CAAAA,CAAAA,CAAU,WACd,CAAA,MAAA,CAAAmG,EACA,IAAAzM,CAAAA,CACF,CAAC,CAAA,CAEDoG,EAAQ,EAAG,CAAA,KAAA,CAAMpG,CAAI,CAAA,CAAEyM,CAAM,CAAIiF,CAAAA,EAAAA,CAAuB,CACtD,OAAA,CAAAtL,EACA,MAAAqG,CAAAA,CAAAA,CACA,SAAAnG,CAAAA,CAAAA,CACA,KAAAtG,CACA,CAAA,kBAAA,CAAA2R,CACF,CAAC,EACH,CCtOA,CAAA,IAAMwC,EACJzB,CAAAA,CAAAA,EACwB,CACxB,OAAQA,CAAK,EAEX,KAAK,OACH,CAAA,OAAO,MACT,CAAA,QACE,MACJ,CACF,CAAA,CAKMH,EAAkBQ,CAAAA,CAAAA,EAAuD,CAC7E,OAAQA,CAAAA,EAGN,KAAK,YACL,CAAA,KAAK,MACH,CAAA,OAAO,MACT,QACE,OAAO,MACX,CACF,EAKMN,EACJC,CAAAA,CAAAA,EACuC,CACvC,OAAQA,GACN,KAAK,QACL,CAAA,KAAK,MACH,CAAA,OAAO,QACT,CAAA,KAAK,SACL,KAAK,OAAA,CACH,OAAO,MACX,CACF,CAEaC,CAAAA,EAAAA,CAA0B,CAAC,CACtC,QAAAvM,CACA,CAAA,UAAA,CAAAnN,CACF,CAAA,GAGuC,CACrC,GAAI,CAACA,CAAAA,EAAc,CAAC,MAAO,CAAA,IAAA,CAAKA,CAAU,CAAA,CAAE,OAC1C,OAGF,IAAM2Z,CAAwC,CAAA,GAE9C,IAAWC,IAAAA,CAAAA,IAAwB5Z,CAAY,CAAA,CAC7C,IAAMC,CAAAA,CACJ,MAAU2Z,GAAAA,CAAAA,CACNzM,EAAQ,UAA4ByM,CAAAA,CAAAA,CAAqB,IAAI,CAAA,CAC7DA,EAEDD,CAAiB1Z,CAAAA,CAAAA,CAAU,EAAE,CAAA,GAChC0Z,EAAiB1Z,CAAU,CAAA,EAAE,CAAI,CAAA,EAGnC0Z,CAAAA,CAAAA,CAAAA,CAAiB1Z,CAAU,CAAA,EAAE,EAAGA,CAAU,CAAA,IAAI,CAAI4Z,CAAAA,EAAAA,CAAuB,CACvE,OAAA1M,CAAAA,CAAAA,CACA,SAAAlN,CAAAA,CACF,CAAC,EACH,CAEA,OAAO0Z,CACT,CAEME,CAAAA,EAAAA,CAAyB,CAAC,CAC9B,QAAA1M,CACA,CAAA,SAAA,CAAAlN,CACF,CAAA,GAG0B,CAExB,IAAImP,CAAAA,CAASnP,CAAU,CAAA,MAAA,CAEvB,GAAI,CAACmP,CAAAA,CAAQ,CACX,IAAMnV,EAAUqa,EAAgB,CAAA,CAC9B,OAASrU,CAAAA,CAAAA,CAAU,OACrB,CAAC,CAAA,CACGhG,CACFmV,GAAAA,CAAAA,CAASnV,EAAQ,MAErB,EAAA,CAEA,IAAMke,CAAAA,CAA4B,CAChC,UAAYlY,CAAAA,CAAAA,CAAU,UACtB,CAAA,WAAA,CAAaA,CAAU,CAAA,WAAA,CACvB,GAAGmP,CACL,EAEMiJ,CAAaH,CAAAA,EAAAA,CAAgB,CACjC,OAAA,CAAA/K,EACA,IAAMlN,CAAAA,CAAAA,CAAU,IAChB,CAAA,MAAA,CAAQkY,CACV,CAAC,CAAA,CAEK2B,CAAQ7Z,CAAAA,CAAAA,CAAU,KAASuZ,EAAAA,EAAAA,CAAavZ,CAAU,CAAA,EAAE,EACpDkb,CACJlb,CAAAA,CAAAA,CAAU,OAAY,GAAA,MAAA,CAAYA,EAAU,OAAUqZ,CAAAA,EAAAA,CAAeQ,CAAK,CAAA,CAMtEC,EAAkC,CACtC,aAAA,CALA9Z,CAAU,CAAA,aAAA,GAAkB,MACxBA,CAAAA,CAAAA,CAAU,aACVib,CAAAA,EAAAA,CAAqBjb,EAAU,EAAE,CAAA,CAIrC,OAAAkb,CAAAA,CAAAA,CACA,SAAUlb,CAAU,CAAA,EAAA,CACpB,IAAMA,CAAAA,CAAAA,CAAU,KAChB,MAAQ6V,CAAAA,CAAAA,CAAiB,CACvB,OAAA,CAAA3I,CACA,CAAA,MAAA,CAAQgL,CACR,CAAA,KAAA,CAAO,MACT,CAAC,CAAA,CACD,KAAA2B,CAAAA,CACF,EAEA,OAAI7Z,CAAAA,CAAU,UACZ8Z,GAAAA,CAAAA,CAAY,WAAa9Z,CAAU,CAAA,UAAA,CAAA,CAGjCA,CAAU,CAAA,WAAA,GACZ8Z,CAAY,CAAA,WAAA,CAAc9Z,CAAU,CAAA,WAAA,CAAA,CAGlCoY,IACF0B,CAAY,CAAA,UAAA,CAAa1B,CAGvBpY,CAAAA,CAAAA,CAAAA,CAAU,WACZ8Z,CAAY,CAAA,QAAA,CAAW9Z,CAAU,CAAA,QAAA,CAAA,CAG5B8Z,CACT,CAEaqB,CAAAA,EAAAA,CAAiB,CAAC,CAC7B,IAAAzQ,CAAAA,CAAAA,CACA,OAAAwC,CAAAA,CAAAA,CACA,UAAAlN,CACF,CAAA,GAIM,CACCkN,CAAAA,CAAQ,GAAG,UACdA,GAAAA,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAa,EAGrBA,CAAAA,CAAAA,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAW,UACzBA,GAAAA,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAW,WAAa,EAAC,CAAA,CAGtCA,CAAQ,CAAA,EAAA,CAAG,WAAW,UAAWtC,CAAAA,CAAAA,CAAUF,CAAI,CAAC,EAAIkP,EAAuB,CAAA,CACzE,OAAA1M,CAAAA,CAAAA,CACA,UAAAlN,CACF,CAAC,EACH,CAAA,CC/KA,IAAMob,EAA6B,CAAA,CAAC,CAClC,OAAA,CAAAlO,EACA,WAAA4L,CAAAA,CACF,CAG4B,GAAA,CAE1B,IAAM9e,CAAUqa,CAAAA,EAAAA,CAAgB,CAC9B,OAAA,CAASyE,CAAY,CAAA,OACvB,CAAC,CAAA,CACK3J,EAASnV,CAAUA,CAAAA,CAAAA,CAAQ,MAAS,CAAA,MAAA,CAEpCke,EAA4B,CAChC,WAAA,CAAaY,CAAY,CAAA,WAAA,CACzB,GAAG3J,CACL,CAAA,CAEMkM,CAAsC,CAAA,CAC1C,MAAQxF,CAAAA,CAAAA,CAAiB,CACvB,OAAA,CAAA3I,EACA,MAAQgL,CAAAA,CAAAA,CACR,KAAO,CAAA,MACT,CAAC,CACH,CAAA,CAEA,OAAIY,CAAAA,CAAY,cACduC,CAAc,CAAA,WAAA,CAAcvC,CAAY,CAAA,WAAA,CAAA,CAGtCA,CAAY,CAAA,QAAA,GACduC,CAAc,CAAA,QAAA,CAAWvC,EAAY,QAGhCuC,CAAAA,CAAAA,CACT,CAEaC,CAAAA,EAAAA,CAAmB,CAAC,CAC/B,IAAA,CAAA5Q,CACA,CAAA,OAAA,CAAAwC,EACA,WAAA4L,CAAAA,CACF,CAIM,GAAA,CACC5L,EAAQ,EAAG,CAAA,UAAA,GACdA,CAAQ,CAAA,EAAA,CAAG,WAAa,EAAC,CAAA,CAGtBA,CAAQ,CAAA,EAAA,CAAG,WAAW,aACzBA,GAAAA,CAAAA,CAAQ,EAAG,CAAA,UAAA,CAAW,cAAgB,EAAC,CAAA,CAGzCA,CAAQ,CAAA,EAAA,CAAG,UAAW,CAAA,aAAA,CAActC,CAAUF,CAAAA,CAAI,CAAC,CACjD0Q,CAAAA,EAAAA,CAA2B,CACzB,OAAA,CAAAlO,EACA,WAAA4L,CAAAA,CACF,CAAC,EACL,EC9DO,IAAMiB,EAAAA,CAAe,CAAC,CAAE,OAAA7M,CAAAA,CAAQ,CAA+B,GAAA,CACpE,GAAIA,CAAQ,CAAA,IAAA,CAAK,OAAS,CAAA,CACxBA,EAAQ,EAAG,CAAA,OAAA,CAAUA,CAAQ,CAAA,IAAA,CAAK,QAClC,MACF,CAEA,GAAI,OAAOA,CAAQ,CAAA,MAAA,CAAO,KAAM,CAAA,IAAA,EAAS,SAAU,CACjD,IAAMkB,CAAMjE,CAAAA,EAAAA,CAAS+C,EAAQ,MAAO,CAAA,KAAA,CAAM,IAAI,CAAA,CAC9CA,EAAQ,EAAG,CAAA,OAAA,CAAU,CACnB,CACE,IAAK,CAAGkB,EAAAA,CAAAA,CAAI,QAAW,CAAA,CAAA,EAAGA,EAAI,QAAQ,CAAA,GAAA,CAAA,CAAQ,EAAE,CAAA,EAAGA,EAAI,IAAI,CAAA,EAAGA,CAAI,CAAA,IAAA,CAAO,IAAIA,CAAI,CAAA,IAAI,CAAK,CAAA,CAAA,EAAE,CAC9F,CAAA,CACF,EACF,CAEKlB,EAAQ,EAAG,CAAA,OAAA,GACdA,CAAQ,CAAA,EAAA,CAAG,QAAU,CACnB,CACE,GAAK,CAAA,GACP,CACF,CAEJ,EAAA,CAAA,CCRO,IAAM+O,EAAAA,CAAe/O,CAAuC,EAAA,CACjE,IAAMsG,CAAAA,CAAe,IAAI,GACnBiF,CAAAA,CAAAA,CAAqB,IAAI,GAAA,CAEzBlG,EAAiBK,EAAc1F,CAAAA,CAAAA,CAAQ,MAAO,CAAA,KAAA,CAAM,OAAO,CAC3DsF,CAAAA,CAAAA,CAAiBI,EAAc1F,CAAAA,CAAAA,CAAQ,MAAO,CAAA,KAAA,CAAM,OAAO,CAAA,CAE3DiN,EAAmB,CAACzP,CAAAA,CAAcyE,CACtCmD,GAAAA,EAAAA,CAAc,CACZ,IAAA5H,CAAAA,CAAAA,CACA,cAAA6H,CAAAA,CAAAA,CACA,eAAAC,CACA,CAAA,MAAA,CAAArD,CACF,CAAC,CAGH,CAAA,GAAIjC,CAAQ,CAAA,IAAA,CAAK,WAAY,CAC3B,IAAA,IAAWxS,CAAQwS,IAAAA,CAAAA,CAAQ,KAAK,UAAW,CAAA,eAAA,CAAiB,CAC1D,IAAMsO,EACJtO,CAAQ,CAAA,IAAA,CAAK,UAAW,CAAA,eAAA,CAAgBxS,CAAI,CAAA,CACxCwe,CACJ,CAAA,MAAA,GAAUsC,EACNtO,CAAQ,CAAA,UAAA,CAAiCsO,CAAoB,CAAA,IAAI,EACjEA,CACN/C,CAAAA,CAAAA,CAAmB,GAAI/d,CAAAA,CAAAA,CAAMwe,CAAoB,EACnD,CAEA,IAAWxe,IAAAA,CAAAA,IAAQwS,CAAQ,CAAA,IAAA,CAAK,UAAW,CAAA,UAAA,CAAY,CACrD,IAAMxC,CAAAA,CAAO,CAA2BhQ,wBAAAA,EAAAA,CAAI,GACtCif,CAAuBzM,CAAAA,CAAAA,CAAQ,IAAK,CAAA,UAAA,CAAW,WAAWxS,CAAI,CAAA,CAC9DsF,CACJ,CAAA,MAAA,GAAU2Z,CACNzM,CAAAA,CAAAA,CAAQ,UAA4ByM,CAAAA,CAAAA,CAAqB,IAAI,CAC7DA,CAAAA,CAAAA,CAEDQ,CAAiBzP,CAAAA,CAAAA,CAAM1K,CAAS,CAIrCmb,EAAAA,EAAAA,CAAe,CACb,IAAA,CAAAzQ,EACA,OAAAwC,CAAAA,CAAAA,CACA,SAAAlN,CAAAA,CACF,CAAC,EACH,CAEA,IAAWtF,IAAAA,CAAAA,IAAQwS,EAAQ,IAAK,CAAA,UAAA,CAAW,aAAe,CAAA,CACxD,IAAMxC,CAAO,CAAA,CAAA,2BAAA,EAA8BhQ,CAAI,CAAA,CAAA,CACzC+gB,EACJvO,CAAQ,CAAA,IAAA,CAAK,UAAW,CAAA,aAAA,CAAcxS,CAAI,CAAA,CACtCoe,CACJ,CAAA,MAAA,GAAU2C,EACNvO,CAAQ,CAAA,UAAA,CAA8BuO,CAAuB,CAAA,IAAI,EACjEA,CAEDtB,CAAAA,CAAAA,CAAiBzP,CAAMoO,CAAAA,CAAW,GAIvCwC,EAAiB,CAAA,CACf,IAAA5Q,CAAAA,CAAAA,CACA,OAAAwC,CAAAA,CAAAA,CACA,WAAA4L,CAAAA,CACF,CAAC,EACH,CAEA,IAAWpe,IAAAA,CAAAA,IAAQwS,EAAQ,IAAK,CAAA,UAAA,CAAW,OAAS,CAAA,CAClD,IAAMxC,CAAO,CAAA,CAAA,qBAAA,EAAwBhQ,CAAI,CAAA,CAAA,CACnCyU,CAASjC,CAAAA,CAAAA,CAAQ,IAAK,CAAA,UAAA,CAAW,QAAQxS,CAAI,CAAA,CAE9Cyf,CAAiBzP,CAAAA,CAAAA,CAAMyE,CAAM,CAIlC4I,EAAAA,EAAAA,CAAY,CACV,IAAA,CAAArN,EACA,OAAAwC,CAAAA,CAAAA,CACA,MAAAiC,CAAAA,CACF,CAAC,EACH,CACF,CAEA4K,GAAa,CAAE,OAAA,CAAA7M,CAAQ,CAAC,EAExB,IAAWpG,IAAAA,CAAAA,IAAQoG,CAAQ,CAAA,IAAA,CAAK,MAAO,CACrC,IAAMkN,CAAWlN,CAAAA,CAAAA,CAAQ,IAAK,CAAA,KAAA,CAAMpG,CAAyB,CAAA,CAEvDuT,EAAgBD,CAAS,CAAA,IAAA,CAC3B,CACE,GAAGlN,EAAQ,UAA2BkN,CAAAA,CAAAA,CAAS,IAAI,CAAA,CACnD,GAAGA,CACL,CAAA,CACAA,CAEEG,CAAAA,CAAAA,CACJ,CACE,OAAA,CAAArN,CACA,CAAA,SAAA,CAAW,CACT,WAAamN,CAAAA,CAAAA,CAAc,WAC3B,CAAA,EAAA,CAAI,GACJ,UAAYZ,CAAAA,EAAAA,CAAwB,CAClC,OAAA,CAAAvM,EACA,UAAYmN,CAAAA,CAAAA,CAAc,UAC5B,CAAC,CACD,CAAA,QAAA,CAAUnN,CAAQ,CAAA,IAAA,CAAK,SACvB,OAASmN,CAAAA,CAAAA,CAAc,OACvB,CAAA,OAAA,CAASA,EAAc,OACzB,CAAA,CACA,YAAA7G,CAAAA,CAAAA,CACA,KAAM1M,CACN,CAAA,kBAAA,CAAA2R,CACF,CAAA,CAEI+B,EAAa,CAAU1T,OAAAA,EAAAA,CAAI,CAE/BuT,OAAAA,CAAAA,CAAAA,CAAAA,CAAc,QACdF,CAAiBK,CAAAA,CAAAA,CAAYH,CAAc,CAAA,MAAM,GAEjDjB,EAAe,CAAA,CACb,GAAGmB,CAAAA,CACH,OAAQ,QACR,CAAA,SAAA,CAAW,CACT,GAAGA,CAAc,CAAA,SAAA,CACjB,GAAGF,CAAAA,CAAc,OACjB,UAAYvH,CAAAA,CAAAA,CAAuB,CACjC,MAAA,CAAQ2G,GAAwB,CAC9B,OAAA,CAAAvM,CACA,CAAA,UAAA,CAAYmN,EAAc,MAAO,CAAA,UACnC,CAAC,CAAA,CACD,MAAQE,CAAAA,CAAAA,CAAc,SAAU,CAAA,UAClC,CAAC,CACH,CACF,CAAC,CAAA,CAGH,IAAME,CAAU,CAAA,CAAA,OAAA,EAAU3T,CAAI,CAAA,IAAA,CAAA,CAC1BuT,EAAc,GAAOF,EAAAA,CAAAA,CAAiBM,CAASJ,CAAAA,CAAAA,CAAc,GAAG,CAAA,EAClEjB,EAAe,CAAA,CACb,GAAGmB,CACH,CAAA,MAAA,CAAQ,KACR,CAAA,SAAA,CAAW,CACT,GAAGA,CAAAA,CAAc,SACjB,CAAA,GAAGF,EAAc,GACjB,CAAA,UAAA,CAAYvH,CAAuB,CAAA,CACjC,MAAQ2G,CAAAA,EAAAA,CAAwB,CAC9B,OAAA,CAAAvM,EACA,UAAYmN,CAAAA,CAAAA,CAAc,GAAI,CAAA,UAChC,CAAC,CACD,CAAA,MAAA,CAAQE,CAAc,CAAA,SAAA,CAAU,UAClC,CAAC,CACH,CACF,CAAC,CAGH,CAAA,IAAMG,CAAW,CAAA,CAAA,OAAA,EAAU5T,CAAI,CAC3BuT,KAAAA,CAAAA,CAAAA,CAAAA,CAAc,IAAQF,EAAAA,CAAAA,CAAiBO,EAAUL,CAAc,CAAA,IAAI,CACrEjB,EAAAA,EAAAA,CAAe,CACb,GAAGmB,CAAAA,CACH,MAAQ,CAAA,MAAA,CACR,SAAW,CAAA,CACT,GAAGA,CAAAA,CAAc,UACjB,GAAGF,CAAAA,CAAc,IACjB,CAAA,UAAA,CAAYvH,EAAuB,CACjC,MAAA,CAAQ2G,EAAwB,CAAA,CAC9B,QAAAvM,CACA,CAAA,UAAA,CAAYmN,CAAc,CAAA,IAAA,CAAK,UACjC,CAAC,CACD,CAAA,MAAA,CAAQE,EAAc,SAAU,CAAA,UAClC,CAAC,CACH,CACF,CAAC,CAAA,CAGH,IAAMI,CAAAA,CAAc,UAAU7T,CAAI,CAAA,QAAA,CAAA,CAEhCuT,CAAc,CAAA,OAAA,EACdF,EAAiBQ,CAAaN,CAAAA,CAAAA,CAAc,OAAO,CAAA,EAEnDjB,GAAe,CACb,GAAGmB,CACH,CAAA,MAAA,CAAQ,UACR,SAAW,CAAA,CACT,GAAGA,CAAAA,CAAc,UACjB,GAAGF,CAAAA,CAAc,OACjB,CAAA,UAAA,CAAYvH,CAAuB,CAAA,CACjC,MAAQ2G,CAAAA,EAAAA,CAAwB,CAC9B,OAAAvM,CAAAA,CAAAA,CACA,UAAYmN,CAAAA,CAAAA,CAAc,QAAQ,UACpC,CAAC,CACD,CAAA,MAAA,CAAQE,EAAc,SAAU,CAAA,UAClC,CAAC,CACH,CACF,CAAC,CAGH,CAAA,IAAMK,EAAY,CAAU9T,OAAAA,EAAAA,CAAI,CAE9BuT,MAAAA,CAAAA,CAAAA,CAAAA,CAAc,OACdF,CAAiBS,CAAAA,CAAAA,CAAWP,CAAc,CAAA,KAAK,GAE/CjB,EAAe,CAAA,CACb,GAAGmB,CAAAA,CACH,MAAQ,CAAA,OAAA,CACR,SAAW,CAAA,CACT,GAAGA,CAAc,CAAA,SAAA,CACjB,GAAGF,CAAAA,CAAc,MACjB,UAAYvH,CAAAA,CAAAA,CAAuB,CACjC,MAAA,CAAQ2G,GAAwB,CAC9B,OAAA,CAAAvM,CACA,CAAA,UAAA,CAAYmN,EAAc,KAAM,CAAA,UAClC,CAAC,CAAA,CACD,OAAQE,CAAc,CAAA,SAAA,CAAU,UAClC,CAAC,CACH,CACF,CAAC,CAGH,CAAA,IAAMM,EAAW,CAAU/T,OAAAA,EAAAA,CAAI,CAC3BuT,KAAAA,CAAAA,CAAAA,CAAAA,CAAc,IAAQF,EAAAA,CAAAA,CAAiBU,CAAUR,CAAAA,CAAAA,CAAc,IAAI,CACrEjB,EAAAA,EAAAA,CAAe,CACb,GAAGmB,EACH,MAAQ,CAAA,MAAA,CACR,SAAW,CAAA,CACT,GAAGA,CAAc,CAAA,SAAA,CACjB,GAAGF,CAAAA,CAAc,IACjB,CAAA,UAAA,CAAYvH,CAAuB,CAAA,CACjC,OAAQ2G,EAAwB,CAAA,CAC9B,OAAAvM,CAAAA,CAAAA,CACA,WAAYmN,CAAc,CAAA,IAAA,CAAK,UACjC,CAAC,EACD,MAAQE,CAAAA,CAAAA,CAAc,SAAU,CAAA,UAClC,CAAC,CACH,CACF,CAAC,EAGH,IAAMO,CAAAA,CAAU,CAAUhU,OAAAA,EAAAA,CAAI,OAC1BuT,CAAc,CAAA,GAAA,EAAOF,CAAiBW,CAAAA,CAAAA,CAAST,EAAc,GAAG,CAAA,EAClEjB,EAAe,CAAA,CACb,GAAGmB,CACH,CAAA,MAAA,CAAQ,KACR,CAAA,SAAA,CAAW,CACT,GAAGA,CAAAA,CAAc,SACjB,CAAA,GAAGF,EAAc,GACjB,CAAA,UAAA,CAAYvH,CAAuB,CAAA,CACjC,OAAQ2G,EAAwB,CAAA,CAC9B,OAAAvM,CAAAA,CAAAA,CACA,UAAYmN,CAAAA,CAAAA,CAAc,GAAI,CAAA,UAChC,CAAC,CACD,CAAA,MAAA,CAAQE,CAAc,CAAA,SAAA,CAAU,UAClC,CAAC,CACH,CACF,CAAC,EAGH,IAAMmB,CAAAA,CAAY,CAAU5U,OAAAA,EAAAA,CAAI,CAE9BuT,MAAAA,CAAAA,CAAAA,CAAAA,CAAc,KACdF,EAAAA,CAAAA,CAAiBuB,EAAWrB,CAAc,CAAA,KAAK,CAE/CjB,EAAAA,EAAAA,CAAe,CACb,GAAGmB,CAAAA,CACH,MAAQ,CAAA,OAAA,CACR,UAAW,CACT,GAAGA,CAAc,CAAA,SAAA,CACjB,GAAGF,CAAAA,CAAc,KACjB,CAAA,UAAA,CAAYvH,EAAuB,CACjC,MAAA,CAAQ2G,EAAwB,CAAA,CAC9B,QAAAvM,CACA,CAAA,UAAA,CAAYmN,CAAc,CAAA,KAAA,CAAM,UAClC,CAAC,CAAA,CACD,MAAQE,CAAAA,CAAAA,CAAc,SAAU,CAAA,UAClC,CAAC,CACH,CACF,CAAC,EAEL,CACF,CAAA,CCpSO,IAAM2B,EAAoB,CAAA,uBAAA,CCI1B,IAAMC,EAAAA,CAAuB,CAAC,CACnC,MAAA,CAAA5hB,CACA,CAAA,IAAA,CAAAG,CACF,CAAA,GAIMH,CAAO,CAAA,OAAA,CAAQ,cAAc,CAAG,EAAA,kBAAA,CAC3BA,CAAO,CAAA,OAAA,CAAQ,cAAc,CAAE,CAAA,kBAAA,CAAmB,OACvD,CAAA,UAAA,CACAG,CACF,CAGKA,CAAAA,CAAAA,CAGI0hB,EAAqB1hB,CAAAA,CAAAA,EACjBiB,CAAU,EAAA,CACd,OAAQ,CAAA,qBAAqB,GAAG,KAAU,GAAA,YAAA,CAC5C4Q,CAAW,CAAA,CAChB,KAAM,YACN,CAAA,KAAA,CAAO7R,CACT,CAAC,EAEIA,CAeI2hB,CAAAA,EAAAA,CAA6B3hB,CAAiB,EAAA,CACzD,IAAM4hB,CAAAA,CAAcF,EAAkB1hB,CAAAA,CAAI,EAG1C,OAFgBuY,EAAAA,CAA0CqJ,CAAW,CAAA,CAC9C,QAAQthB,EAAkC,CAAA,KAAK,CAExE,CAAA,CCnDO,SAASuhB,EAAU1jB,CAAAA,CAAAA,CAAUkF,CAAeye,CAAAA,CAAAA,CAAmB,CACpE,OAAOA,CAAAA,CAAI,OAAQ3jB,CAAAA,CAAK,IAAMkF,CAChC,CCFO,SAAS0e,EAAAA,CAAKvH,EAAWC,CAAmB,CAAA,CACjD,IAAMuH,CAAAA,CAAQxH,EAAE,iBAAkB,EAAA,CAC5ByH,CAAQxH,CAAAA,CAAAA,CAAE,iBAAkB,EAAA,CAClC,OAAOuH,CAAAA,CAAM,cAAcC,CAAO,CAAA,IAAI,CACxC,CAEO,IAAMC,EAAe,CAAA,CAA6B1H,CAAMC,CAAAA,CAAAA,GAC7DsH,GAAKvH,CAAE,CAAA,IAAA,CAAMC,CAAE,CAAA,IAAI,CAEd,CAAA,SAAS0H,EAAuCjI,CAAAA,CAAAA,CAAiB,CACtE,OAAOA,CAAAA,CAAM,IAAKgI,CAAAA,EAAY,CAChC,CCKO,IAAME,EAAU,CAAA,CAACjkB,EAAyB4W,CAAwB,GAAA,CACvE,GAAIA,CAAAA,CACF,OAAOA,CAAAA,CAGT,GAAI,OAAO5W,GAAU,QACnB,CAAA,OAAO,CAAKA,EAAAA,EAAAA,CAAK,IAGnB,IAAID,CAAAA,CAAM,EACV,CAAA,OAAI,OAAOC,CAAU,EAAA,QAAA,GACnBD,CAAMC,CAAAA,CAAAA,CACH,OAAQ,CAAA,mCAAA,CAAqC,GAAG,CAAA,CAChD,QAAQ,uBAAyB,CAAA,KAAK,CACtC,CAAA,OAAA,CAAQ,oCAAqC,OAAO,CAAA,CAAA,CAEzDD,CAAMA,CAAAA,CAAAA,CAAI,MACLA,CAAAA,CAAAA,GACHA,CAAM,CAAA,cAAA,CAAA,CAEDA,CAAI,CAAA,WAAA,EACb,CAAA,CAEamkB,GAAiBC,CAC5BA,EAAAA,CAAAA,CACG,GAAKC,CAAAA,CAAAA,EAAe5F,GAAU4F,CAAW,CAAA,KAAA,CAAO,IAAI,CAAC,EACrD,MAAOV,CAAAA,EAAM,CACb,CAAA,IAAA,CAAK,KAAK,CAAA,CAEFlF,EAAY,CAAA,CAACxe,EAAyBqkB,CAAiB,CAAA,KAAA,GAC9D,OAAOrkB,CAAAA,EAAU,SACfA,CAAM,CAAA,QAAA,CAAS,GAAG,CAAA,EAAKqkB,EAClB,CAAIrkB,CAAAA,EAAAA,CAAK,CAEX,CAAA,CAAA,CAAA,CAAA,CAAA,EAAIA,CAAK,CAAA,CAAA,CAAA,CAEXA,CAGIskB,CAAAA,EAAAA,CAAaF,GAAqB,CAC7C,IAAMrkB,CAAMkkB,CAAAA,EAAAA,CAAQG,EAAW,KAAOA,CAAAA,CAAAA,CAAW,UAAU,CAAA,CACrDpkB,EAAQwe,EAAU4F,CAAAA,CAAAA,CAAW,KAAK,CAAA,CACxC,OAAO,CAAE,GAAA,CAAArkB,CAAK,CAAA,KAAA,CAAAC,CAAM,CACtB,CAAA,CC1BO,IAAMukB,EAAAA,CAAkBC,GAA2B,CACxD,IAAM3iB,CAAO2hB,CAAAA,EAAAA,CAA0BgB,CAAc,CAKrD,CAAA,OAJa,CACX,IAAA,CAAMnB,EAAoBmB,CAAAA,CAAAA,CAC1B,IAAA3iB,CAAAA,CACF,CAEF,CC3BO,CAAA,IAAM4iB,EAAeC,CAAAA,CAAAA,EAC1BA,EAAM,MAAW,GAAA,MAAA,EAAUA,CAAM,CAAA,MAAA,GAAW,YAExC/e,EAAQ+e,CAAAA,CAAAA,EAAiB,CAC7B,IAAMhjB,CAASoB,CAAAA,CAAAA,EAEf,CAAA,OAAI4hB,EAAM,IAAS,GAAA,QAAA,CACVlU,CAAS,CAAA,aAAA,CAAc,CAC5B,KAAO,CAAA,CAAC,MAAQ,CAAA,MAAM,CACxB,CAAC,CAAA,CAGC9O,CAAO,CAAA,OAAA,CAAQ,uBAAuB,CAAA,EAAG,KAAS+iB,EAAAA,EAAAA,CAAYC,CAAK,CAC9DlU,CAAAA,CAAAA,CAAS,QAAS,CAAA,MAAM,EAG1BA,CAAS,CAAA,QAAA,CAASkU,CAAM,CAAA,IAAI,CACrC,CAEMC,CAAAA,EAAAA,CAAiBD,CAAiB,EAAA,CAEtC,IAAMpV,CAAAA,CAAaoV,CAAM,CAAA,IAAA,GAAS,OAAS,KAAQA,CAAAA,CAAAA,CAAM,UACrDE,CAAAA,CAAAA,CAAWjf,GAAK+e,CAAK,CAAA,CAOzB,GAAIA,CAAAA,CAAM,SAAW,WAAeA,EAAAA,CAAAA,CAAM,KAAM,CAAA,MAAA,GAAW,CACrDA,EAAAA,CAAAA,CAAM,KAAM,CAAA,CAAC,EAAG,UAAWrB,CAAAA,EAAiB,CAAG,CAAA,CACjD,IAAMwB,CAAON,CAAAA,EAAAA,CAAeG,CAAM,CAAA,IAAI,EACtCE,CAAWpU,CAAAA,CAAAA,CAAS,QAASqU,CAAAA,CAAAA,CAAK,IAAI,EACxC,CAMF,OAJkBrU,EAAS,aAAc,CAAA,CACvC,UAAAlB,CAAAA,CAAAA,CACA,MAAO,CAACsV,CAAQ,CAClB,CAAC,CAEH,CAEME,CAAAA,EAAAA,CAAaJ,CAAiB,EAAA,CAClC,GAAIA,CAAAA,CAAM,IAAM,CAAA,CAEd,GAAI,KAAM,CAAA,OAAA,CAAQA,CAAM,CAAA,IAAI,EAAG,CAC7B,IAAMjd,CAAQid,CAAAA,CAAAA,CAAM,KAAK,GAAKhX,CAAAA,CAAAA,EAAMqX,EAAOrX,CAAAA,CAAC,CAAC,CAK7C,CAAA,OAJc8C,CAAS,CAAA,aAAA,CAAc,CACnC,UAAYkU,CAAAA,CAAAA,CAAM,UAClB,CAAA,KAAA,CAAAjd,CACF,CAAC,CAEH,CAGA,GACEid,EAAM,MAAW,GAAA,OAAA,EACjBA,CAAM,CAAA,QAAA,EACNA,CAAM,CAAA,QAAA,EACNA,CAAM,CAAA,QAAA,GAAaA,EAAM,QACzBA,EAAAA,CAAAA,CAAM,QAAY,EAAA,GAAA,CAClB,CACA,IAAMjd,CAAAA,CAAQ,KAAMid,CAAAA,CAAAA,CAAM,QAAQ,CAAE,CAAA,IAAA,CAAKK,EAAOL,CAAAA,CAAAA,CAAM,IAAI,CAAC,CAK3D,CAAA,OAJclU,EAAS,aAAc,CAAA,CACnC,UAAYkU,CAAAA,CAAAA,CAAM,WAClB,KAAAjd,CAAAA,CACF,CAAC,CAEH,CAEA,OAAO+I,CAAAA,CAAS,aAAc,CAAA,CAACuU,EAAOL,CAAAA,CAAAA,CAAM,IAAI,CAAC,EAAGA,CAAM,CAAA,UAAU,CACtE,CAEA,OAAOlU,CAAS,CAAA,aAAA,CAAc,CAAC7K,EAAAA,CAAK+e,CAAK,CAAC,CAAA,CAAGA,CAAM,CAAA,UAAU,CAC/D,CAEMM,CAAAA,EAAAA,CAAYN,CAAiB,EAAA,CACjC,IAAMtU,CAASsU,CAAAA,CAAAA,CAAM,IAAK,CAAA,GAAA,CAAKN,GAAe5F,EAAU4F,CAAAA,CAAAA,CAAW,KAAK,CAAC,EACzE,OAAO5T,CAAAA,CAAS,aAAc,CAAA,CAC5B,UAAYkU,CAAAA,CAAAA,CAAM,UAClB,CAAA,KAAA,CAAOtU,CACT,CAAC,CACH,CAEM6U,CAAAA,EAAAA,CAAYP,GAAiB,CACjC,IAAM7c,CACJ6c,CAAAA,CAAAA,CAAM,MAAQ,CAAC,KAAA,CAAM,OAAQA,CAAAA,CAAAA,CAAM,IAAI,CAAA,CAAIK,EAAOL,CAAAA,CAAAA,CAAM,IAAI,CAAI/e,CAAAA,EAAAA,CAAK+e,CAAK,CAAA,CAC5E,OAAOlU,CAAS,CAAA,cAAA,CAAe,CAAC,QAAQ,EAAG,CAAC3I,CAAI,CAAG6c,CAAAA,CAAAA,CAAM,UAAY,CAAA,IAAI,CAC3E,CAAA,CAEMQ,GAA0B,CAAC,CAC/B,KAAAR,CAAAA,CAAAA,CACA,MAAA1D,CACF,CAAA,GAGM,CACJ,IAAMvZ,EAAQid,CAAM,CAAA,UAAA,CACjB,GAAKA,CAAAA,CAAAA,EACQlU,EAAS,YAAa,CAAA,CAChC,IAAMuU,CAAAA,EAAAA,CAAOL,CAAK,CAClB,CAAA,QAAA,CAAU,IACZ,CAAC,CAEF,CACA,CAAA,MAAA,CAAOhB,EAAM,CAAA,CAEV/f,EACJqd,CAAU,GAAA,OAAA,CACNxQ,CAAS,CAAA,aAAA,CAAc,CAErB,UAAA,CACEkU,CAAM,CAAA,UAAA,EACN,CAACA,CAAM,CAAA,UAAA,CAAW,IAAM/U,CAAAA,CAAAA,EAAaA,EAAS,UAAU,CAAA,CAC1D,KAAAlI,CAAAA,CACF,CAAC,CACD+I,CAAAA,CAAAA,CAAS,oBAAqB,CAAA,CAC5B,UAAYkU,CAAAA,CAAAA,CAAM,UAClB,CAAA,KAAA,CAAAjd,CACF,CAAC,CAAA,CAGP,OAAIid,CAAAA,CAAM,KACD/gB,CAGF6M,CAAAA,CAAAA,CAAS,qBAAsB,CAAA,CACpC,KAAM7M,CACR,CAAC,CACH,CAAA,CAEMwhB,EAAiBT,CAAAA,CAAAA,EAAiB,CACtC,GAAI,CAACA,CAAM,CAAA,UAAA,CAAW,MACpB,CAAA,OAAOlU,EAAS,QAAS,CAAA,SAAS,CAGpC,CAAA,IAAM9O,EAASoB,CAAU,EAAA,CAEnBsiB,CAAWpiB,CAAAA,CAAAA,CAAetB,CAAM,CAAA,CAEhC2H,CAAyBqb,CAAAA,CAAAA,CAAM,WAAW,GAAK/U,CAAAA,CAAAA,EAAa,CAChE,IAAI0V,EAAgB1V,CAAS,CAAA,UAAA,CAAa,EAAK,CAAA,GAAA,CAC3C3P,EAAQ+kB,EAAOpV,CAAAA,CAAQ,CACvB9N,CAAAA,CAAAA,CAAQujB,CAKR,CAAA,QAAA,CAAS,IAAKzV,CAAAA,CAAAA,CAAS,IAAI,CACzBpN,CAAAA,EAAAA,CAAWoN,CAAS,CAAA,IAAI,EACxBA,CAAS,CAAA,IAAA,CANXpN,EAAWC,CAAAA,EAAAA,CAAa8iB,GAAqB3V,CAAS,CAAA,IAAI,CAAC,CAAC,CAQhE,CAAA,OAAIA,CAAS,CAAA,IAAA,GAAS,kBACpB9N,CAAO8N,CAAAA,CAAAA,CAAS,IACZ0V,CAAAA,CAAAA,GACFA,EAAgB,EAChBrlB,CAAAA,CAAAA,CAAQwQ,CAAS,CAAA,aAAA,CAAc,CAC7B,KAAO,CAAA,CAACxQ,CAAO,CAAA,WAAW,CAC5B,CAAC,CAGE,CAAA,CAAA,CAAA,CACL,QAAS,CACP2P,CAAAA,CAAS,WAAelN,EAAAA,CAAAA,CAAckN,EAAS,WAAW,CAAA,CAC1DA,CAAS,CAAA,UAAA,EAAc,aACzB,CACA,CAAA,UAAA,CAAYA,CAAS,CAAA,UAAA,CACrB,WAAY0V,CAAkB,GAAA,EAAA,CAC9B,IAAAxjB,CAAAA,CAAAA,CACA,KAAM7B,CACR,CACF,CAAC,CAAA,CAED,OAAOwQ,CAAS,CAAA,iBAAA,CAAkB,CAChC,UAAA,CAAYkU,EAAM,UAClB,CAAA,UAAA,CAAArb,CACA,CAAA,mBAAA,CAAqB,IACvB,CAAC,CACH,CAAA,CAEa0b,GAAUL,CAA2B,EAAA,CAChD,OAAQA,CAAAA,CAAM,QACZ,KAAK,QACH,CAAA,OAAOQ,GAAwB,CAC7B,KAAA,CAAAR,CACA,CAAA,KAAA,CAAO,cACT,CAAC,CACH,CAAA,KAAK,SACL,KAAK,QAAA,CACH,OAAOQ,EAAAA,CAAwB,CAC7B,KAAAR,CAAAA,CAAAA,CACA,KAAO,CAAA,OACT,CAAC,CACH,CAAA,KAAK,OACH,CAAA,OAAOI,EAAUJ,CAAAA,CAAK,CACxB,CAAA,KAAK,aACH,OAAOO,EAAAA,CAASP,CAAK,CAAA,CACvB,KAAK,MACH,CAAA,OAAOM,EAASN,CAAAA,CAAK,EACvB,KAAK,WAAA,CACH,OAAOS,EAAAA,CAAcT,CAAK,CAAA,CAC5B,KAAK,OAAA,CACL,KAAK,SACL,CAAA,KAAK,WACL,CAAA,QACE,OAAOC,EAAcD,CAAAA,CAAK,CAC9B,CACF,EAyBaa,EAAoB,CAAA,CAAC,CAChC,MAAA,CAAA5jB,CACA,CAAA,KAAA,CAAA+W,CAAQ,CAAA,CAAA,CACR,OAAAC,CAAS,CAAA,KAAA,CACT,IAAAkM,CAAAA,CAAAA,CACA,gBAAAjM,CACF,CAAA,GAK+B,CAC7B,IAAI/U,EAAkC,CACpC,OAAA,CAAS,KACT,CAAA,IAAA,CAAM,EACR,CAAA,CACIhC,CAAOgjB,CAAAA,CAAAA,CAAK,KACZjM,CACF/W,GAAAA,CAAAA,CAAO+W,CAAgB/W,CAAAA,CAAI,GAEzB6W,CAAQ,CAAA,CAAA,GACV7W,CAAO,CAAA,CAAA,EAAGA,CAAI,CAAG6W,EAAAA,CAAK,CAExB,CAAA,CAAA,CAAA,IAAM7Q,CAAOlG,CAAAA,CAAAA,CAAO,KAAME,CAAAA,CAAI,EAC9B,OAAKgG,CAAAA,CAQMA,CAAK,CAAA,IAAA,GAASgd,EAAK,IAC5BhhB,CAAAA,CAAAA,CAAS,CACP,OAAA,CAAS,MACT,IAAAhC,CAAAA,CACF,CAEAgC,CAAAA,CAAAA,CAAS0hB,GAAkB,CACzB,MAAA,CAAA5jB,CACA,CAAA,KAAA,CAAO+W,EAAQ,CACf,CAAA,MAAA,CAAAC,CACA,CAAA,IAAA,CAAAkM,EACA,eAAAjM,CAAAA,CACF,CAAC,CAAA,CAnBGD,IACFhX,CAAO,CAAA,KAAA,CAAME,CAAI,CAAA,CAAIgjB,CACrBhhB,CAAAA,CAAAA,CAAS,CACP,OAAA,CAAS,KACT,IAAAhC,CAAAA,CACF,CAgBGgC,CAAAA,CAAAA,CACT,EAaa2hB,EAAsB,CAAA,CAAC,CAClC,MAAA,CAAA7jB,EACA,IAAAE,CAAAA,CACF,CAGiC,GAAA,CAC/B,IAAIgC,CAAAA,CAAoC,CACtC,OAAA,CAAS,MACT,IAAM,CAAA,EACR,CACA,CAAA,OAAKlC,EAAO,KAAME,CAAAA,CAAI,CAGtB,GAAA,OAAOF,EAAO,KAAME,CAAAA,CAAI,CACxBgC,CAAAA,CAAAA,CAAS,CACP,OAAA,CAAS,IACT,CAAA,IAAA,CAAAhC,CACF,CACOgC,CAAAA,CAAAA,CACT,CAMayhB,CAAAA,EAAAA,CAAwBtlB,GAA0B,CAC7D,IAAM0B,CAASoB,CAAAA,CAAAA,GAGf,OAAKE,CAAAA,CAAetB,CAAM,CAAA,CAIbgS,CAAW,CAAA,CACtB,IAAM,CAAA,WAAA,CACN,MAAO6G,EAA+Bva,CAAAA,CAAK,CAC7C,CAAC,EAAE,OAAQmC,CAAAA,EAAAA,CAAkC,KAAK,CAAA,CANzCnC,CAQX,CC9UO,CAAA,IAAMylB,EAAmBlR,CAAAA,CAAAA,EAIT,CAAGA,EAAAA,CAAAA,CAAU,MAAO,CAAA,WAAA,EAAa,CAAIA,CAAAA,EAAAA,CAAAA,CAAU,IAAI,CAAA,CAAA,CAoBnE,IAAMmR,EACXxe,CAAAA,CAAAA,EAEmBA,CAAW,CAAA,IAAA,CAAMC,GAAcA,CAAU,CAAA,UAAU,CC0BjE,CAAA,IAAMwe,EAAmB,CAAA,CAAC,CAC/B,MAAA,CAAAjkB,EACA,IAAAuQ,CAAAA,CACF,CAG8B,GAAA,CAC5B,IAAMoC,CAAU,CAAA,IAAI2E,EAAU,CAAA,CAC5B,OAAAtX,CACA,CAAA,IAAA,CAAMuQ,CACR,CAAC,CAED,CAAA,GAAI,SAAaoC,GAAAA,CAAAA,CAAQ,KACvB,OAAAgN,EAAAA,CAAYhN,CAAqC,CAAA,CAC1CA,EAGT,OAAQA,CAAAA,CAAQ,IAAK,CAAA,OAAA,EACnB,KAAK,OAAA,CACL,KAAK,OAAA,CACL,KAAK,OACL,CAAA,KAAK,OACL,CAAA,KAAK,QACH,OAAAqO,EAAAA,CAAYrO,CAAqC,CAAA,CAC1CA,EACT,KAAK,OAAA,CACL,KAAK,OAAA,CACH,OAAA+O,EAAY/O,CAAAA,CAAqC,CAC1CA,CAAAA,CAAAA,CAGX,CAEA,MAAM,IAAI,KAAM,CAAA,mCAAmC,CACrD,ECzFA,IAAMuR,EAA0B,CAAA,CAC9BtP,CACAuP,CAAAA,CAAAA,GACW,CACX,IAAMnkB,CAAAA,CAASoB,CAAU,EAAA,CAEzB,GAAI,KAAA,CAAM,OAAQwT,CAAAA,CAAM,EACtB,OAAOA,CAAAA,CAAO,GAAKzK,CAAAA,CAAAA,EAAS+Z,GAAwB/Z,CAAI,CAAC,CAG3D,CAAA,GAAI,OAAOyK,CAAW,EAAA,QAAA,EAAYA,CAAW,GAAA,IAAA,CAC3C,OAAOA,CAAAA,CAGT,IAAMzS,CAAAA,CAAS,CAAE,GAAGyS,CAAO,CAC3B,CAAA,OAAA,MAAA,CAAO,QAAQzS,CAAM,CAAA,CAAE,OAAQ,CAAA,CAAC,CAAC9D,CAAKC,CAAAA,CAAK,CAAM,GAAA,CAC/C,GAAI0B,CAAO,CAAA,OAAA,CAAQ,kBAAkB,CAAA,EAAG,OAAS,MAE7C,EAAA,CACE,aACA,CAAA,qBAAA,CACA,kBACA,aACA,CAAA,OACF,CAAE,CAAA,QAAA,CAAS3B,CAAG,CACd8lB,EAAAA,CAAAA,GAAc,YACd,CAAA,CAEA,OAAOhiB,CAAAA,CAAO9D,CAAG,CAAA,CACjB,MACF,CAKEA,CAAAA,GAAQ,MAAU,EAAA,OAAOC,GAAU,QAErC6D,GAAAA,CAAAA,CAAO9D,CAAG,CAAA,CAAI,mBAAmBC,CAAK,CAAA,CAAA,CAGpCA,CAAS,EAAA,OAAOA,CAAU,EAAA,QAAA,GAE5B6D,CAAO9D,CAAAA,CAAG,EAAI6lB,EAAwB5lB,CAAAA,CAAAA,CAAOD,CAAG,CAAA,EAEpD,CAAC,CACM8D,CAAAA,CACT,CAEMiiB,CAAAA,EAAAA,CAAe,CACnBjkB,CACAyU,CAAAA,CAAAA,GACW,CACX,IAAM5U,CAASoB,CAAAA,CAAAA,EAETijB,CAAAA,CAAAA,CAAY3L,GAA0CvY,CAAI,CAAA,CAEhE,OAAIH,CAAAA,CAAO,QAAQ,kBAAkB,CAAA,EAAG,WAC/BA,CAAAA,CAAAA,CAAO,QAAQ,kBAAkB,CAAA,CAAE,WAAYqkB,CAAAA,CAAAA,CAAWzP,CAAM,CAGlE,CAAA,CAAA,EAAGyP,CAAS,CAAA,MAAA,CACrB,EAEaC,EAA8C,CAAA,CAAC,CAC1D,KAAA,CAAAC,EACA,OAAAC,CAAAA,CACF,CAAM,GAAA,CACJ,IAAMxkB,CAASoB,CAAAA,CAAAA,EAEfmjB,CAAAA,CAAAA,CAAM,OAAU,CAAA,IAAIhP,EAAe,CAAA,CACjC,IAAKvV,CAAO,CAAA,MAAA,CAAO,IACnB,CAAA,IAAA,CAAM,YACR,CAAC,CAAA,CAED,IAAMykB,CAAAA,CAAY,CAChBtkB,CACAyU,CAAAA,CAAAA,GACG,CACH,IAAMlN,CAAMwc,CAAAA,EAAAA,CAAwBtP,CAAM,CAAA,CACpCtQ,EAAawK,CAAS,CAAA,gBAAA,CAAiB,CAAE,GAAA,CAAApH,CAAI,CAAC,CAAA,CAC9CgC,CAAYoF,CAAAA,CAAAA,CAAS,cAAc,CACvC,SAAA,CAAW,OACX,CAAA,WAAA,CAAa,IACb,CAAA,UAAA,CAAAxK,CACA,CAAA,IAAA,CAAM8f,GAAajkB,CAAMyU,CAAAA,CAAM,CACjC,CAAC,EACD2P,CAAM,CAAA,OAAA,CAAS,GAAI7a,CAAAA,CAAS,EAC9B,CAGI,CAAA,SAAA,GAAa8a,CACf,EAAA,MAAA,CAAO,OAAQA,CAAAA,CAAAA,CAAQ,WAAe,EAAA,EAAE,CAAE,CAAA,OAAA,CAAQ,CAAC,CAACrkB,EAAMukB,CAAU,CAAA,GAAM,CACxED,CAAAA,CAAUtkB,EAAMukB,CAAU,EAC5B,CAAC,CAAA,CAIC,SAAaF,GAAAA,CAAAA,EACf,MAAO,CAAA,OAAA,CAAQA,EAAQ,UAAY,EAAA,OAAA,EAAW,EAAE,EAAE,OAChD,CAAA,CAAC,CAACrkB,CAAAA,CAAMyU,CAAM,CAAM,GAAA,CAClB6P,CAAUtkB,CAAAA,CAAAA,CAAMyU,CAAM,EACxB,CACF,EAEJ,EC3GO,IAAMN,EAAAA,CAAuC,CAClD,QAAA,CAAUgB,GACV,cAAgBgP,CAAAA,EAAAA,CAChB,eAAiB,CAAA,KAAA,CACjB,KAAM,kBACN,CAAA,WAAA,CAAcnkB,CAAS,EAAA,CAAA,EAAGA,CAAI,CAAA,MAAA,CAAA,CAC9B,MAAQ,CAAA,SAAA,CACR,KAAM,MACR,CAAA,CCVO,IAAMwkB,EAAAA,CACXC,GACY,CACZ,IAAA,IAAWzkB,CAAQykB,IAAAA,CAAAA,CACjB,GAAIA,CAAezkB,CAAAA,CAAI,CAAG,CAAA,QAAA,CACxB,OAAO,KAIX,CAAA,OAAO,MACT,CAAA,CAEa0kB,GACXrf,CAEKA,EAAAA,CAAAA,CAID,CAAAmf,EAAAA,EAAAA,CAAgCnf,EAAW,MAAM,CAAA,EAIjDmf,EAAgCnf,CAAAA,CAAAA,CAAW,MAAM,CAIjDmf,EAAAA,EAAAA,CAAgCnf,CAAW,CAAA,IAAI,CAI/Cmf,EAAAA,EAAAA,CAAgCnf,CAAW,CAAA,KAAK,GAf3C,KAsBEsf,CAAAA,EAAAA,CACXtf,CAC2B,EAAA,CAC3B,GAAKA,CAIL,CAAA,CAAA,IAAA,IAAWrF,CAAQqF,IAAAA,CAAAA,CAAW,OAAQ,CACpC,IAAMC,CAAYD,CAAAA,CAAAA,CAAW,MAAOrF,CAAAA,CAAI,CACxC,CAAA,GAAIsF,EAAU,UACZ,CAAA,OAAO,CACL,EAAA,CAAIA,EAAU,QACd,CAAA,IAAA,CACEA,CAAU,CAAA,UAAA,GAAe,KACrBtF,CACA,CAAA,CAAA,EAAGA,CAAI,CAAA,CAAA,EAAIsF,CAAU,CAAA,UAAU,CACrC,CAAA,CAAA,MAAA,CACEA,EAAU,UAAe,GAAA,IAAA,CACrBA,CAAU,CAAA,MAAA,CACVA,EAAU,MAAO,CAAA,UAAA,CAAYA,CAAU,CAAA,UAAU,CACzD,CAEJ,CAEA,IAAWtF,IAAAA,CAAAA,IAAQqF,CAAW,CAAA,MAAA,CAAQ,CACpC,IAAMC,EAAYD,CAAW,CAAA,MAAA,CAAOrF,CAAI,CAAA,CACxC,GAAIsF,CAAU,CAAA,UAAA,CACZ,OAAO,CACL,GAAIA,CAAU,CAAA,QAAA,CACd,IACEA,CAAAA,CAAAA,CAAU,UAAe,GAAA,IAAA,CACrBtF,CACA,CAAA,CAAA,EAAGA,CAAI,CAAIsF,CAAAA,EAAAA,CAAAA,CAAU,UAAU,CAAA,CAAA,CACrC,OACEA,CAAU,CAAA,UAAA,GAAe,IACrBA,CAAAA,CAAAA,CAAU,OACVA,CAAU,CAAA,MAAA,CAAO,UAAYA,CAAAA,CAAAA,CAAU,UAAU,CACzD,CAEJ,CAEA,QAAWtF,CAAQqF,IAAAA,CAAAA,CAAW,IAAM,CAAA,CAClC,IAAMC,CAAYD,CAAAA,CAAAA,CAAW,IAAKrF,CAAAA,CAAI,EACtC,GAAIsF,CAAAA,CAAU,UACZ,CAAA,OAAO,CACL,EAAA,CAAIA,CAAU,CAAA,QAAA,CACd,KACEA,CAAU,CAAA,UAAA,GAAe,IACrBtF,CAAAA,CAAAA,CACA,GAAGA,CAAI,CAAA,CAAA,EAAIsF,CAAU,CAAA,UAAU,GACrC,MACEA,CAAAA,CAAAA,CAAU,UAAe,GAAA,IAAA,CACrBA,EAAU,MACVA,CAAAA,CAAAA,CAAU,MAAO,CAAA,UAAA,CAAYA,EAAU,UAAU,CACzD,CAEJ,CAEA,QAAWtF,CAAQqF,IAAAA,CAAAA,CAAW,KAAO,CAAA,CACnC,IAAMC,CAAYD,CAAAA,CAAAA,CAAW,KAAMrF,CAAAA,CAAI,CACvC,CAAA,GAAIsF,CAAU,CAAA,UAAA,CACZ,OAAO,CACL,EAAA,CAAIA,CAAU,CAAA,QAAA,CACd,KACEA,CAAU,CAAA,UAAA,GAAe,IACrBtF,CAAAA,CAAAA,CACA,GAAGA,CAAI,CAAA,CAAA,EAAIsF,CAAU,CAAA,UAAU,CACrC,CAAA,CAAA,MAAA,CACEA,CAAU,CAAA,UAAA,GAAe,KACrBA,CAAU,CAAA,MAAA,CACVA,CAAU,CAAA,MAAA,CAAO,WAAYA,CAAU,CAAA,UAAU,CACzD,CAEJ,EACF,CC9GO,CAAA,IAAMsf,EAAoB,CAAA,CAA4B,CAC3D,MAAA,CAAAnQ,CACF,CAAA,GAES,CACP,GAAI,CAACA,CAAO,CAAA,KAAA,CACV,OAAOA,CAGT,CAAA,IAAMoQ,CAAsC,CAAA,GACtCC,CAAyB,CAAA,EAE/B,CAAA,IAAA,IAAW9a,CAAQyK,IAAAA,CAAAA,CAAO,KAAO,CAAA,CAE/B,GAAI,CAACzK,CAAAA,CAAK,IAAQA,EAAAA,CAAAA,CAAK,MAAO,CAC5B6a,CAAAA,CAAY,IAAK7a,CAAAA,CAAI,EACrB,QACF,CAEA,GAEE,CAACA,CAAK,CAAA,IAAA,EACNA,CAAK,CAAA,IAAA,GAAS,WACdA,CAAK,CAAA,IAAA,GAAS,SACdA,EAAAA,CAAAA,CAAK,OAAS,MACdA,EAAAA,CAAAA,CAAK,IAAS,GAAA,QAAA,EACdA,EAAK,IAAS,GAAA,QAAA,EACdA,CAAK,CAAA,IAAA,GAAS,SACdA,EAAAA,CAAAA,CAAK,IAAS,GAAA,MAAA,CACd,CAGA,IAAM+a,CAAAA,CAAS,CAAG/a,EAAAA,CAAAA,CAAK,MAAQ,EAAE,CAAA,EAAGA,CAAK,CAAA,IAAA,EAAQ,EAAE,CAAGA,EAAAA,CAAAA,CAAK,KAAU,GAAA,MAAA,CAAY,CAASA,MAAAA,EAAAA,CAAAA,CAAK,KAAK,CAAA,CAAA,CAAK,EAAE,CACtG8a,CAAAA,CAAAA,CAAAA,CAAQ,QAASC,CAAAA,CAAM,IAC1BD,CAAQ,CAAA,IAAA,CAAKC,CAAM,CAAA,CACnBF,EAAY,IAAK7a,CAAAA,CAAI,CAEvB,CAAA,CAAA,QACF,CAEA6a,CAAY,CAAA,IAAA,CAAK7a,CAAI,EACvB,CAIA,GAFAyK,CAAAA,CAAO,KAAQoQ,CAAAA,CAAAA,CAGbpQ,EAAO,KAAM,CAAA,MAAA,EAAU,CACvBA,EAAAA,CAAAA,CAAO,OAAS,OAChBA,EAAAA,CAAAA,CAAO,IAAS,GAAA,MAAA,EAChBA,CAAO,CAAA,IAAA,GAAS,OAChB,CAAA,CAEA,IAAMuQ,CAAevQ,CAAAA,CAAAA,CAAO,KAAM,CAAA,CAAC,EACnC,OAAOA,CAAAA,CAAO,eACd,CAAA,OAAOA,EAAO,KACdA,CAAAA,CAAAA,CAAS,CACP,GAAGA,CACH,CAAA,GAAGuQ,CACL,EACF,CAGA,OAAIvQ,CAAAA,CAAO,IAAS,GAAA,SAAA,CACX,EAGFA,CAAAA,CACT,CC/DO,CAAA,IAAMwQ,GACXvS,CAEI,EAAA,CAAA,EAAAgS,EAA4BhS,CAAAA,CAAAA,CAAU,UAAU,CAAA,EAIhDA,CAAU,CAAA,IAAA,EAAM,UAOTwS,EAAsB,CAAA,CAAC,CAClC,OAAA,CAAA1S,EACA,SAAAE,CAAAA,CACF,CAG8B,GAAA,CAC5B,IAAMyS,CAAOzS,CAAAA,CAAAA,CAAU,IAEvB,CAAA,GAAI,CAACyS,CAAQ,EAAA,CAACA,CAAK,CAAA,UAAA,CACjB,OAAOR,EAAwBjS,CAAAA,CAAAA,CAAU,UAAU,CAAA,CAGrD,GAAIyS,CAAK,CAAA,UAAA,GAAe,IACtB,CAAA,OAAO,CACL,EAAI,CAAA,MAAA,CACJ,IAAM,CAAA,MAAA,CACN,MAAQA,CAAAA,CAAAA,CAAK,MACf,CAAA,CAGF,IAAM1Q,CAAS0Q,CAAAA,CAAAA,CAAK,MACdC,CAAAA,CAAAA,CAAiB3Q,EAAO,IAC1BjC,CAAAA,CAAAA,CAAQ,YAAqDiC,CAAAA,CAAAA,CAAO,IAAI,CACxEA,CAAAA,CAAAA,CAIE4Q,CADJ,CAAA,CAAA,QAAA,GAAYD,CAAiBA,CAAAA,CAAAA,CAAe,MAASA,CAAAA,CAAAA,GACnB,aAAaD,CAAK,CAAA,UAAU,CAEhE,CAAA,OAAKE,EAIE,CACL,EAAA,CAAI,MACJ,CAAA,IAAA,CAAMF,EAAK,UACX,CAAA,MAAA,CAAQE,CACV,CAAA,CAPSV,EAAwBjS,CAAAA,CAAAA,CAAU,UAAU,CAQvD,EAIa4S,EAAoB,CAAA,CAAC,CAChC,UAAA,CAAAC,CACF,CAEmB,GAAA,CACjB,OAAQA,CAAAA,EACN,KAAK,KAAA,CACH,OAAO,KAAA,CACT,KAAK,KACH,CAAA,OAAO,KACT,CAAA,KAAK,MACH,OAAO,KAAA,CACT,KAAK,KAAA,CACH,OAAO,KACT,CAAA,KAAK,KACH,CAAA,OAAO,MACT,KAAK,SAAA,CACH,OAAO,SAAA,CACT,QACE,OAAO,CAAGA,EAAAA,CAAAA,CAAW,CAAC,CAAC,CAAA,EAAA,CAC3B,CACF,CAAA,CAqBaC,GACX9S,CAC0B,EAAA,CAC1B,IAAM1Q,CAAAA,CAAgC,EAEtC,CAAA,GAAI,CAAC0Q,CAAAA,CAAU,SACb,CAAA,OAAO1Q,CAGT,CAAA,IAAMyjB,EAC4C,CAChD,UAAA,CAAY,EAAC,CACb,KAAM,QACR,CAAA,CAEMC,CAC4C,CAAA,CAChD,WAAY,EAAC,CACb,IAAM,CAAA,QACR,CAGIC,CAAAA,CAAAA,CAEJ,IAAW3lB,IAAAA,CAAAA,IAAQ0S,EAAU,SAAW,CAAA,CACtC,IAAM1T,CAAAA,CAAW0T,EAAU,SAAU1S,CAAAA,CAAI,CAEzC,CAAA,OAAQslB,GAAkB,CAAE,UAAA,CAAYtlB,CAAK,CAAC,CAAG,EAC/C,KAAK,KAAA,CACL,KAAK,KAEH,CAAA,MACF,KAAK,KAAA,CACH0lB,EAAU,UAAW1lB,CAAAA,CAAI,CAAIhB,CAAAA,CAAAA,CAAS,OACtC,MACF,KAAK,KACL,CAAA,KAAK,KACHymB,CAAAA,CAAAA,CAAO,UAAWzlB,CAAAA,CAAI,EAAIhB,CAAS,CAAA,MAAA,CACnC,MACF,KAAK,UACH2mB,CAAkB3mB,CAAAA,CAAAA,CAClB,KACJ,CACF,CAGA,GAAI2mB,CAAAA,CAAiB,CACnB,IAAIC,CAAW,CAAA,KAAA,CAGV,MAAO,CAAA,IAAA,CAAKF,EAAU,UAAU,CAAA,CAAE,MACrCA,GAAAA,CAAAA,CAAU,WAAW,OAAUC,CAAAA,CAAAA,CAAgB,MAC/CC,CAAAA,CAAAA,CAAW,MAGb,IAAMC,CAAAA,CAAAA,CACJF,CAAgB,CAAA,MAAA,CAAO,WAAe,EAAA,EAAA,EACtC,iBAAkB,EAAA,CACd3V,GAAQ2V,CAAgB,CAAA,MAAA,CAAO,IAAQ,EAAA,EAAA,EAAI,mBAGzB,CAAA,CAAC,SAAS,CAAA,CAEhB,KACbzgB,CAAY2gB,EAAAA,CAAAA,CAAY,QAAS3gB,CAAAA,CAAO,GAAK8K,CAAK,CAAA,QAAA,CAAS9K,CAAO,CACrE,IAEAwgB,CAAU,CAAA,UAAA,CAAW,OAAUC,CAAAA,CAAAA,CAAgB,OAC/CC,CAAW,CAAA,IAAA,CAAA,CAIS,CAAC,OAAA,CAAS,SAAS,CAEzB,CAAA,IAAA,CACX1gB,CAAY2gB,EAAAA,CAAAA,CAAY,QAAS3gB,CAAAA,CAAO,CAAK8K,EAAAA,CAAAA,CAAK,SAAS9K,CAAO,CACrE,CAEAugB,GAAAA,CAAAA,CAAO,WAAW,OAAUE,CAAAA,CAAAA,CAAgB,MAC5CC,CAAAA,CAAAA,CAAW,MAIRA,CACHH,GAAAA,CAAAA,CAAO,UAAW,CAAA,OAAA,CAAUE,CAAgB,CAAA,MAAA,EAEhD,CAEA,IAAMG,EAAY,MAAO,CAAA,IAAA,CAAKL,CAAO,CAAA,UAAU,EAC/C,GAAIK,CAAAA,CAAU,MAAQ,CAAA,CACpBL,EAAO,QAAWK,CAAAA,CAAAA,CAClB9jB,CAAO,CAAA,MAAA,CAASyjB,CAEhB,CAAA,IAAIM,CAAa9L,CAAAA,CAAAA,CAAiB,CAChC,KAAO,CAAA,MAAA,CAAO,MAAOwL,CAAAA,CAAAA,CAAO,UAAU,CACtC,CAAA,mBAAA,CAAqB,IACrB,CAAA,MAAA,CAAQ,EACV,CAAC,CACDM,CAAAA,CAAAA,CAAanB,EAAkB,CAAA,CAAE,MAAQmB,CAAAA,CAAW,CAAC,CACjD,CAAA,MAAA,CAAO,IAAKA,CAAAA,CAAU,EAAE,MAAUA,EAAAA,CAAAA,CAAW,IAAS,GAAA,SAAA,GACxD/jB,EAAO,KAAQ+jB,CAAAA,CAAAA,EAEnB,CAEA,IAAMC,CAAe,CAAA,MAAA,CAAO,IAAKN,CAAAA,CAAAA,CAAU,UAAU,CACrD,CAAA,GAAIM,CAAa,CAAA,MAAA,CAAQ,CACvBN,CAAU,CAAA,QAAA,CAAWM,CACrBhkB,CAAAA,CAAAA,CAAO,UAAY0jB,CAEnB,CAAA,IAAIO,CAAgBhM,CAAAA,CAAAA,CAAiB,CACnC,KAAA,CAAO,MAAO,CAAA,MAAA,CAAOyL,EAAU,UAAU,CAAA,CACzC,mBAAqB,CAAA,IAAA,CACrB,OAAQ,EACV,CAAC,CAAA,CACDO,EAAgBrB,EAAkB,CAAA,CAAE,MAAQqB,CAAAA,CAAc,CAAC,CAAA,CACvD,MAAO,CAAA,IAAA,CAAKA,CAAa,CAAE,CAAA,MAAA,EAAUA,CAAc,CAAA,IAAA,GAAS,YAC9DjkB,CAAO,CAAA,QAAA,CAAWikB,CAEtB,EAAA,CAEA,OAAOjkB,CACT,CAAA,CC1GO,IAAMkkB,EAAAA,CAAkB/nB,GAC7B0T,CAAW,CAAA,CACT,IAAM,CAAA,YAAA,CACN,MAAO4G,EAA4Bta,CAAAA,CAAK,CAC1C,CAAC,EC1GI,IAAMgoB,GAAQ,KAGfC,CAAAA,EAAAA,CAAmBzX,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,QAAS,CAAC,EACzD0X,EAAoB1X,CAAAA,CAAAA,CAAS,UAAW,CAAA,CAAE,KAAM,SAAU,CAAC,CAC3D2X,CAAAA,EAAAA,CAAyB3X,EAAS,UAAW,CAAA,CAAE,IAAM,CAAA,cAAe,CAAC,CAAA,CACrE4X,EAAiB5X,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM,MAAO,CAAC,EACrD6X,EAAmB7X,CAAAA,CAAAA,CAAS,UAAW,CAAA,CAAE,KAAM,QAAS,CAAC,CACzD8X,CAAAA,EAAAA,CAAoB9X,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,SAAU,CAAC,CAAA,CAC3D+X,EAAgB/X,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM,KAAM,CAAC,EACnDgY,EAAkBhY,CAAAA,CAAAA,CAAS,UAAW,CAAA,CAAE,IAAM,CAAA,OAAQ,CAAC,CAAA,CACvDiY,GAAgBjY,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,KAAM,CAAC,CAAA,CACnDkY,EAAqBlY,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM,UAAW,CAAC,CAC7DmY,CAAAA,EAAAA,CAAqBnY,CAAS,CAAA,UAAA,CAAW,CAAE,IAAM,CAAA,UAAW,CAAC,CAAA,CAC7DoY,GAAkBpY,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,OAAQ,CAAC,CAAA,CACvDqY,EAAkBrY,CAAAA,CAAAA,CAAS,UAAW,CAAA,CAAE,IAAM,CAAA,OAAQ,CAAC,CACvDsY,CAAAA,CAAAA,CAActY,CAAS,CAAA,UAAA,CAAW,CAAE,IAAM,CAAA,GAAI,CAAC,CAAA,CAE/CoI,GAAmB/W,CAAiB,EAAA,CAAA,EAAA,EAAKA,CAAI,CAAA,CAAA,CAE7CknB,EAAuB,CAAA,CAAC,CAC5B,OAAA,CAAA1U,EACA,MAAAxQ,CAAAA,CAAAA,CACA,MAAAyS,CAAAA,CACF,IAIyB,CACvB,IAAMpK,CAAesE,CAAAA,CAAAA,CAAS,yBAAyB,CACrD,UAAA,CAAYsY,CACZ,CAAA,IAAA,CAAMtY,EAAS,UAAW,CAAA,CAAE,IAAM8F,CAAAA,CAAAA,CAAO,IAAK,CAAC,CACjD,CAAC,CAAA,CAEG0S,EAEJ,GAAI,CAAC1S,CAAO,CAAA,KAAA,CACV0S,EAAkBxY,CAAS,CAAA,cAAA,CAAe,CACxC,YAAA,CAAAtE,CACA,CAAA,UAAA,CAAY,CACV+c,EAAAA,CAAuB,CAErB,MAAQ,CAAA,CACN,KAAM,SACR,CACF,CAAC,CACH,CACF,CAAC,CAAA,CAAA,KACI,CACL3S,CAAAA,CAASmQ,EAAkB,CAAA,CAAE,MAAAnQ,CAAAA,CAAO,CAAC,CAGrC,CAAA,IAAM4S,CAAkB5S,CAAAA,CAAAA,CAAO,MAAO,GAAKzK,CAAAA,CAAAA,EACzCsd,EAAkB,CAAA,CAChB,QAAA9U,CACA,CAAA,MAAA,CAAAxQ,CACA,CAAA,MAAA,CAAQgI,CACV,CAAC,CACH,CAAA,CAEIqd,EAAgB,MAAW,GAAA,CAAA,CAC7BF,CAAkBxY,CAAAA,CAAAA,CAAS,eAAe,CACxC,YAAA,CAAAtE,CACA,CAAA,UAAA,CAAYgd,CACd,CAAC,CAAA,EAEG5S,CAAO,CAAA,eAAA,CAUX0S,EAAkBxY,CAAS,CAAA,cAAA,CAAe,CACxC,YAAA,CAAAtE,EACA,UAAY,CAAA,CACV+c,EAAuB,CAAA,CAErB,MAAA,CAAQ,CACN,IAAA,CAAM,SACR,CACF,CAAC,CACH,CACF,CAAC,CAAA,EAEL,CAEA,OAAI3S,EAAO,QAAaA,GAAAA,CAAAA,CAAO,QAAYA,EAAAA,CAAAA,CAAO,WAAa,MAC7D0S,CAAAA,CAAAA,CAAkBxY,CAAS,CAAA,cAAA,CAAe,CACxC,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,UAAYwY,CAAAA,CAAAA,CACZ,IAAMX,CAAAA,EACR,CAAC,CACD,CAAA,UAAA,CAAY,CAAC7X,CAAAA,CAAS,kBAAkB,CAAE,KAAA,CAAO8F,CAAO,CAAA,QAAS,CAAC,CAAC,CACrE,CAAC,CAAA,EAEGA,CAAO,CAAA,QAAA,GAAa,MACtB0S,GAAAA,CAAAA,CAAkBxY,EAAS,cAAe,CAAA,CACxC,YAAcA,CAAAA,CAAAA,CAAS,yBAAyB,CAC9C,UAAA,CAAYwY,CACZ,CAAA,IAAA,CAAMP,EACR,CAAC,CAAA,CACD,UAAY,CAAA,CAACjY,EAAS,iBAAkB,CAAA,CAAE,KAAO8F,CAAAA,CAAAA,CAAO,QAAS,CAAC,CAAC,CACrE,CAAC,GAGCA,CAAO,CAAA,QAAA,GAAa,MACtB0S,GAAAA,CAAAA,CAAkBxY,EAAS,cAAe,CAAA,CACxC,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,UAAYwY,CAAAA,CAAAA,CACZ,KAAMT,EACR,CAAC,CACD,CAAA,UAAA,CAAY,CAAC/X,CAAS,CAAA,iBAAA,CAAkB,CAAE,KAAA,CAAO8F,EAAO,QAAS,CAAC,CAAC,CACrE,CAAC,CAAA,CAAA,CAAA,CAIE0S,CACT,CAAA,CAEMI,GAAyB,CAAC,CAC9B,MAAA9S,CAAAA,CACF,IAIM,OAAOA,CAAAA,CAAO,KAAU,EAAA,SAAA,CACP9F,EAAS,cAAe,CAAA,CACzC,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,UAAYsY,CAAAA,CAAAA,CACZ,KAAMR,EACR,CAAC,CACD,CAAA,UAAA,CAAY,CAAC9X,CAAS,CAAA,GAAA,CAAI,OAAQ8F,CAAAA,CAAAA,CAAO,KAAK,CAAC,CACjD,CAAC,CAAA,CAIgB9F,CAAS,CAAA,cAAA,CAAe,CACzC,YAAA,CAAcA,EAAS,wBAAyB,CAAA,CAC9C,UAAYsY,CAAAA,CAAAA,CACZ,KAAMtY,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM8F,EAAO,IAAK,CAAC,CACjD,CAAC,CACH,CAAC,CAIG+S,CAAAA,EAAAA,CAAsB,CAAC,CAC3B,OAAA,CAAAhV,CACA,CAAA,MAAA,CAAAiC,CACF,CAGyB,GAAA,CACvB,IAAMgT,CAAAA,CAA2C,EAEjD,CAAA,IAAA,IAAWzd,CAAQyK,IAAAA,CAAAA,CAAO,KAAS,EAAA,EAE7BzK,CAAAA,CAAAA,CAAK,OAAS,QAAY,EAAA,OAAOA,CAAK,CAAA,KAAA,EAAU,UAClDyd,CAAY,CAAA,IAAA,CACV9Y,CAAS,CAAA,aAAA,CAAc,CACrB,IAAM3E,CAAAA,CAAAA,CAAK,KACb,CAAC,CACH,CAAA,CAIJ,OAAKyd,CAAAA,CAAY,OASM9Y,CAAS,CAAA,cAAA,CAAe,CAC7C,YAAA,CAAcA,EAAS,wBAAyB,CAAA,CAC9C,UAAYsY,CAAAA,CAAAA,CACZ,KAAMtY,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM8F,EAAO,IAAK,CAAC,CACjD,CAAC,EACD,UAAY,CAAA,CACV9F,CAAS,CAAA,sBAAA,CAAuB,CAC9B,QAAU8Y,CAAAA,CAAAA,CACV,SAAW,CAAA,KACb,CAAC,CACH,CACF,CAAC,CAAA,CAnBQL,EAAuB,CAAA,CAE5B,OAAQ,CACN,IAAA,CAAM,SACR,CACF,CAAC,CAiBL,CAAA,CAEMM,EAAuB,CAAA,CAAC,CAC5B,MAAAjT,CAAAA,CACF,CAIqB9F,GAAAA,CAAAA,CAAS,cAAe,CAAA,CACzC,YAAcA,CAAAA,CAAAA,CAAS,yBAAyB,CAC9C,UAAA,CAAYsY,CACZ,CAAA,IAAA,CAAMtY,EAAS,UAAW,CAAA,CAAE,IAAM8F,CAAAA,CAAAA,CAAO,IAAK,CAAC,CACjD,CAAC,CACH,CAAC,CAAA,CAIGkT,EAAsB,CAAA,CAAC,CAC3B,MAAAlT,CAAAA,CACF,CAIqB9F,GAAAA,CAAAA,CAAS,eAAe,CACzC,YAAA,CAAcA,CAAS,CAAA,wBAAA,CAAyB,CAC9C,UAAYsY,CAAAA,CAAAA,CACZ,IAAMtY,CAAAA,CAAAA,CAAS,UAAW,CAAA,CAAE,IAAM8F,CAAAA,CAAAA,CAAO,IAAK,CAAC,CACjD,CAAC,CACH,CAAC,CAIGmT,CAAAA,EAAAA,CAAwB,CAAC,CAC7B,OAAAnT,CACF,CAAA,GAGM,CACJ,IAAMoT,CAAWpT,CAAAA,CAAAA,CAAO,IAAS,GAAA,SAAA,EAAaA,EAAO,MAAW,GAAA,OAAA,CAEhE,GAAI,OAAOA,EAAO,KAAU,EAAA,QAAA,CAS1B,OAPmB9F,CAAAA,CAAS,eAAe,CACzC,YAAA,CAAcA,CAAS,CAAA,wBAAA,CAAyB,CAC9C,UAAA,CAAYsY,CACZ,CAAA,IAAA,CAAMR,EACR,CAAC,CAAA,CACD,UAAY,CAAA,CAAC9X,EAAS,GAAI,CAAA,MAAA,CAAO8F,CAAO,CAAA,KAAK,CAAC,CAChD,CAAC,CAIH,CAAA,IAAIqT,CAAmBnZ,CAAAA,CAAAA,CAAS,cAAe,CAAA,CAC7C,aAAckZ,CACVlZ,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAChC,WAAYA,CAAS,CAAA,wBAAA,CAAyB,CAC5C,UAAA,CAAYsY,EACZ,IAAMb,CAAAA,EACR,CAAC,CAAA,CACD,KAAMzX,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,QAAS,CAAC,CAC9C,CAAC,CAAA,CACDA,EAAS,wBAAyB,CAAA,CAChC,UAAYsY,CAAAA,CAAAA,CACZ,KAAMtY,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,QAAS,CAAC,CAC9C,CAAC,CACP,CAAC,CAAA,CAED,OAAI,CAACkZ,GAAYpT,CAAO,CAAA,IAAA,GAAS,SAC/BqT,GAAAA,CAAAA,CAAmBnZ,EAAS,cAAe,CAAA,CACzC,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,UAAYmZ,CAAAA,CAAAA,CACZ,KAAMnZ,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,KAAM,CAAC,CAC3C,CAAC,CACH,CAAC,CAGC8F,CAAAA,CAAAA,CAAAA,CAAO,gBAAqB,GAAA,MAAA,CAC9BqT,CAAmBnZ,CAAAA,CAAAA,CAAS,cAAe,CAAA,CACzC,aAAcA,CAAS,CAAA,wBAAA,CAAyB,CAC9C,UAAA,CAAYmZ,EACZ,IAAMnZ,CAAAA,CAAAA,CAAS,UAAW,CAAA,CAAE,KAAM,IAAK,CAAC,CAC1C,CAAC,CACD,CAAA,UAAA,CAAY,CACVA,CAAAA,CAAS,kBAAkB,CAAE,KAAA,CAAO8F,CAAO,CAAA,gBAAiB,CAAC,CAC/D,CACF,CAAC,CAAA,CACQA,EAAO,OAAY,GAAA,MAAA,GAC5BqT,CAAmBnZ,CAAAA,CAAAA,CAAS,cAAe,CAAA,CACzC,YAAcA,CAAAA,CAAAA,CAAS,yBAAyB,CAC9C,UAAA,CAAYmZ,CACZ,CAAA,IAAA,CAAMnZ,EAAS,UAAW,CAAA,CAAE,IAAM,CAAA,KAAM,CAAC,CAC3C,CAAC,CACD,CAAA,UAAA,CAAY,CAACA,CAAAA,CAAS,iBAAkB,CAAA,CAAE,MAAO8F,CAAO,CAAA,OAAQ,CAAC,CAAC,CACpE,CAAC,CAAA,CAAA,CAGCA,CAAO,CAAA,gBAAA,GAAqB,OAC9BqT,CAAmBnZ,CAAAA,CAAAA,CAAS,cAAe,CAAA,CACzC,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,WAAYmZ,CACZ,CAAA,IAAA,CAAMnZ,CAAS,CAAA,UAAA,CAAW,CAAE,IAAM,CAAA,IAAK,CAAC,CAC1C,CAAC,CACD,CAAA,UAAA,CAAY,CACVA,CAAAA,CAAS,kBAAkB,CAAE,KAAA,CAAO8F,CAAO,CAAA,gBAAiB,CAAC,CAC/D,CACF,CAAC,CAAA,CACQA,EAAO,OAAY,GAAA,MAAA,GAC5BqT,CAAmBnZ,CAAAA,CAAAA,CAAS,eAAe,CACzC,YAAA,CAAcA,CAAS,CAAA,wBAAA,CAAyB,CAC9C,UAAA,CAAYmZ,CACZ,CAAA,IAAA,CAAMnZ,EAAS,UAAW,CAAA,CAAE,IAAM,CAAA,KAAM,CAAC,CAC3C,CAAC,CACD,CAAA,UAAA,CAAY,CAACA,CAAS,CAAA,iBAAA,CAAkB,CAAE,KAAA,CAAO8F,CAAO,CAAA,OAAQ,CAAC,CAAC,CACpE,CAAC,CAAA,CAAA,CAGIqT,CACT,CAAA,CAEMC,GAAwB,CAAC,CAC7B,OAAAvV,CAAAA,CAAAA,CACA,OAAAxQ,CACA,CAAA,MAAA,CAAAyS,CACF,CAAA,GAIM,CAEJ,IAAMjN,CAA2C,CAAA,GAK3C0B,CAAWuL,CAAAA,CAAAA,CAAO,QAAY,EAAA,GAGpC,IAAWzU,IAAAA,CAAAA,IAAQyU,CAAO,CAAA,UAAA,CAAY,CACpC,IAAM3G,CAAAA,CAAW2G,CAAO,CAAA,UAAA,CAAWzU,CAAI,CACjCgoB,CAAAA,CAAAA,CAAa9e,CAAS,CAAA,QAAA,CAASlJ,CAAI,CAEnCioB,CAAAA,CAAAA,CAAqBX,EAAkB,CAAA,CAC3C,QAAA9U,CACA,CAAA,QAAA,CAAU,CAACwV,CAAAA,CACX,OAAAhmB,CACA,CAAA,MAAA,CAAQ8L,CACV,CAAC,CAED3N,CAAAA,EAAAA,CAAa,SAAY,CAAA,CAAA,CACzB,IAAI+nB,CAAe/nB,CAAAA,EAAAA,CAAa,IAAKH,CAAAA,CAAI,EACrCsB,kBAAG,CAAA,OAAA,CAAQ,oBAAqBtB,CAAAA,CAAI,EACpCA,CAGAA,CAAAA,CAAAA,CAAAA,CAAK,KAAM,CAAA,QAAQ,CAAKA,EAAAA,CAAAA,CAAK,KAAM,CAAA,MAAM,GAAMA,CAAK,CAAA,KAAA,CAAM,KAAK,CAAA,GACjE,CAACA,CAAK,CAAA,UAAA,CAAW,GAAG,CAAA,EACpB,CAACA,CAAK,CAAA,QAAA,CAAS,GAAG,CAAA,GAElBkoB,CAAe,CAAA,CAAA,CAAA,EAAIloB,CAAI,CAAA,CAAA,CAAA,CAAA,CAEzBwH,EAAW,IACTmH,CAAAA,CAAAA,CAAS,kBAAmB,CAAA,CAC1B,YAAasZ,CACb,CAAA,IAAA,CAAMC,CACR,CAAC,CACH,EAMF,CA8CA,OAPmBvZ,CAAAA,CAAS,eAAe,CACzC,YAAA,CAAcA,CAAS,CAAA,wBAAA,CAAyB,CAC9C,UAAYsY,CAAAA,CAAAA,CACZ,IAAMtY,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM8F,CAAO,CAAA,IAAK,CAAC,CACjD,CAAC,CACD,CAAA,UAAA,CAAY,CAACnT,kBAAAA,CAAG,OAAQ,CAAA,6BAAA,CAA8BkG,EAAY,IAAI,CAAC,CACzE,CAAC,CAEH,CAEM2gB,CAAAA,EAAAA,CAAwB,CAAC,CAC7B,OAAA1T,CACF,CAAA,GAGM,CACJ,GAAI,OAAOA,CAAAA,CAAO,KAAU,EAAA,QAAA,CAQ1B,OAPmB9F,CAAS,CAAA,cAAA,CAAe,CACzC,YAAA,CAAcA,EAAS,wBAAyB,CAAA,CAC9C,UAAYsY,CAAAA,CAAAA,CACZ,KAAMR,EACR,CAAC,CACD,CAAA,UAAA,CAAY,CAAC9X,CAAAA,CAAS,GAAI,CAAA,MAAA,CAAO8F,EAAO,KAAK,CAAC,CAChD,CAAC,EAIH,IAAI2T,CAAAA,CAAmBzZ,CAAS,CAAA,cAAA,CAAe,CAC7C,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,UAAYsY,CAAAA,CAAAA,CACZ,IAAMtY,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM8F,CAAO,CAAA,IAAK,CAAC,CACjD,CAAC,CACH,CAAC,EAED,GAAIA,CAAAA,CAAO,MACT,CAAA,OAAQA,CAAO,CAAA,MAAA,EACb,KAAK,YACH2T,CAAmBzZ,CAAAA,CAAAA,CAAS,cAAe,CAAA,CACzC,aAAcA,CAAS,CAAA,wBAAA,CAAyB,CAC9C,UAAA,CAAYyZ,EACZ,IAAMzZ,CAAAA,CAAAA,CAAS,UAAW,CAAA,CAAE,IAAM,CAAA,UAAW,CAAC,CAChD,CAAC,CACH,CAAC,CACD,CAAA,MACF,KAAK,MACL,CAAA,KAAK,MACHyZ,CAAAA,CAAAA,CAAmBzZ,EAAS,cAAe,CAAA,CACzC,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,UAAYyZ,CAAAA,CAAAA,CACZ,KAAMzZ,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,IAAK,CAAC,CAC1C,CAAC,CACH,CAAC,CACD,CAAA,MACF,KAAK,KAAA,CACHyZ,EAAmBzZ,CAAS,CAAA,cAAA,CAAe,CACzC,YAAA,CAAcA,EAAS,wBAAyB,CAAA,CAC9C,UAAYyZ,CAAAA,CAAAA,CACZ,KAAMzZ,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,KAAM,CAAC,CAC3C,CAAC,CACH,CAAC,CAAA,CACD,MACF,KAAK,OACL,KAAK,OAAA,CACL,KAAK,MAAA,CACL,KAAK,MACHyZ,CAAAA,CAAAA,CAAmBzZ,CAAS,CAAA,cAAA,CAAe,CACzC,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,UAAYyZ,CAAAA,CAAAA,CACZ,IAAMzZ,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM8F,CAAO,CAAA,MAAO,CAAC,CACnD,CAAC,CACH,CAAC,EACD,KACJ,CAGF,OAAIA,CAAAA,CAAO,SAAcA,GAAAA,CAAAA,CAAO,SAAaA,EAAAA,CAAAA,CAAO,YAAc,MAChE2T,CAAAA,CAAAA,CAAmBzZ,CAAS,CAAA,cAAA,CAAe,CACzC,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,WAAYyZ,CACZ,CAAA,IAAA,CAAM5B,EACR,CAAC,CACD,CAAA,UAAA,CAAY,CAAC7X,CAAAA,CAAS,kBAAkB,CAAE,KAAA,CAAO8F,CAAO,CAAA,SAAU,CAAC,CAAC,CACtE,CAAC,CAAA,EAEGA,EAAO,SAAc,GAAA,MAAA,GACvB2T,CAAmBzZ,CAAAA,CAAAA,CAAS,cAAe,CAAA,CACzC,YAAcA,CAAAA,CAAAA,CAAS,yBAAyB,CAC9C,UAAA,CAAYyZ,CACZ,CAAA,IAAA,CAAMxB,EACR,CAAC,CAAA,CACD,UAAY,CAAA,CAACjY,EAAS,iBAAkB,CAAA,CAAE,KAAO8F,CAAAA,CAAAA,CAAO,SAAU,CAAC,CAAC,CACtE,CAAC,CAGCA,CAAAA,CAAAA,CAAAA,CAAO,SAAc,GAAA,MAAA,GACvB2T,EAAmBzZ,CAAS,CAAA,cAAA,CAAe,CACzC,YAAA,CAAcA,EAAS,wBAAyB,CAAA,CAC9C,UAAYyZ,CAAAA,CAAAA,CACZ,IAAM1B,CAAAA,EACR,CAAC,CAAA,CACD,WAAY,CAAC/X,CAAAA,CAAS,iBAAkB,CAAA,CAAE,MAAO8F,CAAO,CAAA,SAAU,CAAC,CAAC,CACtE,CAAC,CAAA,CAAA,CAAA,CAIDA,CAAO,CAAA,OAAA,GACT2T,EAAmBzZ,CAAS,CAAA,cAAA,CAAe,CACzC,YAAA,CAAcA,EAAS,wBAAyB,CAAA,CAC9C,UAAYyZ,CAAAA,CAAAA,CACZ,KAAMrB,EACR,CAAC,CACD,CAAA,UAAA,CAAY,CAACpY,CAAS,CAAA,wBAAA,CAAyB,CAAE,IAAA,CAAM8F,CAAO,CAAA,OAAQ,CAAC,CAAC,CAC1E,CAAC,CAAA,CAAA,CAGI2T,CACT,CAAA,CAEMC,GAAuB,CAAC,CAC5B,OAAA7V,CAAAA,CAAAA,CACA,OAAAiC,CACF,CAAA,GAGM,CACJ,GAAIA,CAAO,CAAA,KAAA,EAAS,KAAM,CAAA,OAAA,CAAQA,EAAO,KAAK,CAAA,CAAG,CAC/C,IAAM6T,EAAgB7T,CAAO,CAAA,KAAA,CAAM,GAAKtW,CAAAA,CAAAA,EACtCwQ,EAAS,cAAe,CAAA,CACtB,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,UAAYsY,CAAAA,CAAAA,CACZ,KAAMR,EACR,CAAC,CACD,CAAA,UAAA,CAAY,CAAC9X,CAAS,CAAA,iBAAA,CAAkB,CAAE,KAAA,CAAAxQ,CAAM,CAAC,CAAC,CACpD,CAAC,CACH,CAAA,CAYA,OAXmBwQ,CAAAA,CAAS,eAAe,CACzC,YAAA,CAAcA,CAAS,CAAA,wBAAA,CAAyB,CAC9C,UAAYsY,CAAAA,CAAAA,CACZ,IAAMtY,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM,OAAQ,CAAC,CAC7C,CAAC,CACD,CAAA,UAAA,CAAY,CACVA,CAAS,CAAA,sBAAA,CAAuB,CAC9B,QAAA,CAAU2Z,CACZ,CAAC,CACH,CACF,CAAC,CAEH,CAoBA,OAAOlB,EAAuB,CAAA,CAE5B,MAAQ,CAAA,CACN,KAAM,SACR,CACF,CAAC,CACH,EAEMmB,EAA2B,CAAA,CAAC,CAChC,MAAA,CAAA9T,CACF,CAIqB9F,GAAAA,CAAAA,CAAS,cAAe,CAAA,CACzC,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,WAAYsY,CACZ,CAAA,IAAA,CAAMtY,CAAS,CAAA,UAAA,CAAW,CAAE,IAAM8F,CAAAA,CAAAA,CAAO,IAAK,CAAC,CACjD,CAAC,CACH,CAAC,CAAA,CAIG2S,GAAyB,CAAC,CAC9B,MAAA3S,CAAAA,CACF,IAIqB9F,CAAS,CAAA,cAAA,CAAe,CACzC,YAAA,CAAcA,EAAS,wBAAyB,CAAA,CAC9C,UAAYsY,CAAAA,CAAAA,CACZ,KAAMtY,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM8F,CAAO,CAAA,IAAK,CAAC,CACjD,CAAC,CACH,CAAC,CAIG+T,CAAAA,EAAAA,CAAsB,CAAC,CAC3B,MAAA,CAAA/T,CACF,CAAA,GAIqB9F,EAAS,cAAe,CAAA,CACzC,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,UAAYsY,CAAAA,CAAAA,CACZ,KAAMtY,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM8F,EAAO,IAAK,CAAC,CACjD,CAAC,CACH,CAAC,CAAA,CAIGgU,EAAwB,CAAA,CAAC,CAC7B,OAAA,CAAAjW,CACA,CAAA,MAAA,CAAAxQ,EACA,MAAAyS,CAAAA,CACF,CAIqB,GAAA,CACnB,OAAQA,CAAO,CAAA,IAAA,EACb,KAAK,QACH,OAAOyS,EAAAA,CAAqB,CAC1B,OAAA,CAAA1U,CACA,CAAA,MAAA,CAAAxQ,CACA,CAAA,MAAA,CAAQyS,CACV,CAAC,CAAA,CACH,KAAK,SAAA,CACH,OAAO8S,EAAuB,CAAA,CAE5B,OAAQ9S,CACV,CAAC,CACH,CAAA,KAAK,MACH,CAAA,OAAO+S,EAAoB,CAAA,CACzB,QAAAhV,CACA,CAAA,MAAA,CAAQiC,CACV,CAAC,EACH,KAAK,SAAA,CACL,KAAK,QAAA,CACH,OAAOmT,EAAsB,CAAA,CAE3B,MAAQnT,CAAAA,CACV,CAAC,CAAA,CACH,KAAK,OACH,CAAA,OAAOiT,EAAqB,CAAA,CAE1B,MAAA,CAAQjT,CACV,CAAC,EACH,KAAK,MAAA,CACH,OAAOkT,EAAAA,CAAoB,CAEzB,MAAA,CAAQlT,CACV,CAAC,CAAA,CACH,KAAK,QAAA,CACH,OAAOsT,EAAsB,CAAA,CAC3B,OAAAvV,CAAAA,CAAAA,CACA,OAAAxQ,CACA,CAAA,MAAA,CAAQyS,CACV,CAAC,EACH,KAAK,QAAA,CACH,OAAO0T,EAAAA,CAAsB,CAE3B,MAAQ1T,CAAAA,CACV,CAAC,CACH,CAAA,KAAK,OACH,CAAA,OAAO4T,GAAqB,CAC1B,OAAA,CAAA7V,CACA,CAAA,MAAA,CAAQiC,CACV,CAAC,CACH,CAAA,KAAK,YACH,OAAO8T,EAAAA,CAAyB,CAE9B,MAAQ9T,CAAAA,CACV,CAAC,CAAA,CACH,KAAK,SACH,CAAA,OAAO2S,EAAuB,CAAA,CAE5B,MAAQ3S,CAAAA,CACV,CAAC,CACH,CAAA,KAAK,MACH,CAAA,OAAO+T,GAAoB,CAEzB,MAAA,CAAQ/T,CACV,CAAC,CACL,CACF,CAAA,CAEMiU,EAAuB,CAAA,CAAC,CAC5B,OAAA,CAAAlW,EACA,SAAAE,CAAAA,CAAAA,CACA,MAAA1Q,CAAAA,CACF,IAIM,CACJ,GAAI0Q,CAAU,CAAA,SAAA,CAAW,CACvB,GAAM,CAAE,QAAA1T,CAAAA,CAAS,CAAIwmB,CAAAA,EAAAA,CAAsB9S,CAAS,CAAA,CAEhD1T,GACFsoB,EAAkB,CAAA,CAChB,IAAMrV,CAAAA,CAAAA,CAAe,CACnB,IAAM,CAAA,WAAA,CACN,EAAIS,CAAAA,CAAAA,CAAU,GACd,IAAM,CAAA,UACR,CAAC,CAAA,CACD,OAAAF,CAAAA,CAAAA,CACA,MAAAxQ,CAAAA,CAAAA,CACA,OAAQhD,CACV,CAAC,EAEL,CACF,EAEMsoB,EAAoB,CAAA,CAAC,CACzB,IAAA,CAAAtX,EACA,OAAAwC,CAAAA,CAAAA,CACA,QAAAmW,CAAAA,CAAAA,CACA,MAAA3mB,CAAAA,CAAAA,CACA,MAAAyS,CAAAA,CACF,IAcqB,CACnB,IAAMhC,CAAOD,CAAAA,CAAAA,CAAQ,KAAK,CAAE,EAAA,CAAI2T,EAAM,CAAC,EAEnChiB,CACA4N,CAAAA,CAAAA,CAaJ,GAXI/B,CAAAA,GACFhO,CAAO,CAAA,wBAAA,CAAyB,GAAIgO,CAAAA,CAAI,EAExC+B,CAAaU,CAAAA,CAAAA,CAAK,UAAW,CAAA,CAC3B,KAAAzC,CACA,CAAA,MAAA,CAAQ,IACR,CAAA,eAAA,CAAA+G,GACA,SAAW,CAAA,OACb,CAAC,CAAA,CAAA,CAGCtC,EAAO,IAAM,CAAA,CACf,IAAMmU,CAAAA,CAAsB5mB,EAAO,wBAAyB,CAAA,GAAA,CAC1DyS,CAAO,CAAA,IACT,EAKIoU,CAAgBpW,CAAAA,CAAAA,CAAK,UAAW,CAAA,CAClC,KAAMgC,CAAO,CAAA,IAAA,CACb,eAAAsC,CAAAA,EAAAA,CACA,SAAW,CAAA,OACb,CAAC,CAAA,CAED,GAAI,CAAC8R,CAAAA,CAAc,IAAM,CAAA,CACvB,IAAM3M,CAAM1J,CAAAA,CAAAA,CAAQ,YAA8BiC,CAAAA,CAAAA,CAAO,IAAI,CAC7DtQ,CAAAA,CAAAA,CAAamjB,EAAkB,CAAA,CAC7B,OAAA9U,CAAAA,CAAAA,CACA,MAAAxQ,CAAAA,CAAAA,CACA,OAAQka,CACV,CAAC,CAED2M,CAAAA,CAAAA,CAAgBpW,EAAK,UAAW,CAAA,CAC9B,IAAMgC,CAAAA,CAAAA,CAAO,KACb,eAAAsC,CAAAA,EAAAA,CACA,SAAW,CAAA,OACb,CAAC,EACH,CAGA,GAAI8R,EAAc,IAAM,CAAA,CACtB,IAAMxW,CAAAA,CAAgB1D,EAAS,UAAW,CAAA,CAAE,IAAMka,CAAAA,CAAAA,CAAc,IAAK,CAAC,CAAA,CAClED,CACFzkB,EAAAA,CAAAA,CAAawK,CAAS,CAAA,cAAA,CAAe,CACnC,YAAA,CAAcA,EAAS,wBAAyB,CAAA,CAC9C,UAAYsY,CAAAA,CAAAA,CACZ,KAAMV,EACR,CAAC,CACD,CAAA,UAAA,CAAY,CACV5X,CAAS,CAAA,aAAA,CAAc,CACrB,UAAA,CAAY,CACVA,CAAAA,CAAS,eAAgB,CAAA,CACvB,WAAY0D,CACd,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,CAAA,CACDrQ,EAAO,oBAAuB,CAAA,IAAA,EAE9BmC,CAAakO,CAAAA,EAEjB,CACF,CAAA,KAAA,GAAWoC,CAAO,CAAA,IAAA,CAChBtQ,EAAaskB,EAAsB,CAAA,CACjC,OAAAjW,CAAAA,CAAAA,CACA,OAAAxQ,CACA,CAAA,MAAA,CAAAyS,CACF,CAAC,UACQA,CAAO,CAAA,KAAA,CAGhB,GAFAA,CAAAA,CAASmQ,EAAkB,CAAA,CAAE,MAAAnQ,CAAAA,CAAO,CAAC,CAEjCA,CAAAA,CAAAA,CAAO,KAAO,CAAA,CAChB,IAAMqU,CAAYrU,CAAAA,CAAAA,CAAO,KAAM,CAAA,GAAA,CAAKzK,GAClCsd,EAAkB,CAAA,CAChB,OAAA9U,CAAAA,CAAAA,CACA,OAAAxQ,CACA,CAAA,MAAA,CAAQgI,CACV,CAAC,CACH,CAEA,CAAA,GAAIyK,CAAO,CAAA,eAAA,GAAoB,MAAO,CACpC,IAAMsU,CAActU,CAAAA,CAAAA,CAAO,MAAM,CAAC,CAAA,CAKhCsU,CAAY,CAAA,eAAA,GAAoB,IAC/BA,EAAAA,CAAAA,CAAY,IAAQA,EAAAA,CAAAA,CAAY,OAAS,QAE1C5kB,CAAAA,CAAAA,CAAawK,CAAS,CAAA,cAAA,CAAe,CACnC,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,WAAYsY,CACZ,CAAA,IAAA,CAAMX,EACR,CAAC,CACD,CAAA,UAAA,CAAYwC,CACd,CAAC,GAED3kB,CAAa2kB,CAAAA,CAAAA,CAAU,CAAC,CAAA,CACxBA,EAAU,KAAM,CAAA,CAAC,CAAE,CAAA,OAAA,CAAS9e,GAAS,CACnC7F,CAAAA,CAAawK,CAAS,CAAA,cAAA,CAAe,CACnC,YAAA,CAAcA,CAAS,CAAA,wBAAA,CAAyB,CAC9C,UAAYxK,CAAAA,CAAAA,CACZ,IAAMwiB,CAAAA,EACR,CAAC,CACD,CAAA,UAAA,CAAY,CAAC3c,CAAI,CACnB,CAAC,EACH,CAAC,CAAA,EAEL,CACE7F,KAAAA,CAAAA,CAAawK,CAAS,CAAA,cAAA,CAAe,CACnC,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,WAAYsY,CACZ,CAAA,IAAA,CAAMD,EACR,CAAC,EACD,UAAY,CAAA,CACVrY,CAAS,CAAA,sBAAA,CAAuB,CAC9B,QAAA,CAAUma,CACZ,CAAC,CACH,CACF,CAAC,EAEL,CAAA,KACE3kB,EAAamjB,EAAkB,CAAA,CAC7B,OAAA9U,CAAAA,CAAAA,CACA,OAAAxQ,CACA,CAAA,MAAA,CAAAyS,CACF,CAAC,CAIHtQ,CAAAA,KAAAA,CAAAA,CAAaskB,EAAsB,CAAA,CACjC,QAAAjW,CACA,CAAA,MAAA,CAAAxQ,CACA,CAAA,MAAA,CAAQ,CACN,IAAM,CAAA,SACR,CACF,CAAC,EAOH,GAJIgO,CAAAA,EACFhO,CAAO,CAAA,wBAAA,CAAyB,MAAOgO,CAAAA,CAAI,CAGzC7L,CAAAA,CAAAA,GACEsQ,EAAO,WAAgB,GAAA,MAAA,GACzBtQ,CAAawK,CAAAA,CAAAA,CAAS,eAAe,CACnC,YAAA,CAAcA,CAAS,CAAA,wBAAA,CAAyB,CAC9C,UAAAxK,CAAAA,CAAAA,CACA,IAAM2iB,CAAAA,EACR,CAAC,CACH,CAAC,CAGC6B,CAAAA,CAAAA,CAAAA,GACFxkB,EAAawK,CAAS,CAAA,cAAA,CAAe,CACnC,YAAA,CAAcA,EAAS,wBAAyB,CAAA,CAC9C,UAAAxK,CAAAA,CAAAA,CACA,KAAM0iB,EACR,CAAC,CACH,CAAC,CAGCpS,CAAAA,CAAAA,CAAAA,CAAO,OAAY,GAAA,MAAA,CAAA,CAAW,CAChC,IAAMuU,CAAAA,CAAgBra,CAAS,CAAA,iBAAA,CAAkB,CAC/C,KAAO8F,CAAAA,CAAAA,CAAO,OAChB,CAAC,EACGuU,CACF7kB,GAAAA,CAAAA,CAAawK,CAAS,CAAA,cAAA,CAAe,CACnC,YAAA,CAAcA,CAAS,CAAA,wBAAA,CAAyB,CAC9C,UAAAxK,CAAAA,CAAAA,CACA,IAAMkiB,CAAAA,EACR,CAAC,CACD,CAAA,UAAA,CAAY,CAAC2C,CAAa,CAC5B,CAAC,CAAA,EAEL,CAIF,GAAIjX,CAAY,EAAA,IAAA,CAAM,CACpB,IAAMxI,EAAYoF,CAAS,CAAA,aAAA,CAAc,CACvC,WAAA,CAAa,KACb,UAAYxK,CAAAA,CAAAA,CACZ,IAAM4N,CAAAA,CAAAA,CAAW,KACjB,QAAU/P,CAAAA,CAAAA,CAAO,oBACZ2M,CAAAA,CAAAA,CAAS,yBAAyB,CACjC,UAAA,CAAYsY,CACZ,CAAA,IAAA,CAAM,YACR,CAAC,CAAA,CACD,MACN,CAAC,EACDxU,CAAK,CAAA,GAAA,CAAIlJ,CAAS,EACpB,CAEA,OAAOpF,CACT,CAEagR,CAAAA,EAAAA,CAAkC,CAAC,CAAE,OAAA3C,CAAAA,CAAAA,CAAS,OAAAvS,CAAO,CAAA,GAAM,CACzDuS,CAAAA,CAAQ,WAAW,CAC9B,eAAA,CAAiBvS,CAAO,CAAA,eAAA,CACxB,GAAIkmB,EACJ,CAAA,cAAA,CAAgB,WAChB,CAAA,IAAA,CAAMlmB,CAAO,CAAA,MACf,CAAC,CAAA,CAEI,OAAO,CACV,MAAA,CAAQ,KACR,CAAA,IAAA,CAAM,GACR,CAAC,CAAA,CAEDuS,CAAQ,CAAA,SAAA,CAAU,YAAa,CAAC,CAAE,SAAAE,CAAAA,CAAU,CAAM,GAAA,CAMhDgW,EAAqB,CAAA,CACnB,QAAAlW,CACA,CAAA,SAAA,CAAAE,CACA,CAAA,MAAA,CARqB,CACrB,wBAA0B,CAAA,IAAI,GAC9B,CAAA,oBAAA,CAAsB,KACxB,CAMA,CAAC,EACH,CAAC,EAEDF,CAAQ,CAAA,SAAA,CAAU,QAAU,CAAA,CAAC,CAAE,IAAAxC,CAAAA,CAAAA,CAAM,MAAAyE,CAAAA,CAAO,IAAM,CAMhD6S,EAAAA,CAAkB,CAChB,IAAA,CAAAtX,EACA,OAAAwC,CAAAA,CAAAA,CACA,MARqB,CAAA,CACrB,wBAA0B,CAAA,IAAI,GAC9B,CAAA,oBAAA,CAAsB,KACxB,CAME,CAAA,MAAA,CAAAiC,CACF,CAAC,EACH,CAAC,EACH,CCl/BA,CAmBA,IAAMwU,EAAoB,CAAA,CAAC,CACzB,cAAA,CAAAC,CACF,CAAA,GAE4B,CAC1B,IAAMC,CAAAA,CACJD,CAAmB,GAAA,MAAA,CACfva,EAAS,cAAe,CAAA,CACtB,YAAc,CAAA,QAAA,CACd,WAAY,CACVA,CAAAA,CAAS,cAAe,CAAA,CACtB,YAAcA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC9C,WAAYua,CACZ,CAAA,IAAA,CAAM,UACR,CAAC,CACH,CAAC,CACH,CACF,CAAC,EACD,MAEN,CAAA,GAAIC,CAAsB,CAAA,CACxB,GAAI,OAAOD,CAAmB,EAAA,QAAA,CAC5B,OAAO,CAACC,CAAoB,CAG9B,CAAA,GAAID,EACF,OAAO,CACLva,CAAS,CAAA,UAAA,CAAW,CAClB,IAAMua,CAAAA,CAAAA,CACN,KAAOC,CAAAA,CACT,CAAC,CACH,CAEJ,CAEA,OAAO,EACT,CAEMC,CAAAA,EAAAA,CAAkB,CAAC,CACvB,cAAA,CAAAF,CACF,CAAA,GAE4B,CAC1B,IAAMG,CAAAA,CAAiB1a,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,MAAO,CAAC,EAE3D,OAAI,OAAOua,CAAmB,EAAA,QAAA,CACrB,CACLva,CAAS,CAAA,aAAA,CAAc,CACrB,cAAA,CAAgB,CAACA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAMua,CAAe,CAAC,CAAC,CAAA,CAC9D,WAAYG,CACd,CAAC,CACH,CAAA,CAGEH,EACK,CACLva,CAAAA,CAAS,UAAW,CAAA,CAClB,KAAMua,CACN,CAAA,KAAA,CAAOva,CAAS,CAAA,aAAA,CAAc,CAC5B,cAAgB,CAAA,CAACua,CAAc,CAAA,CAC/B,WAAYG,CACd,CAAC,CACH,CAAC,CACH,CAGK,CAAA,EACT,CAAA,CAEaC,GAA4B,CAAC,CACxC,EAAApX,CAAAA,CAAAA,CACA,IAAAlM,CAAAA,CACF,CAEc,GAAA,CACZ,IAAImM,CAAQ,CAAA,EAAA,CACZ,OAAQnM,CAAAA,EACN,KAAK,MAAA,CACHmM,CAAQ,CAAA,yBAAA,CACR,MACF,KAAK,OAAA,CACHA,CAAQ,CAAA,0BAAA,CACR,MACF,KAAK,UACHA,CAAAA,CAAAA,CAAQ,sBACR,KACJ,CACA,OAAO,CAAA,EAAGrC,EAAK,CAAG+B,EAAAA,CAAAA,CAAW,CAE3B,IAAA,CAAM,YACN,KAAOK,CAAAA,CACT,CAAC,CAAC,CAAGC,EAAAA,CAAK,CACZ,CAAA,CAAA,CAEMoX,GAAc,CAAC,CACnB,IAAAvZ,CAAAA,CAAAA,CACA,KAAAhK,CACF,CAAA,GAGc,CACZ,IAAImM,EAAQ,EACZ,CAAA,OAAQnM,CAAM,EACZ,KAAK,UAAA,CACHmM,CAAQ,CAAA,2BAAA,CACR,KACJ,CACA,IAAMpN,CAAQiL,CAAAA,CAAAA,CAAK,MAAM,GAAG,CAAA,CAC5B,OAAO,CAAA,EAAGjL,EAAM,KAAM,CAAA,CAAA,CAAGA,CAAM,CAAA,MAAA,CAAS,CAAC,CAAA,CAAE,IAAK,CAAA,GAAG,CAAC,CAAI8M,CAAAA,EAAAA,CAAAA,CAAW,CACjE,IAAA,CAAM,YACN,KAAO9M,CAAAA,CAAAA,CAAMA,CAAM,CAAA,MAAA,CAAS,CAAC,CAC/B,CAAC,CAAC,CAAA,EAAGoN,CAAK,CAAA,CACZ,CAEaqX,CAAAA,EAAAA,CAA+B,CAAC,CAC3C,IAAA,CAAAxZ,CACF,CAAA,GAEcuZ,GAAY,CAAE,IAAA,CAAAvZ,CAAM,CAAA,IAAA,CAAM,UAAW,CAAC,CAAA,CAEvCyZ,EAAiB,CAAA,cAAA,CACxBC,EAAmB,CAAA,MAAA,CAEnBC,EACJzb,CAAAA,CAAAA,EAEAA,EAAM,GAAKpM,CAAAA,CAAAA,EACTR,kBAAG,CAAA,WAAA,CAAYQ,CAAI,CACfA,CAAAA,CAAAA,CACA6M,CAAS,CAAA,qBAAA,CAAsB,CAAE,UAAY7M,CAAAA,CAAK,CAAC,CACzD,EAEI8nB,EAAwB,CAAA,CAAC,CAC7B,IAAA,CAAA9nB,CACF,CAEMA,GAAAA,CAAAA,CAAK,IAASR,GAAAA,kBAAAA,CAAG,WAAW,eAE5BuoB,CAAAA,EAAAA,CAAiC,CAAC,CACtC,QAAArX,CACA,CAAA,MAAA,CAAAvS,CACA,CAAA,MAAA,CAAAwU,CACF,CAAA,GAI2C,CACzC,IAAM9B,EAAiBhE,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM+a,EAAiB,CAAC,CAAA,CAC/Dxb,CAAQ4b,CAAAA,EAAAA,CAAkB,CAC9B,OAAAtX,CAAAA,CAAAA,CACA,cAAgBG,CAAAA,CAAAA,CAChB,MAAA1S,CAAAA,CAAAA,CACA,MAAAwU,CAAAA,CACF,CAAC,CAED,CAAA,OACEvG,CAAM,CAAA,MAAA,EACN,CAAC0b,EAAsB,CAAA,CAAE,IAAM1b,CAAAA,CAAAA,CAAMA,EAAM,MAAS,CAAA,CAAC,CAAG,CAAC,CAEzDA,EAAAA,CAAAA,CAAM,IAAKS,CAAAA,CAAAA,CAAS,gBAAgB,CAAE,UAAA,CAAYgE,CAAe,CAAC,CAAC,CAE9DzE,CAAAA,CACT,CAEM4b,CAAAA,EAAAA,CAAoB,CAAC,CACzB,OAAA,CAAAtX,CACA,CAAA,cAAA,CAAA0W,CACA,CAAA,MAAA,CAAAjpB,CACA,CAAA,MAAA,CAAAwU,CACF,CAK2C,GAAA,CACzC,IAAMhC,CAAAA,CAAOD,EAAQ,IAAK,CAAA,CAAE,EAAIiX,CAAAA,EAAe,CAAC,CAEhD,CAAA,GAAIhV,CAAO,CAAA,IAAA,CAAM,CACf,IAAI1C,CAAaU,CAAAA,CAAAA,CAAK,WAAW,CAC/B,IAAA,CAAM+W,EAA6B,CAAA,CAAE,KAAM/U,CAAO,CAAA,IAAK,CAAC,CAAA,CACxD,OAAQ,IACR,CAAA,SAAA,CAAW,OACb,CAAC,CAED,CAAA,GAAI1C,CAAW,CAAA,OAAA,EAAWA,EAAW,IAAM,CAAA,CAEzC,IAAMiL,CAAAA,CAAYxK,EAAQ,YAA8BiC,CAAAA,CAAAA,CAAO,IAAI,CAAA,CAC7DvG,EAAQ2b,EAA+B,CAAA,CAC3C,OAAArX,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQ+c,CAAAA,CACV,CAAC,CACD,CAAA,GAAI9O,CAAM,CAAA,MAAA,CAAQ,CAChB,IAAMpM,CAAAA,CAAO6M,CAAS,CAAA,aAAA,CAAc,CAClC,UAAYA,CAAAA,CAAAA,CAAS,aAAc,CAAA,CACjC,MAAO,KACP,CAAA,SAAA,CAAW,IACX,CAAA,UAAA,CAAY,CACV,CACE,IAAA,CAAM+a,EAEN,CAAA,IAAA,CAAM/a,EAAS,eAAgB,CAAA,CAAE,OAAS,CAAA,KAAM,CAAC,CACnD,CACF,CACA,CAAA,UAAA,CAAYgb,EAAiBzb,CAAAA,CAAK,CACpC,CAAC,EACD,IAAM6D,CAAAA,CAAAA,CAAW,IACnB,CAAC,EACDU,CAAK,CAAA,GAAA,CAAI3Q,CAAI,EACf,MAGEiQ,CAAaU,CAAAA,CAAAA,CAAK,eAAgB,CAAA,CAChC,IAAM+W,CAAAA,EAAAA,CAA6B,CAAE,IAAA,CAAM/U,EAAO,IAAK,CAAC,CACxD,CAAA,SAAA,CAAW,OACb,CAAC,EAEL,CAEA,GAAI1C,EAAW,IAAM,CAAA,CACnB,IAAMgY,CAAAA,CAAiBpb,CAAS,CAAA,cAAA,CAAe,CAC7C,YAAA,CAAcoD,EAAW,IACzB,CAAA,UAAA,CAAY,CAACmX,CAAc,CAC7B,CAAC,CAAA,CAED,GAAIA,CAAAA,CAEF,OAAI,OAAOA,CAAAA,EAAmB,QAAYA,EAAAA,CAAAA,GAAmB,OACpD,CACLva,CAAAA,CAAS,eAAgB,CAAA,CACvB,WAAYob,CACd,CAAC,CACH,CAAA,CAGK,CACL,OAAOb,CAAAA,EAAmB,QACtBa,CAAAA,CAAAA,CACApb,EAAS,UAAW,CAAA,CAClB,IAAMua,CAAAA,CAAAA,CACN,KAAOa,CAAAA,CACT,CAAC,CACP,CAEJ,CAEA,OAAO,EACT,CAEA,GAAItV,CAAAA,CAAO,IAAS,GAAA,OAAA,CAAS,CAC3B,GAAI,CAACyU,CAAkB,EAAA,OAAOA,CAAmB,EAAA,QAAA,CAC/C,OAAO,GAIT,IAAMhb,CAAAA,CAASuG,CAAO,CAAA,KAAA,CAElBqV,GAAkB,CAChB,OAAA,CAAAtX,CACA,CAAA,cAAA,CAAgB,OAChB,MAAAvS,CAAAA,CAAAA,CACA,MAAQwU,CAAAA,CAAAA,CAAO,KAAQ,GAAA,CAAC,CACpBA,CAAAA,CAAAA,CAAO,MAAM,CAAC,CAAA,CACd,CACE,GAAGA,EACH,IAAM,CAAA,MACR,CACN,CAAC,EAXD,EAAC,CAaL,GAAI,CAACvG,EAAM,MACT,CAAA,OAAO,EAAC,CAIV,IAAM8b,CAAwBL,CAAAA,EAAAA,CAAiBzb,CAAK,CAAA,CAKpD,OAJ2B8b,CAAsB,CAAA,IAAA,CAAMC,CACrDL,EAAAA,EAAAA,CAAsB,CAAE,IAAMK,CAAAA,CAAK,CAAC,CACtC,CAGED,EAAAA,CAAAA,CAAsB,IACpBrb,CAAAA,CAAAA,CAAS,gBAAgB,CACvB,UAAA,CAAYA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAM,CAAA,MAAO,CAAC,CAClD,CAAC,CACH,CAAA,CAGK,CACLA,CAAAA,CAAS,UAAW,CAAA,CAClB,IAAMua,CAAAA,CAAAA,CACN,MAAOva,CAAS,CAAA,cAAA,CAAe,CAC7B,YAAA,CAAcA,EAAS,wBAAyB,CAAA,CAC9C,UAAYua,CAAAA,CAAAA,CACZ,KAAM,KACR,CAAC,CACD,CAAA,UAAA,CAAY,CACVva,CAAAA,CAAS,aAAc,CAAA,CACrB,UAAW,IACX,CAAA,UAAA,CAAY,CACV,CACE,KAAM,MACN,CAAA,IAAA,CAAM,KACR,CACF,EACA,UAAYqb,CAAAA,CACd,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACH,CACF,CAEA,GAAIvV,CAAAA,CAAO,OAAS,QAAU,CAAA,CAC5B,IAAIvG,CAAAA,CAA6C,EAC3ChF,CAAAA,CAAAA,CAAWuL,CAAO,CAAA,QAAA,EAAY,EAAC,CAErC,IAAWzU,IAAAA,CAAAA,IAAQyU,EAAO,UAAY,CAAA,CACpC,IAAM3G,CAAAA,CAAW2G,EAAO,UAAWzU,CAAAA,CAAI,CACjCkqB,CAAAA,CAAAA,CAA2Bvb,EAAS,wBAAyB,CAAA,CACjE,UAAYua,CAAAA,CAAAA,EAAkBQ,EAC9B,CAAA,IAAA,CAAA1pB,CACF,CAAC,EACKmqB,CAAgBL,CAAAA,EAAAA,CAAkB,CACtC,OAAA,CAAAtX,EACA,cAAgB0X,CAAAA,CAAAA,CAChB,MAAAjqB,CAAAA,CAAAA,CACA,OAAQ6N,CACV,CAAC,CACD,CAAA,GAAI,CAACqc,CAAAA,CAAc,MACjB,CAAA,SAEF,IAAMC,CAA0B,CAAA,CAACtc,CAAS,CAAA,KAAA,EAAO,KAC9Cuc,CAAMA,EAAAA,CAAAA,CAAE,IAAS,GAAA,MACpB,EACsBnhB,CAAS,CAAA,QAAA,CAASlJ,CAAI,CAAA,EAGvBoqB,EACnBlc,CAAQA,CAAAA,CAAAA,CAAM,MAAOic,CAAAA,CAAa,EAElCjc,CAAM,CAAA,IAAA,CAIJS,CAAS,CAAA,WAAA,CAAY,CACnB,UAAYub,CAAAA,CAAAA,CACZ,aAAevb,CAAAA,CAAAA,CAAS,MAAM,CAC5B,UAAA,CAAYgb,EAAiBQ,CAAAA,CAAa,CAC5C,CAAC,CACH,CAAC,CACH,EAEJ,CAEA,OAAOjc,CACT,CAEA,GACEjO,CAAAA,CAAO,KACPwU,EAAAA,CAAAA,CAAO,OAAS,QACfA,GAAAA,CAAAA,CAAO,MAAW,GAAA,MAAA,EAAUA,CAAO,CAAA,MAAA,GAAW,WAE/C,CAAA,CAAA,OAAO2U,GAAgB,CAAE,cAAA,CAAAF,CAAe,CAAC,EAG3C,GAAIjpB,CAAAA,CAAO,MAAUwU,EAAAA,CAAAA,CAAO,OAAS,SAAaA,EAAAA,CAAAA,CAAO,MAAW,GAAA,OAAA,CAClE,OAAOwU,EAAAA,CAAkB,CAAE,cAAA,CAAAC,CAAe,CAAC,CAAA,CAG7C,GAAIzU,CAAAA,CAAO,MAAO,CAChB,GAAIA,CAAO,CAAA,KAAA,CAAM,SAAW,CAC1B,CAAA,OAAOqV,EAAkB,CAAA,CACvB,OAAAtX,CAAAA,CAAAA,CACA,cAAgB,CAAA,MAAA,CAChB,OAAAvS,CACA,CAAA,MAAA,CAAQwU,CAAO,CAAA,KAAA,CAAM,CAAC,CACxB,CAAC,CAGH,CAAA,IAAI6V,EAAkD,EAAC,CAEvD,GACE7V,CAAAA,CAAO,eAAoB,GAAA,KAAA,EAC1BA,CAAO,CAAA,KAAA,CAAM,SAAW,CACvBA,EAAAA,CAAAA,CAAO,KAAM,CAAA,IAAA,CACVzK,GAASA,CAAK,CAAA,IAAA,GAAS,MAAUA,EAAAA,CAAAA,CAAK,OAAS,MAClD,CAAA,CACF,CACA,IAAA,IAAWA,CAAQyK,IAAAA,CAAAA,CAAO,KAAO,CAAA,CAC/B,IAAMvG,CAAQ4b,CAAAA,EAAAA,CAAkB,CAC9B,OAAA,CAAAtX,EACA,cAAgB0W,CAAAA,CAAAA,EAAkB,MAClC,CAAA,MAAA,CAAAjpB,EACA,MAAQ+J,CAAAA,CACV,CAAC,CAAA,CACD,GAAIkE,CAAAA,CAAM,MACR,CAAA,GAAIgb,EACFoB,CAAaA,CAAAA,CAAAA,CAAW,MAAOpc,CAAAA,CAAK,OAC/B,CACL,IAAMqc,CAAiB5b,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM,MAAO,CAAC,EAE3D2b,CAAW,CAAA,IAAA,CACT3b,CAAS,CAAA,WAAA,CAAY,CACnB,UAAY4b,CAAAA,CAAAA,CACZ,aAAe5b,CAAAA,CAAAA,CAAS,MAAM,CAC5B,UAAA,CAAYgb,EAAiBzb,CAAAA,CAAK,CACpC,CAAC,CACH,CAAC,CAAA,CACDS,CAAS,CAAA,eAAA,CAAgB,CAAE,UAAA,CAAY4b,CAAe,CAAC,CACzD,EACF,CAEJ,CACA,OAAOD,CACT,CAGI7V,CAAAA,CAAO,OAAS,MAClB,EAAA,OAAA,CAAQ,IACN,CAAA,CAAA,0CAAA,EAAmC,IAAK,CAAA,SAAA,CAAUA,CAAM,CAAC,gOAC3D,EAEJ,CAEA,OAAO,EACT,CAGaU,CAAAA,EAAAA,CAAkC,CAAC,CAAE,QAAA3C,CAAS,CAAA,MAAA,CAAAvS,CAAO,CAAA,GAAM,CACtE,IAAMwS,CAAOD,CAAAA,CAAAA,CAAQ,WAAW,CAC9B,eAAA,CAAiBvS,CAAO,CAAA,eAAA,CACxB,GAAIwpB,EACJ,CAAA,IAAA,CAAMxpB,CAAO,CAAA,MACf,CAAC,CAEDuS,CAAAA,CAAAA,CAAQ,SAAU,CAAA,WAAA,CAAa,CAAC,CAAE,SAAAE,CAAAA,CAAU,IAAM,CAChD,GAAM,CAAE,QAAA,CAAA1T,CAAS,CAAIwmB,CAAAA,EAAAA,CAAsB9S,CAAS,CAAA,CAEpD,GAAI,CAAC1T,CAAAA,CACH,OAGF,GAAIA,CAAS,CAAA,KAAA,EAASA,CAAS,CAAA,KAAA,CAAM,OAAS,CAAG,CAAA,CAC3CwT,CAAQ,CAAA,MAAA,CAAO,KAAK,KAAU,GAAA,OAAA,EAChC,OAAQ,CAAA,IAAA,CACN,4CAAkC,CAAGE,EAAAA,CAAAA,CAAU,MAAO,CAAA,WAAA,EAAa,CAAA,CAAA,EAAIA,CAAU,CAAA,IAAI,EAAE,CAAQ1T,KAAAA,EAAAA,CAAAA,CAAS,KAAM,CAAA,MAAM,0MACtH,CAEF,CAAA,MACF,CAEA,IAAM+T,EAAqBP,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAIJ,CAAQ,CAAC,CAAG,CAAA,UAAA,CAAW,CACnE,IAAMH,CAAAA,CAAAA,CAAe,CAAE,EAAA,CAAIS,EAAU,EAAI,CAAA,IAAA,CAAM,UAAW,CAAC,EAC3D,SAAW,CAAA,MACb,CAAC,CAAA,CACD,GAAI,CAACK,CAAAA,CAAmB,IACtB,CAAA,OAGF,IAAIyX,CAAgC/X,CAAAA,CAAAA,CAAK,UAAW,CAAA,CAClD,KAAM6W,EAA0B,CAAA,CAAE,EAAI5W,CAAAA,CAAAA,CAAU,GAAI,IAAM,CAAA,UAAW,CAAC,CAAA,CACtE,MAAQ,CAAA,IAAA,CACR,SAAW,CAAA,OACb,CAAC,CACD,CAAA,GAAI,CAAC8X,CAAAA,CAA8B,KACjC,OAIF,IAAMtc,CAAQ2b,CAAAA,EAAAA,CAA+B,CAC3C,OAAArX,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQjB,CAAAA,CACV,CAAC,CAAA,CACD,GAAIkP,CAAM,CAAA,MAAA,CAAQ,CAChBuE,CAAAA,CAAK,OAAO,CACV,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQA,EAAK,kBAAmB,CAAA,CAAE,OAAAD,CAAAA,CAAAA,CAAS,EAAIJ,CAAAA,CAAQ,CAAC,CAAA,CACxD,KAAMW,CAAmB,CAAA,IAC3B,CAAC,CAAA,CACD,IAAM0X,CAA0B9b,CAAAA,CAAAA,CAAS,aAAc,CAAA,CACrD,YAAa,IACb,CAAA,UAAA,CAAYA,CAAS,CAAA,aAAA,CAAc,CACjC,KAAO,CAAA,IAAA,CACP,SAAW,CAAA,IAAA,CACX,WAAY,CACV,CACE,IAAM+a,CAAAA,EAAAA,CAEN,KAAM/a,CAAS,CAAA,eAAA,CAAgB,CAAE,OAAA,CAAS,KAAM,CAAC,CACnD,CACF,CAAA,CACA,UAAYA,CAAAA,CAAAA,CAAS,iBAAkB,CAAA,CACrC,cAAe,CACbA,CAAAA,CAAS,iBAAkB,CAAA,CACzB,SAAUoE,CAAmB,CAAA,IAC/B,CAAC,CACH,EACA,QAAU,CAAA,SACZ,CAAC,CAAA,CACD,UAAY4W,CAAAA,EAAAA,CAAiBzb,CAAK,CACpC,CAAC,CACD,CAAA,IAAA,CAAMsc,CAA8B,CAAA,IACtC,CAAC,CACD/X,CAAAA,CAAAA,CAAK,GAAIgY,CAAAA,CAAuB,EAClC,CAGED,KAAAA,CAAAA,CAAgC/X,CAAK,CAAA,eAAA,CAAgB,CACnD,IAAA,CAAM6W,EAA0B,CAAA,CAC9B,GAAI5W,CAAU,CAAA,EAAA,CACd,IAAM,CAAA,UACR,CAAC,CACD,CAAA,SAAA,CAAW,OACb,CAAC,EAEL,CAAC,EACH,CCxhBO,CAAA,IAAMgY,GAAqB,aACrBC,CAAAA,EAAAA,CAAkB,UAClBC,CAAAA,EAAAA,CAAmB,OCuCzB,IAAMC,EAAAA,CAAiB,CAAC,CAC7B,KAAA7H,CACA,CAAA,QAAA,CAAA8H,CACA,CAAA,GAAGC,CACL,CAGQ,GAAA,CAEN,GAAI,CAAC/H,CAMH,CAAA,OAAO,CAAE,OAAA,CAAS,MAAO,IAAM,CAAA,EAAG,CAGpC,CAAA,GAAM,CAAE,OAAAgI,CAAAA,CAAAA,CAAS,IAAAhrB,CAAAA,CAAK,EAAI0jB,EAAkB,CAAA,CAC1C,IAAAV,CAAAA,CAAAA,CACA,GAAG+H,CACL,CAAC,CAAA,CACD,OAAI/qB,CACF8qB,EAAAA,CAAAA,CAAS9qB,CAAI,CAAA,CAER,CAAE,OAAAgrB,CAAAA,CAAAA,CAAS,IAAAhrB,CAAAA,CAAK,CACzB,CAEairB,CAAAA,EAAAA,CAAoCjrB,CAC/C,EAAA,CAAA,EAAGA,CAAI,CAAA,wBAAA,CAAA,CAEIkrB,EAAyBlrB,CAAAA,CAAAA,EACpC,GAAG6R,CAAW,CAAA,CACZ,IAAM,CAAA,YAAA,CACN,MAAO7R,CACT,CAAC,CAAC,CAAA,IAAA,CAAA,CAESmrB,GAA0BnrB,CACrC,EAAA,CAAA,EAAG6R,CAAW,CAAA,CACZ,IAAM,CAAA,YAAA,CACN,KAAO7R,CAAAA,CACT,CAAC,CAAC,CAAA,KAAA,CAAA,CAGSorB,EAAwCprB,CAAAA,CAAAA,EACnD,GAAGA,CAAI,CAAA,WAAA,CAAA,CAEIqrB,EAA6BrrB,CAAAA,CAAAA,EACxC,GAAG6R,CAAW,CAAA,CACZ,IAAM,CAAA,YAAA,CACN,KAAO7R,CAAAA,CACT,CAAC,CAAC,WAMSsrB,EAAmC,CAAA,CAAC,CAC/C,YAAA,CAAAC,EACA,YAAAC,CAAAA,CACF,CAGM,GAAA,CACJ,IAAMC,CAAclc,CAAAA,CAAAA,CAAU,mBAAoB,CAAA,IAAA,CAElD,OAAIic,CAAAA,CACK,CAAGC,EAAAA,CAAW,IAAIF,CAAgB,EAAA,SAAS,CAAKC,EAAAA,EAAAA,CAAY,IAE9DD,CAAe,CAAA,CAAA,EAAGE,CAAW,CAAA,CAAA,EAAIF,CAAY,CAAME,CAAAA,CAAAA,CAAAA,CAC5D,CAEMC,CAAAA,EAAAA,CAAuB,CAC3B5rB,CAAAA,CACA4S,CACwB,GAAA,CACxB,IAAM7S,CAASoB,CAAAA,CAAAA,EAET,CAAA,CAAE,KAAMsqB,CAAa,CAAA,CAAI7H,EAAkB,CAAA,CAC/C,OAAA5jB,CACA,CAAA,IAAA,CAAM,CAGJ,IAAA,CAAM4S,EAAU,IAChB,CAAA,IAAA,CAAMA,CAAU,CAAA,IAClB,EACA,eAAiBwY,CAAAA,EACnB,CAAC,CAAA,CAEKlD,EAAanE,EAA6BnR,CAAAA,CAAAA,CAAU,UAAU,CAAA,CAEpE,GAAI,CAACvR,CAAAA,CAAetB,CAAM,CAAA,CACxB,OAAO,CACL,CACE,UAAA,CAAAmoB,EACA,IAAM,CAAA,SAAA,CACN,IAAMsD,CAAAA,EAAAA,CAAiC,CACrC,YAAAC,CAAAA,CAAAA,CACA,YAAc,CAAA,cAChB,CAAC,CACH,CACF,CAGF,CAAA,GAAI,CAAC7Y,CAAAA,CAAU,UAAW,CAAA,MAAA,CACxB,OAAO,EAAC,CAGV,IAAMiZ,CAAAA,CACJ,GACuB,CACvB,GAAI,CAAE,CAAA,OAAA,GAAY,OAGlB,OAAO,IAAA,CAAK,SAAU,CAAA,CAAA,CAAE,OAAS,CAAA,IAAA,CAAM,CAAC,CAC1C,EAGA,OAAK9rB,CAAAA,CAAO,UAaL,CAAA,CACL,CACE,OAASmoB,CAAAA,CAAAA,CAAa,MAAY,CAAA,GAClC,IAAM,CAAA,MAAA,CACN,IAAMuD,CAAAA,CACR,CACF,CAAA,CAlBS7Y,CAAU,CAAA,UAAA,CAAW,IAAK,CAAM,EAAA,CACrC,IAAMkZ,CAAAA,CAAW,GAAGL,CAAY,CAAA,EAAA,EAAK,CAAE,CAAA,IAAI,KAC3C,OAAO,CACL,OAAS,CAAA,CAAA,EAAG,OACZ,CAAA,UAAA,CAAA,CACG,CAAC,CAAA,CAAE,YAAc,CAACI,CAAAA,CAAoB,CAAC,CAAA,CAAI,IAAM,EAAQ,GAAA,EAAA,CAC5D,IAAM,CAAA,CAAA,CAAE,KACR,IAAMC,CAAAA,CACR,CACF,CAAC,CAUL,CAAA,CAEMC,EAAwB,CAAA,CAAC/rB,EAAgB4S,CAAyB,GAAA,CACtE,IAAM7S,CAAAA,CAASoB,GAEX8F,CAAAA,CAAAA,CAAa4H,CAAS,CAAA,QAAA,CAAS,MAAM,CASzC,CAAA,GAPyB+D,CAAU,CAAA,SAAA,CAAU,MAAQ1T,CAAAA,CAAAA,EACnDA,CAAS,CAAA,aAAA,CAAc,SAAS,SAAS,CAC3C,CAKqB,CAAA,MAAA,CAAQ,CAC3B,GAAM,CAAE,IAAMusB,CAAAA,CAAa,EAAI7H,EAAkB,CAAA,CAC/C,MAAA5jB,CAAAA,CAAAA,CACA,KAAM,CAGJ,IAAA,CAAM4S,CAAU,CAAA,IAAA,CAChB,KAAMA,CAAU,CAAA,IAClB,CACA,CAAA,eAAA,CAAiB2Y,EACnB,CAAC,CAAA,CACDtkB,CAAa4H,CAAAA,CAAAA,CAAS,cAAc,CAClC,KAAA,CAAO,CAAC4c,CAAY,CACtB,CAAC,EACH,CAEA,OACE1rB,CAAO,CAAA,UAAA,EACPA,CAAO,CAAA,OAAA,CAAQ,cAAc,CAAG,EAAA,QAAA,GAAa,UAE7CkH,GAAAA,CAAAA,CAAa4H,EAAS,QAAS,CAAA,WAAA,CAAa,CAAC5H,CAAU,CAAC,CAAA,CAAA,CAGrChH,CAAgBF,CAAAA,CAAM,EAC1B,IAAS,GAAA,gBAAA,CACxBkH,CAAa4H,CAAAA,CAAAA,CAAS,SAAS,YAAc,CAAA,CAAC5H,CAAU,CAAC,EAEzDA,CAAa4H,CAAAA,CAAAA,CAAS,QAAS,CAAA,mBAAA,CAAqB,CAAC5H,CAAU,CAAC,CAAA,CAG3DA,CACT,CAEM+kB,CAAAA,EAAAA,CAAsBpZ,CAAmC,EAAA,CAC7D,IAAM7S,CAASoB,CAAAA,CAAAA,EAEf,CAAA,GAAI,CAACE,CAAetB,CAAAA,CAAM,CAMxB,CAAA,OALgB,CACd6S,CAAAA,CAAU,UAAc,EAAA,aAAA,CACxBA,EAAU,OAAW9R,EAAAA,CAAAA,CAAc8R,CAAU,CAAA,OAAO,EACpDA,CAAU,CAAA,WAAA,EAAe9R,CAAc8R,CAAAA,CAAAA,CAAU,WAAW,CAC9D,CAAA,CAIF,IAAIqZ,CAAAA,CAAmB,EAAC,CAEpBrZ,CAAU,CAAA,UAAA,CAAW,SACnB7S,CAAO,CAAA,UAAA,CACTksB,CAAS,CAAA,CACP,wCACA,GAAGrZ,CAAAA,CAAU,UAAW,CAAA,GAAA,CACrBpN,GACC,CAAeA,YAAAA,EAAAA,CAAAA,CAAU,IAAI,CAAA,CAAA,EAAIA,CAAU,CAAA,WAAA,CAAc1E,CAAc0E,CAAAA,CAAAA,CAAU,WAAW,CAAI,CAAA,EAAE,CACtG,CAAA,CACF,EAEAymB,CAASrZ,CAAAA,CAAAA,CAAU,UAAW,CAAA,GAAA,CAC3BpN,GACC,CAAUA,OAAAA,EAAAA,CAAAA,CAAU,IAAI,CAAA,CAAA,EAAIA,CAAU,CAAA,WAAA,CAAc1E,CAAc0E,CAAAA,CAAAA,CAAU,WAAW,CAAI,CAAA,EAAE,CACjG,CAAA,CAAA,CAAA,CAIJ,IAAM0mB,CAAmBtZ,CAAAA,CAAAA,CAAU,SAAU,CAAA,MAAA,CAAQ1T,GACnDA,CAAS,CAAA,aAAA,CAAc,QAAS,CAAA,SAAS,CAC3C,CAaA,CAAA,OAXgB,CACd0T,CAAAA,CAAU,YAAc,aACxBA,CAAAA,CAAAA,CAAU,OAAW9R,EAAAA,CAAAA,CAAc8R,EAAU,OAAO,CAAA,CACpDA,CAAU,CAAA,WAAA,EAAe9R,EAAc8R,CAAU,CAAA,WAAW,CAC5D,CAAA,GAAGqZ,CACH,CAAA,GAAGC,CAAiB,CAAA,GAAA,CACjBhtB,GACC,CAAYA,SAAAA,EAAAA,CAAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,EAAS,WAAc4B,CAAAA,CAAAA,CAAc5B,CAAS,CAAA,WAAW,EAAI,EAAE,CAAA,CAChG,CACA,CAAA,kBACF,CAEF,CAAA,CAEMitB,EAAmB,CAAA,CAAC,CACxB,MAAAnsB,CAAAA,CAAAA,CACA,cAAAosB,CAAAA,CAAAA,CACA,SAAApB,CACA,CAAA,SAAA,CAAApY,CACF,CAAA,GAKM,CACJ,IAAM7S,CAAAA,CAASoB,CAAU,EAAA,CAEnBjB,CAAOqrB,CAAAA,EAAAA,CAA0B3Y,CAAU,CAAA,IAAI,EAC/C,CAAE,IAAA,CAAMyZ,CAAwB,CAAA,CAAIzI,GAAkB,CAC1D,MAAA,CAAA5jB,CACA,CAAA,IAAA,CAAM,CACJ,IAAM,CAAA,CAAA,aAAA,EAAgBE,CAAI,CAAA,CAAA,CAC1B,KAAAA,CACF,CAAA,CACA,eAAiBorB,CAAAA,EACnB,CAAC,CAMD,CAAA,GAJIe,CACFrB,EAAAA,CAAAA,CAASqB,CAAuB,CAG9B,CAAA,CAAChrB,CAAetB,CAAAA,CAAM,EAAG,CAC3B,IAAI0H,CAAqB,CAAA,CACvB,CACE,MAAA,CAAQ,SACV,CACF,EAKM6kB,CAHiB1Z,CAAAA,CAAAA,CAAU,UAAW,CAAA,MAAA,CACzCpN,GAAcA,CAAU,CAAA,EAAA,GAAO,MAAUA,EAAAA,CAAAA,CAAU,KAAO,UAC7D,CAAA,CAEG,GACEA,CAAAA,CAAAA,EACCA,CAAU,CAAA,SAAA,GACTA,CAAU,CAAA,EAAA,GAAO,WAAa,qBAAwB,CAAA,MAAA,CAC3D,CACC,CAAA,MAAA,CAAO,OAAO,CACd,CAAA,MAAA,CAAOuc,EAAM,CAAA,CAChB,OAAIuK,CAAS,CAAA,MAAA,GAAW,CAClBA,GAAAA,CAAAA,CAAS,CAAC,CAAA,GAAM,qBAClB7kB,GAAAA,CAAAA,CAAM,CACJ,GAAGA,CAAAA,CACH,CACE,MAAA,CAAQ,wBACV,CACA,CAAA,CACE,GAAK,CAAA,SAAA,CACL,MAAO,CACL,CAEE,GAAK,CAAA,cAAA,CACL,MAAO,IACT,CAAA,CACA,CACE,MAAA,CAAQ,kBACV,CACF,CACF,CACF,CAAA,CACA2kB,IAAiB,wBAAwB,CAAA,CAAA,CAGvCE,CAAS,CAAA,CAAC,IAAM,mCAClB7kB,GAAAA,CAAAA,CAAM,CACJ,GAAGA,CACH,CAAA,CACE,MAAQ,CAAA,+BACV,EACA,CACE,GAAA,CAAK,SACL,CAAA,KAAA,CAAO,CACL,CACE,GAAA,CAAK,cACL,CAAA,KAAA,CAAO6kB,EAAS,CAAC,CACnB,CACA,CAAA,CACE,MAAQ,CAAA,kBACV,CACF,CACF,CACF,CACAF,CAAAA,CAAAA,GAAiB,+BAA+B,CAAA,CAAA,CAAA,CAQpD3kB,EAAM,CACJ,GAAGA,CACH,CAAA,CACE,IAAK,KACL,CAAA,KAAA,CAAOmL,CAAU,CAAA,IACnB,CACF,CAAA,CAEIyZ,CACF5kB,GAAAA,CAAAA,CAAM,CACJ,GAAGA,CAAAA,CACH,CACE,GAAA,CAAK,sBACL,KAAO4kB,CAAAA,CACT,CACF,CAAA,CAAA,CAGKxd,EAAS,gBAAiB,CAAA,CAC/B,WAAa,CAAA,CAAC,qBAAqB,CAAA,CACnC,GAAApH,CAAAA,CACF,CAAC,CACH,CAEA,IAAM8kB,CAAAA,CAAShnB,GACbA,CAAW,CAAA,MAAA,CACT,CAACinB,CAAAA,CAAMC,IAAS,CACd,IAAMruB,CAAMquB,CAAAA,CAAAA,CAAK,IACXpuB,CAAAA,CAAAA,CAAQ0B,CAAO,CAAA,UAAA,CAAa,QAAQ0sB,CAAK,CAAA,IAAI,CAAKA,CAAAA,CAAAA,CAAAA,CAAK,KAC7D,OAAIruB,CAAAA,GAAQC,CACVmuB,CAAAA,CAAAA,CAAKpuB,CAAG,CAAIA,CAAAA,CAAAA,CACHwC,EAAWxC,CAAAA,CAAG,CAAMA,GAAAA,CAAAA,CAC7BouB,CAAKpuB,CAAAA,CAAG,EAAIC,CAEZmuB,CAAAA,CAAAA,CAAK,CAAIpuB,CAAAA,EAAAA,CAAG,GAAG,CAAIC,CAAAA,CAAAA,CAEdmuB,CACT,CAAA,CACA,EACF,CAAA,CAEI/kB,CAA2B,CAAA,CAC/B,MAAQmL,CAAAA,CAAAA,CAAU,MAClB,CAAA,GAAA,CAAKA,EAAU,IACjB,CAAA,CAEIA,CAAU,CAAA,cAAA,CAAe,SAC3BnL,CAAI,CAAA,IAAA,CAAO8kB,CAAM3Z,CAAAA,CAAAA,CAAU,cAAc,CAGvCA,CAAAA,CAAAA,CAAAA,CAAU,gBAAiB,CAAA,MAAA,GAC7BnL,EAAI,OAAU8kB,CAAAA,CAAAA,CAAM3Z,CAAU,CAAA,gBAAgB,GAG5CA,CAAU,CAAA,gBAAA,CAAiB,MAC7BnL,GAAAA,CAAAA,CAAI,QAAU8kB,CAAM3Z,CAAAA,CAAAA,CAAU,gBAAgB,CAAA,CAAA,CAG5CA,EAAU,eAAgB,CAAA,MAAA,GAC5BnL,CAAI,CAAA,KAAA,CAAQ8kB,CAAM3Z,CAAAA,CAAAA,CAAU,eAAe,CAAA,CAAA,CAGzCA,EAAU,cAAe,CAAA,MAAA,GAC3BnL,CAAI,CAAA,QAAA,CAAW8kB,EAAM3Z,CAAU,CAAA,cAAc,CAG3CA,CAAAA,CAAAA,CAAAA,CAAU,iBACRA,CAAU,CAAA,cAAA,CAAe,EAAO,GAAA,UAAA,GAC9B7S,CAAO,CAAA,UAAA,CACT0H,CAAI,CAAA,QAAA,CAAW,QAAQmL,CAAU,CAAA,cAAA,CAAe,IAAI,CAAA,CAAA,CAEpDnL,EAAI,QAAWmL,CAAAA,CAAAA,CAAU,cAAe,CAAA,IAAA,CAAA,CAGxCA,EAAU,cAAe,CAAA,EAAA,GAAO,MAC9B7S,GAAAA,CAAAA,CAAO,UACT0H,CAAAA,CAAAA,CAAI,IAAO,CAAA,CAAA,KAAA,EAAQmL,EAAU,cAAe,CAAA,IAAI,CAEhDnL,CAAAA,CAAAA,CAAAA,CAAI,KAAOmL,CAAU,CAAA,cAAA,CAAe,IAKtCA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,gBAAgB,SAC5BnL,GAAAA,CAAAA,CAAI,SAAYmL,CAAAA,CAAAA,CAAU,cAAgB,EAAA,SAAA,CAAA,CAGxCA,CAAU,CAAA,cAAA,GACZnL,EAAI,cAAiBmL,CAAAA,CAAAA,CAAU,cAG7ByZ,CAAAA,CAAAA,CAAAA,GACF5kB,EAAI,mBAAsB4kB,CAAAA,CAAAA,CAAAA,CAG5B,IAAMK,CAAAA,CAAiB9Z,EAAU,SAAU,CAAA,MAAA,CAAQ1T,CACjDA,EAAAA,CAAAA,CAAS,aAAc,CAAA,QAAA,CAAS,OAAO,CACzC,EACA,GAAIwtB,CAAAA,CAAe,MAAS,CAAA,CAAA,CAAG,CAC7B,IAAM/G,CAAAA,CAA0C,EAAC,CACjD+G,EAAe,OAASxtB,CAAAA,CAAAA,EAAa,CACnCymB,CAAAA,CAAOzmB,CAAS,CAAA,IAAI,CAAIA,CAAAA,CAAAA,CAAS,aAAe,GAClD,CAAC,CACDuI,CAAAA,CAAAA,CAAI,OAASke,EACf,CAEA,OAAO9W,CAAAA,CAAS,iBAAiB,CAC/B,WAAA,CAAa,CACX,MAAA,CACA,SACA,CAAA,UAAA,CACA,SACA,CAAA,MAAA,CACA,QACA,qBACF,CAAA,CACA,GAAApH,CAAAA,CAAAA,CACA,UAAW,IACb,CAAC,CACH,CAAA,CAEaklB,EAA4B,CAAC,CACxC,MAAA5sB,CAAAA,CAAAA,CACA,cAAA6sB,CACA,CAAA,EAAA,CAAAxa,CACA,CAAA,SAAA,CAAAQ,CACF,CAMM7S,GAAAA,CAAAA,CAAO,OAAQ,CAAA,cAAc,GAAG,iBAC3BA,CAAAA,CAAAA,CAAO,OAAQ,CAAA,cAAc,EAAE,iBAAkB6S,CAAAA,CAAS,CAG/Dga,CAAAA,CAAAA,EAAiBxa,CAAG,CAAA,KAAA,CAAM5R,EAAgC,CAAA,CACrD,GAAG4R,CAAE,CAAA,CAAA,CAAA,CAGPA,CAGHya,CAAAA,EAAAA,CAAwB,CAAC,CAC7B,MAAA,CAAA7sB,CACA,CAAA,cAAA,CAAAosB,EACA,QAAApB,CAAAA,CAAAA,CACA,SAAApY,CAAAA,CACF,CAKM,GAAA,CACJ,IAAM7S,CAAAA,CAASoB,GAETuV,CAAAA,CAAAA,CAAUyV,EAAiB,CAAA,CAC/B,OAAAnsB,CACA,CAAA,cAAA,CAAAosB,CACA,CAAA,QAAA,CAAApB,EACA,SAAApY,CAAAA,CACF,CAAC,CAAA,CAED,GAAI,CAACvR,CAAetB,CAAAA,CAAM,EAAG,CAC3B,IAAM+sB,CAAYlJ,CAAAA,EAAAA,CAAkB,CAClC,MAAA5jB,CAAAA,CAAAA,CACA,IAAM,CAAA,CAGJ,KAAM4S,CAAU,CAAA,IAAA,CAChB,IAAMA,CAAAA,CAAAA,CAAU,IAClB,CAAA,CACA,eAAiByY,CAAAA,EACnB,CAAC,CAAE,CAAA,IAAA,CAIG0B,CAHmBna,CAAAA,CAAAA,CAAU,UAAU,MAAQ1T,CAAAA,CAAAA,EACnDA,CAAS,CAAA,aAAA,CAAc,SAAS,SAAS,CAC3C,CACsC,CAAA,MAAA,CAClC0kB,EAAkB,CAAA,CAChB,MAAA5jB,CAAAA,CAAAA,CACA,KAAM,CAGJ,IAAA,CAAM4S,CAAU,CAAA,IAAA,CAChB,KAAMA,CAAU,CAAA,IAClB,CACA,CAAA,eAAA,CAAiB2Y,EACnB,CAAC,CAAA,CAAE,IACH,CAAA,MAAA,CACJ,OAAO,CACL1c,CAAS,CAAA,kBAAA,CAAmB,CAC1B,IAAM,CAAA,CAAC6H,CAAO,CAAA,CACd,KAAM,CAA+B9D,4BAAAA,EAAAA,CAAAA,CAAU,MAAO,CAAA,iBAAA,EAAmB,CACzE,CAAA,CAAA,KAAA,CACEka,CAAaC,EAAAA,CAAAA,CACT,CAACA,CAAAA,CAAcD,CAAW,CAAA,cAAc,EACxCA,CACE,CAAA,CAAC,SAAWA,CAAAA,CAAAA,CAAW,cAAc,CACrCC,CAAAA,CAAAA,CACE,CAACA,CAAAA,CAAc,UAAW,cAAc,CAAA,CACxC,EACZ,CAAC,CACH,CACF,CAEA,OAAIzrB,GAAqBvB,CAAM,CAAA,CACtB,CACL8O,CAAAA,CAAS,mBAAmB,CAC1B,IAAA,CAAM,CAAC6H,CAAO,EACd,IAAM,CAAA,0BACR,CAAC,CACH,CAGmBzW,CAAAA,CAAAA,CAAgBF,CAAM,CAAA,CAC1B,OAAS,gBACjB,CAAA,CACL8O,CAAS,CAAA,kBAAA,CAAmB,CAC1B,IAAM,CAAA,CAAC,SAAW,CAAA,WAAA,CAAa6H,CAAO,CACtC,CAAA,IAAA,CAAM,WACR,CAAC,CACH,CAAA,CAGK,CACL7H,CAAAA,CAAS,mBAAmB,CAC1B,IAAA,CAAM,CAAC,SAAA,CAAW6H,CAAO,CACzB,CAAA,IAAA,CAAM,WACR,CAAC,CACH,CACF,CAAA,CAEMsW,EAAiB,CAAA,CAAC,CACtB,MAAA,CAAAhtB,CACA,CAAA,cAAA,CAAAosB,EACA,QAAApB,CAAAA,CAAAA,CACA,MAAAiC,CAAAA,CAAAA,CACA,QAAAC,CACF,CAAA,GAMM,CACJ,IAAMntB,EAASoB,CAAU,EAAA,CAEnBgsB,CAAeltB,CAAAA,CAAAA,CAAgBF,CAAM,CACrC0jB,CAAAA,CAAAA,CAAWpiB,CAAetB,CAAAA,CAAM,EAEtC,IAAW6S,IAAAA,CAAAA,IAAasa,CAAQ,CAAA,UAAA,CAC1Bta,EAAU,UAAW,CAAA,MAAA,EACvBmY,EAAe,CAAA,CACb,OAAA/qB,CACA,CAAA,IAAA,CAAM,CAGJ,IAAA,CAAM4S,CAAU,CAAA,IAAA,CAChB,IAAMA,CAAAA,CAAAA,CAAU,IAClB,CACA,CAAA,eAAA,CAAiBwY,EACjB,CAAA,QAAA,CAAAJ,CACF,CAAC,CAAA,CAGEvH,CACHsH,EAAAA,EAAAA,CAAe,CACb,MAAA/qB,CAAAA,CAAAA,CACA,IAAM,CAAA,CAGJ,IAAM4S,CAAAA,CAAAA,CAAU,IAChB,CAAA,IAAA,CAAMA,EAAU,IAClB,CAAA,CACA,eAAiByY,CAAAA,EAAAA,CACjB,SAAAL,CACF,CAAC,CAGsBpY,CAAAA,CAAAA,CAAU,UAAU,MAAQ1T,CAAAA,CAAAA,EACnDA,CAAS,CAAA,aAAA,CAAc,QAAS,CAAA,SAAS,CAC3C,CAAA,CACqB,QACnB6rB,EAAe,CAAA,CACb,MAAA/qB,CAAAA,CAAAA,CACA,KAAM,CAGJ,IAAA,CAAM4S,CAAU,CAAA,IAAA,CAChB,KAAMA,CAAU,CAAA,IAClB,CACA,CAAA,eAAA,CAAiB2Y,GACjB,QAAAP,CAAAA,CACF,CAAC,CAAA,CAIL,IAAMoC,CAAiD,CAAA,CACrD,OACG,CAAA,CAAA,cAAA,GAAkBD,EAAeA,CAAa,CAAA,YAAA,CAAe,KAC9D,GAAA,KAAA,CACF,QAAS,SACT,CAAA,IAAA,CAAM,cACR,CAAA,CAEA,GACE,CAACptB,CAAO,CAAA,OAAA,CAAQ,cAAc,CAAG,EAAA,OAAA,EACjC,CAACuB,EAAAA,CAAqBvB,CAAM,CAC5B,CAAA,CACA,IAAW6S,IAAAA,CAAAA,IAAasa,EAAQ,UAAY,CAAA,CAC1C,IAAMG,CAAAA,CAAwB,CAC5B,UAAA,CAAYzB,EAAqB5rB,CAAAA,CAAAA,CAAQ4S,CAAS,CAClD,CAAA,UAAA,CAAa6Q,CAETsI,CAAAA,EAAAA,CAAsB/rB,EAAQ4S,CAAS,CAAA,CADvC,MAEJ,CAAA,UAAA,CAAYia,GAAsB,CAChC,MAAA,CAAA7sB,CACA,CAAA,cAAA,CAAAosB,CACA,CAAA,QAAA,CAAApB,CACA,CAAA,SAAA,CAAApY,CACF,CAAC,CAAA,CACD,KAAQ6Q,CAAAA,CAAAA,CAAuC,OAA5B,CAAC2J,CAAuB,CAC7C,CAAA,CACM/oB,EACJ8oB,CAAa,CAAA,IAAA,GAAS,gBAClBte,CAAAA,CAAAA,CAAS,iBAAkBwe,CAAAA,CAAqB,CAChDxe,CAAAA,CAAAA,CAAS,cAAcwe,CAAqB,CAAA,CAC5C5jB,CAAYoF,CAAAA,CAAAA,CAAS,cAAc,CACvC,OAAA,CAASmd,EAAmBpZ,CAAAA,CAAS,EACrC,WAAa,CAAA,IAAA,CACb,UAAAvO,CAAAA,CAAAA,CACA,IAAMsoB,CAAAA,CAAAA,CAA0B,CAC9B,MAAA,CAAA5sB,EACA,aAAe,CAAA,IAAA,CACf,EAAI6S,CAAAA,CAAAA,CAAU,KACd,SAAAA,CAAAA,CACF,CAAC,CACH,CAAC,CACDqa,CAAAA,CAAAA,CAAOxjB,CAAS,EAClB,CACA,MACF,CAEA,IAAIlD,EAA0B2mB,CAAQ,CAAA,UAAA,CAAW,GAAKta,CAAAA,CAAAA,EACvC/D,EAAS,iBAAkB,CAAA,CACtC,WAAa,CAAA,QAAA,CACb,QAASmd,EAAmBpZ,CAAAA,CAAS,CACrC,CAAA,QAAA,CACEtR,EAAqBvB,CAAAA,CAAM,CAAM,GAAA,MAAA,EACjCotB,EAAa,IAAS,GAAA,gBAAA,CACxB,IAAMR,CAAAA,CAAAA,CAA0B,CAC9B,MAAA5sB,CAAAA,CAAAA,CACA,EAAI6S,CAAAA,CAAAA,CAAU,KACd,SAAAA,CAAAA,CACF,CAAC,CAAA,CACD,WAAYgZ,EAAqB5rB,CAAAA,CAAAA,CAAQ4S,CAAS,CAAA,CAClD,WAAa6Q,CAETsI,CAAAA,EAAAA,CAAsB/rB,CAAQ4S,CAAAA,CAAS,EADvC,MAEJ,CAAA,UAAA,CAAYia,EAAsB,CAAA,CAChC,OAAA7sB,CACA,CAAA,cAAA,CAAAosB,CACA,CAAA,QAAA,CAAApB,CACA,CAAA,SAAA,CAAApY,CACF,CAAC,EACD,KAAQ6Q,CAAAA,CAAAA,CAAuC,MAA5B,CAAA,CAAC2J,CAAuB,CAC7C,CAAC,CAEF,CAAA,CAED,GAAI,CAAC7mB,CAAAA,CAAQ,MACX,CAAA,OAIEjF,EAAqBvB,CAAAA,CAAM,CAC7BwG,CAAAA,CAAAA,CAAU,CACRsI,CAAS,CAAA,sBAAA,CAAuB,CAC9B,SAAA,CAAW,MACX,UAAY,CAAA,CACV,CACE,WAAA,CAAa,SACb,UAAY,CAAA,IAAA,CACZ,IAAM,CAAA,aAAA,CACN,IAAM,CAAA,iBACR,CACF,CACF,CAAC,CACD,CAAA,GAAGtI,CACL,CAAA,CACS4mB,EAAa,IAAS,GAAA,gBAAA,GAC/B5mB,CAAU,CAAA,CACRsI,EAAS,sBAAuB,CAAA,CAC9B,SAAW,CAAA,KAAA,CACX,UAAY,CAAA,CACV,CACE,WAAA,CAAa,SACb,UAAY,CAAA,IAAA,CACZ,IAAM,CAAA,MAAA,CACN,KAAM,YACR,CACF,CACF,CAAC,EACD,GAAGtI,CACL,CAGF,CAAA,CAAA,IAAMkD,CAAYoF,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CAC1C,UACEse,CAAa,CAAA,IAAA,GAAS,gBAClB,CAAA,CAAE,KAAM,CAAC,CAAE,UAAY,CAAA,MAAO,CAAC,CAAG,CAAA,IAAA,CAAM,YAAa,CAAA,CACrD,MACN,CAAA,OAAA,CAAA5mB,CACA,CAAA,IAAA,CAAMob,GAAqB,CACzB,MAAA,CAAA5hB,CACA,CAAA,IAAA,CAAMmtB,EAAQ,IAChB,CAAC,CACH,CAAC,EACDD,CAAOxjB,CAAAA,CAAS,EAClB,CAAA,CAEa4a,EAA8C,CAAA,CAAC,CAC1D,MAAA,CAAArkB,EACA,KAAAskB,CAAAA,CACF,CAAM,GAAA,CACJ,IAAMvkB,CAASoB,CAAAA,CAAAA,EAETsiB,CAAAA,CAAAA,CAAWpiB,EAAetB,CAAM,CAAA,CAEhCutB,CAAY,CAAA,KAAA,CAQlB,GANAhJ,CAAM,CAAA,GAAA,CAAM,IAAIhP,EAAAA,CAAe,CAC7B,GAAKvV,CAAAA,CAAAA,CAAO,MAAO,CAAA,IAAA,CACnB,KAAM,CAAGutB,EAAAA,CAAS,CACpB,GAAA,CAAA,CAAC,EAGG,CAAC7J,CAAAA,CACHa,CAAM,CAAA,GAAA,CAAI,MAAO,CAAA,CACf,MAAQhV,CAAAA,CAAAA,CAAiB,CAAE,MAAAvP,CAAAA,CAAAA,CAAQ,YAAcutB,CAAAA,CAAU,CAAC,CAC5D,CAAA,IAAA,CAAM,cACR,CAAC,EACDhJ,CAAM,CAAA,GAAA,CAAI,MAAO,CAAA,CACf,MAAQhV,CAAAA,CAAAA,CAAiB,CAAE,MAAA,CAAAvP,EAAQ,YAAcutB,CAAAA,CAAU,CAAC,CAAA,CAC5D,KAAM,cACR,CAAC,CACDhJ,CAAAA,CAAAA,CAAM,IAAI,MAAO,CAAA,CACf,GAAG7U,CAAAA,CAAU,mBACb,CAAA,MAAA,CAAQH,CAAiB,CAAA,CAAE,OAAAvP,CAAQ,CAAA,YAAA,CAAcutB,CAAU,CAAC,CAC9D,CAAC,CAAA,CAAA,KAAA,GAEoBrtB,CAAgBF,CAAAA,CAAM,EAC1B,IAAS,GAAA,gBAAA,EACxBukB,CAAM,CAAA,GAAA,CAAI,MAAO,CAAA,CACf,MAAQ,CAAA,eAAA,CACR,KAAM,YACR,CAAC,CAEIhjB,CAAAA,EAAAA,CAAqBvB,CAAM,CAC9BukB,EAAAA,CAAAA,CAAM,GAAI,CAAA,MAAA,CAAO,CACf,MAAQ,CAAA,sBAAA,CACR,IAAM,CAAA,YACR,CAAC,CAAA,CAGHA,CAAM,CAAA,GAAA,CAAI,OAAO,CACf,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQ,OACR,IAAM,CAAA,YACR,CAAC,CAAA,EAEDA,EAAM,GAAI,CAAA,MAAA,CAAO,CACf,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQ,0BACR,CAAA,IAAA,CAAM,mBACR,CAAC,CAAA,CAGCvkB,CAAO,CAAA,OAAA,CAAQ,cAAc,CAAG,EAAA,QAAA,GAAa,UAC/CukB,EAAAA,CAAAA,CAAM,IAAI,MAAO,CAAA,CACf,MAAQ,CAAA,IAAA,CACR,MAAQ,CAAA,kBAAA,CACR,IAAM,CAAA,WACR,CAAC,CAGChjB,CAAAA,EAAAA,CAAqBvB,CAAM,CAAA,CAAG,CAChC,IAAMotB,CAAAA,CAAeltB,CAAgBF,CAAAA,CAAM,EAC3CukB,CAAM,CAAA,GAAA,CAAI,MAAO,CAAA,CACf,OAAQ6I,CAAa,CAAA,IAAA,GAAS,gBAC9B,CAAA,MAAA,CAAQ,yBACR,IAAM,CAAA,iBACR,CAAC,EACH,MACE7I,CAAM,CAAA,GAAA,CAAI,MAAO,CAAA,CACf,OAAQ,gBACR,CAAA,IAAA,CAAM,SACR,CAAC,CACDA,CAAAA,CAAAA,CAAM,GAAI,CAAA,MAAA,CAAO,CACf,KAAO,CAAA,WAAA,CACP,MAAQ,CAAA,gBAAA,CACR,KAAM,SACR,CAAC,CAKL,CAAA,GAAI,CAACb,CAAU,CAAA,CACb,IAAM0J,CAAAA,CAAeltB,CAAgBF,CAAAA,CAAM,CACrC0J,CAAAA,CAAAA,CAAYoF,EAAS,aAAc,CAAA,CACvC,WAAa,CAAA,IAAA,CACb,WAAYA,CAAS,CAAA,cAAA,CAAe,CAClC,YAAA,CAAc,eACd,UAAY,CAAA,CACVA,CAAS,CAAA,cAAA,CAAe,CACtB,YAAA,CAAc,cACd,CAAA,UAAA,CAAY,CACV,cAAkBse,GAAAA,CAAAA,EAAgBA,CAAa,CAAA,YAAA,CAC3Cte,EAAS,gBAAiB,CAAA,CACxB,GAAK,CAAA,CACH,CACE,GAAK,CAAA,cAAA,CACL,KAAO,CAAA,IACT,CACF,CACF,CAAC,CACD,CAAA,MACN,CACF,CAAC,CACH,CACF,CAAC,EACD,IAAM,CAAA,QACR,CAAC,CAAA,CACDyV,EAAM,GAAI,CAAA,GAAA,CAAI7a,CAAS,EACzB,CAEA,IAAA,IAAWyjB,CAAWltB,IAAAA,CAAAA,CAAO,SAC3BgtB,EAAe,CAAA,CACb,MAAAhtB,CAAAA,CAAAA,CACA,eAAiButB,CAAa,EAAA,CAC5BjJ,CAAM,CAAA,GAAA,CAAK,OAAO,CAChB,MAAA,CAAQhV,CAAiB,CAAA,CAAE,MAAAvP,CAAAA,CAAAA,CAAQ,YAAcutB,CAAAA,CAAU,CAAC,CAC5D,CAAA,IAAA,CAAMC,CACR,CAAC,EACH,CACA,CAAA,QAAA,CAAWA,CAAa,EAAA,CACtBjJ,EAAM,GAAK,CAAA,MAAA,CAAO,CAEhB,MAAA,CAAQ,CAACiJ,CAAAA,CAAS,QAAS,CAAA,aAAa,EACxC,MAAQ,CAAA,CAAA,EAAA,EAAKjJ,CAAM,CAAA,KAAA,CAAO,sBAAsB,CAAA,CAAA,CAChD,IAAMiJ,CAAAA,CACR,CAAC,EACH,CAAA,CACA,MAASvrB,CAAAA,CAAAA,EAAS,CAChBsiB,CAAM,CAAA,GAAA,CAAK,GAAItiB,CAAAA,CAAI,EACrB,CACA,CAAA,OAAA,CAAAkrB,CACF,CAAC,EAEL,CCx5BO,CAAA,IAAMM,EAAoB,CAAA,CAAC,CAChC,aAAAha,CAAAA,CAAAA,CACA,OAAAd,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CACF,CAIM,GAAA,CACJ,IAAMwS,CAAOD,CAAAA,CAAAA,CAAQ,IAAK,CAAA,CAAE,GAAI+a,EAAM,CAAC,CAEjCC,CAAAA,CAAAA,CADSztB,EAAgByS,CAAQ,CAAA,MAAM,CACjB,CAAA,IAAA,GAAS,sBAE/BY,CAAAA,CAAAA,CAAehE,CAAiB,CAAA,CACpC,OAAQoD,CAAQ,CAAA,MAAA,CAChB,YAAcC,CAAAA,CAAAA,CAAK,sBACrB,CAAC,CACKgb,CAAAA,CAAAA,CAAahb,EAAK,MAAO,CAAA,CAC7B,MAAQ,CAAA,IAAA,CACR,MAAQW,CAAAA,CAAAA,CACR,IAAM,CAAA,YACR,CAAC,CACKsa,CAAAA,CAAAA,CAAajb,CAAK,CAAA,MAAA,CAAO,CAC7B,MAAQ,CAAA,IAAA,CACR,MAAQW,CAAAA,CAAAA,CACR,KAAM,QACR,CAAC,CAEKua,CAAAA,CAAAA,CAAchf,CAAS,CAAA,oBAAA,CAAqB,CAChD,UAAA,CAAY,KACZ,IAAM,CAAA,SAAA,CACN,IAAMA,CAAAA,CAAAA,CAAS,qBAAqB,CAClC,KAAA,CAAO,CACLA,CAAAA,CAAS,kBAAkB,CACzB,aAAA,CAAe6e,CACX,CAAA,CACE7e,CAAS,CAAA,iBAAA,CAAkB,CAAE,QAAA,CAAU,aAAc,CAAC,CAAA,CACtDA,CAAS,CAAA,iBAAA,CAAkB,CAAE,QAAU,CAAA,OAAQ,CAAC,CAAA,CAChDA,EAAS,iBAAkB,CAAA,CAAE,QAAUic,CAAAA,EAAiB,CAAC,CAAA,CACzDjc,CAAS,CAAA,iBAAA,CAAkB,CAAE,QAAUgc,CAAAA,EAAgB,CAAC,CAC1D,EACA,CACEhc,CAAAA,CAAS,iBAAkB,CAAA,CAAE,SAAU,OAAQ,CAAC,CAChDA,CAAAA,CAAAA,CAAS,iBAAkB,CAAA,CAAE,QAAU,CAAA,cAAe,CAAC,CACzD,CAAA,CACJ,QAAU2E,CAAAA,CAAAA,CAAc,IAC1B,CAAC,CAAA,CACD3E,CAAS,CAAA,iBAAA,CAAkB,CACzB,UAAY,CAAA,CACV,CACE,OAAA,CAAS,CACP,2EACA,CAAA,0EAAA,CACA,gBACF,CAAA,CACA,WAAY,CAAC1O,CAAAA,CAAO,MACpB,CAAA,IAAA,CAAM,SACN,IAAM0O,CAAAA,CAAAA,CAAS,iBAAkB,CAAA,CAAE,SAAU+e,CAAW,CAAA,IAAK,CAAC,CAChE,CACA,CAAA,CACE,OAAS,CAAA,CACP,uEACA,wEACF,CAAA,CACA,UAAY,CAAA,KAAA,CACZ,KAAM,MACN,CAAA,IAAA,CAAM/e,CAAS,CAAA,iBAAA,CAAkB,CAC/B,aAAe,CAAA,CACbA,CAAS,CAAA,eAAA,CAAgB,CAAE,OAAA,CAAS,QAAS,CAAC,EAC9CA,CAAS,CAAA,eAAA,CAAgB,CAAE,OAAA,CAAS,SAAU,CAAC,CACjD,CACA,CAAA,QAAA,CAAU,QACZ,CAAC,CACH,CACF,CAAA,CACA,mBAAqB,CAAA,KACvB,CAAC,CACH,CACF,CAAC,CAAA,CACD,cAAgB6e,CAAAA,CAAAA,CACZ,CACE7e,CAAS,CAAA,wBAAA,CAAyB,CAChC,UAAA,CAAYA,EAAS,iBAAkB,CAAA,CAAE,QAAU,CAAA,YAAa,CAAC,CAAA,CACjE,IAAM,CAAA,aACR,CAAC,CACDA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAChC,WAAYA,CAAS,CAAA,iBAAA,CAAkB,CACrC,QAAA,CAAU8e,EAAW,IACvB,CAAC,CACD,CAAA,WAAA,CAAa9e,CAAS,CAAA,iBAAA,CAAkB,CACtC,QAAA,CAAU8e,EAAW,IACvB,CAAC,CACD,CAAA,IAAA,CAAM,OACR,CAAC,CAAA,CACD9e,CAAS,CAAA,wBAAA,CAAyB,CAChC,WAAaA,CAAAA,CAAAA,CAAS,eAAgB,CAAA,CAAE,OAAS,CAAA,SAAU,CAAC,CAAA,CAC5D,KAAMic,EACR,CAAC,CACDjc,CAAAA,CAAAA,CAAS,yBAAyB,CAChC,WAAA,CAAaA,CAAS,CAAA,eAAA,CAAgB,CAAE,OAAS,CAAA,WAAY,CAAC,CAAA,CAC9D,IAAMgc,CAAAA,EACR,CAAC,CACH,EACA,CACEhc,CAAAA,CAAS,wBAAyB,CAAA,CAChC,WAAYA,CAAS,CAAA,iBAAA,CAAkB,CACrC,QAAA,CAAU8e,EAAW,IACvB,CAAC,CACD,CAAA,WAAA,CAAa9e,EAAS,iBAAkB,CAAA,CACtC,QAAU8e,CAAAA,CAAAA,CAAW,IACvB,CAAC,CAAA,CACD,IAAM,CAAA,OACR,CAAC,CACD9e,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAChC,WAAYA,CAAS,CAAA,eAAA,CAAgB,CAAE,OAAA,CAAS,SAAU,CAAC,CAC3D,CAAA,WAAA,CAAaA,EAAS,eAAgB,CAAA,CAAE,OAAS,CAAA,SAAU,CAAC,CAC5D,CAAA,IAAA,CAAM,cACR,CAAC,CACH,CACN,CAAC,CAED8D,CAAAA,CAAAA,CAAK,GAAIkb,CAAAA,CAAW,EACtB,CAAA,CClFO,IAAMC,EAAuB,CAAA,CAAC,CACnC,OAAA,CAAApb,EACA,IAAAC,CAAAA,CAAAA,CACA,SAAAC,CAAAA,CAAAA,CACA,aAAA8Y,CACF,CAAA,GAKM,CACJ,IAAM7Y,CAAiBJ,CAAAA,EAAAA,CAAqB,CAAE,OAAA,CAAAC,EAAS,IAAAC,CAAAA,CAAAA,CAAM,SAAAC,CAAAA,CAAU,CAAC,CAClEK,CAAAA,CAAAA,CAAqBD,EAAyB,CAAA,CAClD,QAAAN,CACA,CAAA,IAAA,CAAAC,CACA,CAAA,SAAA,CAAAC,CACF,CAAC,CAEK+Y,CAAAA,CAAAA,CAAclc,EAAU,OAAQ,CAAA,IAAA,CAGtC,OADexP,CAAAA,CAAgByS,EAAQ,MAAM,CAAA,CAClC,IAAS,GAAA,sBAAA,CACX,GAAGiZ,CAAW,CAAA,CAAA,EAAIf,EAAkB,CAAA,EAAA,EAAK/X,CAAe,CAAA,IAAA,EAAQ,SAAS,CAAA,EAAA,EAAKI,EAAmB,IAAQ,EAAA,SAAS,CAAK4X,EAAAA,EAAAA,EAAe,IAI3Ia,CACK,CAAA,CAAA,EAAGC,CAAW,CAAA,CAAA,EAAI9Y,EAAe,IAAQ,EAAA,SAAS,CAAK6Y,EAAAA,EAAAA,CAAY,CAErE7Y,CAAAA,CAAAA,CAAAA,CAAAA,CAAe,IAClB,CAAA,CAAA,EAAG8Y,CAAW,CAAI9Y,CAAAA,EAAAA,CAAAA,CAAe,IAAI,CAAA,CAAA,CAAA,CACrC8Y,CACN,CAEa8B,CAAAA,EAAAA,CAAQ,KAWRM,CAAAA,EAAAA,CACXC,GAQe,CACf,GAAI,CAACA,CAAAA,CACH,OAGF,IAAMC,CAAeD,CAAAA,CAAAA,CAAY,MAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAG,MAEhD,CAAA,GAAKC,CAIL,CAAA,CAAA,GACEA,EAAa,UAAW,CAAA,kBAAkB,CAC1CA,EAAAA,CAAAA,CAAa,SAAS,OAAO,CAAA,CAE7B,OAAO,MAAA,CAQT,GACE,CAAC,cAAA,CAAgB,QAAU,CAAA,QAAA,CAAU,QAAQ,CAAE,CAAA,IAAA,CAAM/nB,CACnD+nB,EAAAA,CAAAA,CAAa,WAAW/nB,CAAI,CAC9B,CAEA,CAAA,OAAO,MAGT,CAAA,GAAI+nB,CAAa,CAAA,UAAA,CAAW,OAAO,CACjC,CAAA,OAAO,MAEX,CAAA,CAAA,CAGMC,GAAmC,CAAC,CACxC,oBAAAxP,CAAAA,CACF,IAEwB,CACtB,GAAIA,CAAqB,CAAA,IAAA,GAAS,eAChC,CAAA,OAAO,CACL,MAAA,CAAQ,SACR,IAAM,CAAA,MACR,CAGF,CAAA,GAAIA,EAAqB,IAAS,GAAA,QAAA,CAChC,OACEA,CAAAA,CAAqB,MAAM,QAC3BA,EAAAA,CAAAA,CAAqB,KAAM,CAAA,iBAAA,EAC3BA,CAAqB,CAAA,KAAA,CAAM,iBAC3BA,EAAAA,CAAAA,CAAqB,MAAM,QAEpB,CAAA,CACL,MAAQ,CAAA,QAAA,CACR,KAAM,MACR,CAAA,CAGF,MAGF,CAAA,GAAIA,EAAqB,IAAS,GAAA,QAAA,CAChC,OAAIA,CAAAA,CAAqB,KAAO,QACvB,CAAA,CACL,IAAMA,CAAAA,CAAAA,CAAqB,KAC3B,IAAM,CAAA,QACR,CAIAA,CAAAA,CAAAA,CAAqB,KAAO,OAC5BA,EAAAA,CAAAA,CAAqB,EAAM,EAAA,QAAA,CAEpB,CACL,EAAIA,CAAAA,CAAAA,CAAqB,EACzB,CAAA,IAAA,CAAMA,CAAqB,CAAA,IAAA,CAC3B,IAAM,CAAA,QACR,EAGF,MAGF,CAAA,GAAIA,CAAqB,CAAA,IAAA,GAAS,OAAQ,CACxC,IAAMe,CAASf,CAAAA,CAAAA,CAAqB,OAAO,WAAY,EAAA,CACvD,OAAIe,CAAAA,GAAW,QAAYA,EAAAA,CAAAA,GAAW,OAC7B,CAAA,CACL,OAAQA,CACR,CAAA,IAAA,CAAM,MACR,CAAA,CAGF,MACF,CACF,CAAA,CAEM0O,EAAgB,CAAA,CAAC,CACrB,SAAAvb,CAAAA,CAAAA,CACA,MAAAzS,CAAAA,CACF,CAImB,GAAA,CACjB,GAAI,CAACyS,EAAU,QAAY,EAAA,CAACzS,CAAO,CAAA,IAAA,CACjC,OAAO,EAAC,CAGV,IAAMiuB,CAAAA,CAAoB,EAE1B,CAAA,IAAA,IAAW1P,CAAwB9L,IAAAA,CAAAA,CAAU,SAAU,CACrD,IAAMyb,CAAaH,CAAAA,EAAAA,CAAiC,CAClD,oBAAAxP,CAAAA,CACF,CAAC,CAAA,CACG2P,EACFD,CAAK,CAAA,IAAA,CAAKC,CAAU,CAAA,CAEpB,QAAQ,IACN,CAAA,CAAA;AAAA,EAA0I,IAAA,CAAK,UAAU3P,CAAsB,CAAA,IAAA,CAAM,CAAC,CAAC,CAAA,CACzL,EAEJ,CAEA,OAAO0P,CACT,EAEME,EAAsB,CAAA,CAAC,CAC3B,OAAA5b,CAAAA,CAAAA,CACA,kBAAA6b,CACA,CAAA,SAAA,CAAA3b,CACA,CAAA,MAAA,CAAAzS,CACF,CAAA,GAK2B,CACzB,IAAMwS,CAAAA,CAAOD,EAAQ,IAAK,CAAA,CAAE,GAAI+a,EAAM,CAAC,CACjCH,CAAAA,CAAAA,CAAY3a,CAAK,CAAA,oBAAA,GAEjBI,CAAkBD,CAAAA,EAAAA,CAAsB,CAAE,OAAA,CAAAJ,CAAS,CAAA,IAAA,CAAAC,EAAM,SAAAC,CAAAA,CAAU,CAAC,CAAA,CACpEK,CAAqBD,CAAAA,EAAAA,CAAyB,CAClD,OAAAN,CAAAA,CAAAA,CACA,KAAAC,CACA,CAAA,SAAA,CAAAC,CACF,CAAC,CAAA,CAkBK4b,CAAgC,CAAA,EAEtC,CAAA,GAAI5b,EAAU,IACZ,CAAA,OAAQA,EAAU,IAAK,CAAA,IAAA,EACrB,KAAK,WAAA,CACH4b,CAAe,CAAA,IAAA,CAAK,CAAE,MAAA,CAAQ,wBAAyB,CAAC,CAAA,CACxD7b,EAAK,MAAO,CAAA,CACV,OAAQrD,CAAiB,CAAA,CACvB,MAAQoD,CAAAA,CAAAA,CAAQ,MAChB,CAAA,YAAA,CAAc4a,CAChB,CAAC,CAAA,CACD,IAAM,CAAA,wBACR,CAAC,CAAA,CACD,MACF,KAAK,MAAA,CAEH,MACF,KAAK,MAEHkB,CAAAA,CAAAA,CAAe,KAAK,CAClB,GAAA,CAAK,iBACL,KAAO,CAAA,IACT,CAAC,CACD,CAAA,MACF,KAAK,mBAAA,CACHA,CAAe,CAAA,IAAA,CAAK,CAAE,MAAQ,CAAA,+BAAgC,CAAC,CAC/D7b,CAAAA,CAAAA,CAAK,OAAO,CACV,MAAA,CAAQrD,CAAiB,CAAA,CACvB,MAAQoD,CAAAA,CAAAA,CAAQ,OAChB,YAAc4a,CAAAA,CAChB,CAAC,CACD,CAAA,IAAA,CAAM,+BACR,CAAC,CAAA,CACD,KACJ,CAGF,IAAMttB,CAAAA,CAASC,EAAgByS,CAAQ,CAAA,MAAM,CAC7C,CAAA,GAAI1S,CAAO,CAAA,IAAA,GAAS,yBAIlB,IAAWylB,IAAAA,CAAAA,IAAc7S,CAAU,CAAA,SAAA,CAEjC,GAAI4S,EAAAA,CAAkB,CAAE,UAAAC,CAAAA,CAAW,CAAC,CAAM,GAAA,KAAA,CAAO,CAC/C,IAAMvmB,CAAAA,CAAW0T,CAAU,CAAA,SAAA,CAAU6S,CAAU,CAAA,CACzCsH,EAAegB,EAAgB7uB,CAAAA,CAAAA,EAAU,SAAS,CAAA,CAEpD6tB,CAAgBA,EAAAA,CAAAA,GAAiB,QACnCyB,CAAe,CAAA,IAAA,CAAK,CAClB,GAAA,CAAK,cACL,CAAA,KAAA,CAAOzB,CACT,CAAC,EAEL,EAQJ,IAAMqB,CAAAA,CAAOD,GAAc,CAAW,SAAA,CAAAvb,CAAW,CAAA,MAAA,CAAAzS,CAAO,CAAC,CAAA,CACrDiuB,CAAK,CAAA,MAAA,EACPI,CAAe,CAAA,IAAA,CAAK,CAClB,GAAK,CAAA,UAAA,CACL,KAAO3f,CAAAA,CAAAA,CAAS,sBAAuB,CAAA,CAAE,SAAUuf,CAAK,CAAC,CAC3D,CAAC,CAAA,CAGH,QAAWluB,CAAQ0S,IAAAA,CAAAA,CAAU,UAAY,EAAA,KAAA,CAAO,CAC9C,IAAMpN,EAAYoN,CAAU,CAAA,UAAA,CAAW,MAAM1S,CAAI,CAAA,CACjD,IACGsF,CAAU,CAAA,MAAA,CAAO,IAAS,GAAA,OAAA,EACzBA,CAAU,CAAA,MAAA,CAAO,OAAS,OAC3BA,IAAAA,CAAAA,CAAU,QAAU,MAAU,EAAA,CAACA,EAAU,OAC1C,CAAA,CAAA,CAEAgpB,CAAe,CAAA,IAAA,CAAK,CAClB,GAAA,CAAK,kBACL,KAAO,CAAA,CACL,CACE,GAAA,CAAK,OACL,CAAA,KAAA,CAAO,CACL,CACE,GAAA,CAAK,SACL,CAAA,KAAA,CAAO,KACT,CAAA,CACA,CACE,GAAK,CAAA,OAAA,CACL,MAAO,MACT,CACF,CACF,CACF,CACF,CAAC,CAAA,CACD,KACF,CACF,CAEA,GAAIruB,CAAAA,CAAO,WAAgB,GAAA,uBAAA,CAAyB,CAClD,IAAMsuB,EAAwB/b,CAC3B,CAAA,IAAA,CAAK,CAAE,EAAA,CAAIiX,EAAe,CAAC,EAC3B,UAAW,CAAA,CACV,KAAMH,EAA0B,CAAA,CAAE,GAAI5W,CAAU,CAAA,EAAA,CAAI,IAAM,CAAA,UAAW,CAAC,CAAA,CACtE,UAAW,OACb,CAAC,CAEC6b,CAAAA,CAAAA,CAAsB,IACxB9b,GAAAA,CAAAA,CAAK,OAAO,CACV,MAAA,CAAQA,CAAK,CAAA,kBAAA,CAAmB,CAC9B,OAAA,CAAAD,EACA,EAAIiX,CAAAA,EACN,CAAC,CACD,CAAA,IAAA,CAAM8E,EAAsB,IAC9B,CAAC,CAEDD,CAAAA,CAAAA,CAAe,IAAK,CAAA,CAClB,IAAK,qBACL,CAAA,KAAA,CAAOC,EAAsB,IAC/B,CAAC,GAEL,CAEA,GAAItuB,CAAO,CAAA,SAAA,GAAc,KAAO,CAAA,CAC9B,IAAMuuB,CAAmBhc,CAAAA,CAAAA,CAAQ,KAAK,CAAE,EAAA,CAAI2T,EAAM,CAAC,CAAA,CAAG,UAAW,CAAA,CAC/D,IAAMlU,CAAAA,CAAAA,CAAe,CACnB,IAAM,CAAA,WAAA,CACN,EAAIS,CAAAA,CAAAA,CAAU,EACd,CAAA,IAAA,CAAM,UACR,CAAC,CAAA,CACD,SAAW,CAAA,OACb,CAAC,CAAA,CAEG8b,EAAiB,IACnB/b,GAAAA,CAAAA,CAAK,OAAO,CACV,MAAA,CAAQA,EAAK,kBAAmB,CAAA,CAC9B,OAAAD,CAAAA,CAAAA,CACA,EAAI2T,CAAAA,EACN,CAAC,CACD,CAAA,IAAA,CAAMqI,CAAiB,CAAA,IACzB,CAAC,CAAA,CAEDF,EAAe,IAAK,CAAA,CAClB,GAAK,CAAA,mBAAA,CACL,KAAO3f,CAAAA,CAAAA,CAAS,cAAc,CAC5B,KAAA,CAAO,KACP,UAAY,CAAA,CACV,CACE,IAAM,CAAA,MACR,CACF,CAAA,CACA,UAAY,CAAA,CACVA,EAAS,eAAgB,CAAA,CACvB,UAAYA,CAAAA,CAAAA,CAAS,eAAgB,CAAA,CACnC,WAAYA,CAAS,CAAA,cAAA,CAAe,CAClC,YAAA,CAAcA,CAAS,CAAA,wBAAA,CAAyB,CAC9C,UAAYA,CAAAA,CAAAA,CAAS,WAAW,CAC9B,IAAA,CAAM6f,EAAiB,IACzB,CAAC,CACD,CAAA,IAAA,CAAM7f,CAAS,CAAA,UAAA,CAAW,CAAE,IAAM,CAAA,YAAa,CAAC,CAClD,CAAC,EACD,UAAY,CAAA,CAACA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,MAAO,CAAC,CAAC,CACpD,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAEL,EAAA,CAEA2f,CAAe,CAAA,IAAA,CAAK,CAClB,GAAA,CAAK,MACL,KAAO5b,CAAAA,CAAAA,CAAU,IACnB,CAAC,CAGD4b,CAAAA,CAAAA,CAAe,KAAK,CAAE,MAAA,CAAQ,SAAU,CAAC,CAAA,CACrC5b,EAAU,IACZ4b,EAAAA,CAAAA,CAAe,IAAK,CAAA,CAClB,GAAK,CAAA,SAAA,CACL,MAAO,CACL,CACE,GAAK,CAAA,cAAA,CAEL,KACE5b,CAAAA,CAAAA,CAAU,KAAK,IAAS,GAAA,WAAA,CACpB,IACAA,CAAAA,CAAAA,CAAU,IAAK,CAAA,SACvB,EACA,CACE,MAAA,CAAQ,kBACV,CACF,CACF,CAAC,CAGH,CAAA,IAAM8a,CAAe1tB,CAAAA,CAAAA,CAAO,IAAS,GAAA,sBAAA,CAC/B+sB,EAAe9Z,CAAmB,CAAA,IAAA,EAAQ,SAC1C6Z,CAAAA,CAAAA,CAAY/Z,CAAgB,CAAA,IAAA,EAAQ,UAEpC4b,CAAexuB,CAAAA,CAAAA,CAAO,MACxBwS,CAAAA,CAAAA,CAAK,MAAO,CAAA,CACV,MAAO,eACP,CAAA,MAAA,CAAQA,EAAK,kBAAmB,CAAA,CAC9B,QAAAD,CACA,CAAA,EAAA,CAAI7S,EACN,CAAC,CACD,CAAA,IAAA,CAAM,QACR,CAAC,CAAA,CACD,OAEE+uB,CAAgB/f,CAAAA,CAAAA,CAAS,yBAAyB,CACtD,UAAA,CAAYA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,SAAU,CAAC,CAAA,CACnD,WAAY,CAAC0f,CAAAA,CACb,KAAM,QACR,CAAC,CAED,CAAA,OAAO,CACL1f,CAAAA,CAAS,mBAAmB,CAC1B,IAAA,CAAM,CACJA,CAAAA,CAAS,gBAAiB,CAAA,CACxB,YAAa,CAAC,qBAAqB,CACnC,CAAA,GAAA,CAAK2f,CACP,CAAC,CACH,CACA,CAAA,IAAA,CAAM3f,EAAS,wBAAyB,CAAA,CACtC,WAAY8f,CAAc,EAAA,IAAA,CACtB9f,CAAS,CAAA,gBAAA,CAAiB,CACxB,IAAA,CAAM+f,EACN,QAAU,CAAA,IAAA,CACV,KAAO/f,CAAAA,CAAAA,CAAS,UAAW,CAAA,CAAE,KAAM8f,CAAa,CAAA,IAAK,CAAC,CACxD,CAAC,CAAA,CACDC,EACJ,IAAM/f,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM+D,EAAU,MAAO,CAAC,CACtD,CAAC,CACD,CAAA,KAAA,CAAO8a,EACH,CACE9C,EAAAA,CACA,CAAGmC,EAAAA,CAAY,CAAMlC,GAAAA,EAAAA,EAAe,GACpCiC,CACAjC,CAAAA,EACF,CACA,CAAA,CAACkC,CAAcD,CAAAA,CAAAA,CAAW,cAAc,CAC9C,CAAC,CACH,CACF,CAAA,CAEM+B,GAAmB,CAAC,CACxB,OAAAnc,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CACF,IAGM,CACJ,IAAMH,EAASC,CAAgByS,CAAAA,CAAAA,CAAQ,MAAM,CACvCgb,CAAAA,CAAAA,CAAe1tB,CAAO,CAAA,IAAA,GAAS,sBAC/B2S,CAAAA,CAAAA,CAAOD,EAAQ,IAAK,CAAA,CAAE,GAAI+a,EAAM,CAAC,EACjCqB,CAAO,CAAA,IAAI,GAEjBpc,CAAAA,CAAAA,CAAQ,SAAU,CAAA,WAAA,CAAa,CAAC,CAAE,SAAA,CAAAE,CAAU,CAAA,GAAM,CAChD,IAAM2b,EACJ,CAACpuB,CAAAA,CAAO,MAAUutB,EAAAA,CAAAA,EAAgBvI,EAAyBvS,CAAAA,CAAS,EAChEK,CAAqBD,CAAAA,EAAAA,CAAyB,CAClD,OAAAN,CAAAA,CAAAA,CACA,KAAAC,CACA,CAAA,SAAA,CAAAC,CACF,CAAC,CACK5Q,CAAAA,CAAAA,CAAO6M,EAAS,iBAAkB,CAAA,CACtC,WAAa,CAAA,QAAA,CACb,OAAS,CAAA,CACP+D,EAAU,UAAc,EAAA,aAAA,CACxBA,CAAU,CAAA,OAAA,EAAW9R,CAAc8R,CAAAA,CAAAA,CAAU,OAAO,CACpDA,CAAAA,CAAAA,CAAU,aAAe9R,CAAc8R,CAAAA,CAAAA,CAAU,WAAW,CAC9D,CAAA,CACA,QAAU,CAAA,IAAA,CACV,IAAM+Z,CAAAA,CAAAA,CAA0B,CAC9B,MAAQja,CAAAA,CAAAA,CAAQ,MAChB,CAAA,aAAA,CAAe,KACf,CAAA,EAAA,CAAIE,EAAU,EACd,CAAA,SAAA,CAAAA,CACF,CAAC,CACD,CAAA,UAAA,CAAY,CACV,CACE,UAAA,CAAY2b,EACZ,IAAM,CAAA,SAAA,CACN,KAAMT,EAAqB,CAAA,CACzB,OAAApb,CAAAA,CAAAA,CACA,IAAAC,CAAAA,CAAAA,CACA,UAAAC,CACA,CAAA,YAAA,CAAc8a,EAAe,MAAY,CAAA,cAC3C,CAAC,CACH,CACF,CACA,CAAA,UAAA,CAAY,MACZ,CAAA,UAAA,CAAYY,GAAoB,CAC9B,OAAA,CAAA5b,EACA,iBAAA6b,CAAAA,CAAAA,CACA,UAAA3b,CACA,CAAA,MAAA,CAAAzS,CACF,CAAC,CACD,CAAA,KAAA,CAAOutB,EACH,CACE,CAEE,OAAS7e,CAAAA,CAAAA,CAAS,QAAS,CAAA,YAAY,EACvC,IAAM+b,CAAAA,EACR,CACA,CAAA,CACE,OAAS3X,CAAAA,CAAAA,CAAmB,KACxBpE,CAAS,CAAA,iBAAA,CAAkB,CACzB,QAAUoE,CAAAA,CAAAA,CAAmB,IAC/B,CAAC,CAAA,CACDpE,CAAS,CAAA,QAAA,CAAS,WAAW,CAAA,CACjC,QAASoE,CAAmB,CAAA,IAAA,CACxBpE,CAAS,CAAA,iBAAA,CAAkB,CACzB,QAAA,CAAUoE,EAAmB,IAC/B,CAAC,CACD,CAAA,MAAA,CACJ,IAAM4X,CAAAA,EACR,CACF,CACA,CAAA,CACE,CACE,OACG,CAAA,CAAA,cAAA,GAAkB7qB,EAASA,CAAO,CAAA,YAAA,CAAe,KAClD,GAAA,KAAA,CACF,OAAS,CAAA,SAAA,CACT,KAAM,cACR,CACF,CACN,CAAC,CAEK+uB,CAAAA,CAAAA,CAAa,MAAM,IAAK,CAAA,IAAI,GAAInc,CAAAA,CAAAA,CAAU,IAAI,CAAC,EAChDmc,CAAW,CAAA,MAAA,EACdA,EAAW,IAAK,CAAA,SAAS,EAG3B,IAAWC,IAAAA,CAAAA,IAAOD,CAAY,CAAA,CAC5B,IAAM7uB,CAAAA,CAAOkmB,GAAe4I,CAAG,CAAA,CACzB5gB,EAAQ0gB,CAAK,CAAA,GAAA,CAAI5uB,CAAI,CAAK,EAAA,EAChCkO,CAAAA,CAAAA,CAAM,IAAKpM,CAAAA,CAAI,EACf8sB,CAAK,CAAA,GAAA,CAAI5uB,EAAMkO,CAAK,EACtB,CACF,CAAC,CAAA,CAEDsE,CAAQ,CAAA,SAAA,CAAU,OAAS,CAAA,IAAM,CAC/B,IAAW,GAAA,CAACxS,CAAMkO,CAAAA,CAAK,CAAK0gB,GAAAA,CAAAA,CAAM,CAChC,IAAM9sB,CAAAA,CAAO6M,CAAS,CAAA,gBAAA,CAAiB,CACrC,SAAA,CAAW,OACX,OAAST,CAAAA,CAAAA,CACT,KAAMuT,EAAqB,CAAA,CACzB,OAAQjP,CAAQ,CAAA,MAAA,CAChB,IAAAxS,CAAAA,CACF,CAAC,CACH,CAAC,CACDyS,CAAAA,CAAAA,CAAK,GAAI3Q,CAAAA,CAAI,EACf,CACF,CAAC,EACH,CAAA,CAEMitB,EAAkB,CAAA,CAAC,CACvB,OAAA,CAAAvc,EACA,MAAAvS,CAAAA,CACF,IAGM,CACJ,IAAMH,EAASC,CAAgByS,CAAAA,CAAAA,CAAQ,MAAM,CAAA,CACvCgb,CAAe1tB,CAAAA,CAAAA,CAAO,OAAS,sBAC/B2S,CAAAA,CAAAA,CAAOD,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAI+a,EAAM,CAAC,CAAA,CAEvC/a,CAAQ,CAAA,SAAA,CAAU,WAAa,CAAA,CAAC,CAAE,SAAAE,CAAAA,CAAU,IAAM,CAChD,IAAM2b,EACJ,CAACpuB,CAAAA,CAAO,MAAUutB,EAAAA,CAAAA,EAAgBvI,EAAyBvS,CAAAA,CAAS,EAChEK,CAAqBD,CAAAA,EAAAA,CAAyB,CAClD,OAAAN,CAAAA,CAAAA,CACA,KAAAC,CACA,CAAA,SAAA,CAAAC,CACF,CAAC,CACK5Q,CAAAA,CAAAA,CAAO6M,EAAS,aAAc,CAAA,CAClC,QAAS,CACP+D,CAAAA,CAAU,YAAc,aACxBA,CAAAA,CAAAA,CAAU,OAAW9R,EAAAA,CAAAA,CAAc8R,CAAU,CAAA,OAAO,EACpDA,CAAU,CAAA,WAAA,EAAe9R,CAAc8R,CAAAA,CAAAA,CAAU,WAAW,CAC9D,EACA,WAAa,CAAA,IAAA,CACb,UAAY/D,CAAAA,CAAAA,CAAS,aAAc,CAAA,CACjC,WAAY,CACV,CACE,WAAY0f,CACZ,CAAA,IAAA,CAAM,UACN,IAAMT,CAAAA,EAAAA,CAAqB,CACzB,OAAA,CAAApb,CACA,CAAA,IAAA,CAAAC,EACA,SAAAC,CAAAA,CAAAA,CACA,YAAc8a,CAAAA,CAAAA,CAAe,MAAY,CAAA,cAC3C,CAAC,CACH,CACF,CACA,CAAA,UAAA,CAAY,MACZ,CAAA,UAAA,CAAYY,GAAoB,CAC9B,OAAA,CAAA5b,EACA,iBAAA6b,CAAAA,CAAAA,CACA,UAAA3b,CACA,CAAA,MAAA,CAAAzS,CACF,CAAC,CACD,CAAA,KAAA,CAAOutB,EACH,CACE,CAEE,OAAS7e,CAAAA,CAAAA,CAAS,QAAS,CAAA,YAAY,EACvC,IAAM+b,CAAAA,EACR,CACA,CAAA,CACE,OAAS3X,CAAAA,CAAAA,CAAmB,KACxBpE,CAAS,CAAA,iBAAA,CAAkB,CACzB,QAAUoE,CAAAA,CAAAA,CAAmB,IAC/B,CAAC,CAAA,CACDpE,CAAS,CAAA,QAAA,CAAS,WAAW,CAAA,CACjC,QAASoE,CAAmB,CAAA,IAAA,CACxBpE,EAAS,iBAAkB,CAAA,CACzB,SAAUoE,CAAmB,CAAA,IAC/B,CAAC,CAAA,CACD,MACJ,CAAA,IAAA,CAAM4X,EACR,CACF,CAAA,CACA,CACE,CACE,OAAA,CAAA,CACG,iBAAkB7qB,CAASA,CAAAA,CAAAA,CAAO,YAAe,CAAA,KAAA,GAClD,KACF,CAAA,OAAA,CAAS,UACT,IAAM,CAAA,cACR,CACF,CACN,CAAC,CAAA,CACD,KAAM2sB,CAA0B,CAAA,CAC9B,MAAQja,CAAAA,CAAAA,CAAQ,MAChB,CAAA,aAAA,CAAe,KACf,EAAIE,CAAAA,CAAAA,CAAU,GACd,SAAAA,CAAAA,CACF,CAAC,CACH,CAAC,CACDD,CAAAA,CAAAA,CAAK,GAAI3Q,CAAAA,CAAI,EACf,CAAC,EACH,CAEaqT,CAAAA,EAAAA,CAAkC,CAAC,CAAE,QAAA3C,CAAS,CAAA,MAAA,CAAAvS,CAAO,CAAA,GAAM,CACtE,IAAMwS,EAAOD,CAAQ,CAAA,UAAA,CAAW,CAC9B,eAAiBvS,CAAAA,CAAAA,CAAO,gBACxB,EAAIstB,CAAAA,EAAAA,CACJ,IAAMttB,CAAAA,CAAAA,CAAO,MACf,CAAC,EAGKmT,CAAehE,CAAAA,CAAAA,CAAiB,CACpC,MAAA,CAAQoD,CAAQ,CAAA,MAAA,CAChB,aAAcC,CAAK,CAAA,oBAAA,EACrB,CAAC,CACKa,CAAAA,CAAAA,CAAgBb,EAAK,MAAO,CAAA,CAChC,GAAGlD,CAAU,CAAA,OAAA,CACb,MAAO,eACP,CAAA,MAAA,CAAQ6D,CACV,CAAC,CAEcrT,CAAAA,CAAAA,CAAgByS,EAAQ,MAAM,CAAA,CACjB,OAAS,sBAEnCC,EAAAA,CAAAA,CAAK,OAAO,CACV,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQW,CACR,CAAA,IAAA,CAAM,YACR,CAAC,CAAA,CAGHka,GAAkB,CAChB,aAAA,CAAAha,EACA,OAAAd,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CACF,CAAC,CAAA,CAEGA,EAAO,OACT0uB,CAAAA,EAAAA,CAAiB,CAAE,OAAA,CAAAnc,CAAS,CAAA,MAAA,CAAAvS,CAAO,CAAC,CAAA,CAEpC8uB,EAAgB,CAAA,CAAE,OAAAvc,CAAAA,CAAAA,CAAS,OAAAvS,CAAO,CAAC,EAEvC,CCnvBO,CAAA,IAAMkU,GAAuC,CAClD,aAAA,CAAe,CAAC,qBAAqB,CACrC,CAAA,QAAA,CAAUgB,GACV,cAAgBgP,CAAAA,EAAAA,CAChB,MAAQ,CAAA,CAACtkB,CAAQ2S,CAAAA,CAAAA,GAAY,CACvB3S,CAAO,CAAA,MAAA,GACL,OAAOA,CAAAA,CAAO,MAAW,EAAA,SAAA,GAC3BA,EAAO,MAAS2S,CAAAA,CAAAA,CAAQ,YACtB,QACA,CAAA,2FACF,GAGFA,CAAQ,CAAA,gBAAA,CAAiB3S,CAAO,CAAA,MAAM,CAGpCA,CAAAA,CAAAA,CAAAA,CAAO,cACL,OAAOA,CAAAA,CAAO,WAAgB,EAAA,SAAA,GAChCA,CAAO,CAAA,WAAA,CAAc2S,EAAQ,WAC3B,CAAA,aACF,CAGFA,CAAAA,CAAAA,CAAAA,CAAQ,gBAAiB3S,CAAAA,CAAAA,CAAO,WAAW,CAGzCA,CAAAA,CAAAA,CAAAA,CAAO,YACL,OAAOA,CAAAA,CAAO,WAAc,SAC9BA,GAAAA,CAAAA,CAAO,SAAY2S,CAAAA,CAAAA,CAAQ,WACzB,CAAA,WACF,GAGFA,CAAQ,CAAA,gBAAA,CAAiB3S,EAAO,SAAS,CAAA,EAE7C,EACA,OAAS,CAAA,KAAA,CACT,IAAM,CAAA,IAAA,CACN,MAAQ,CAAA,IAAA,CACR,gBAAiB,IACjB,CAAA,IAAA,CAAM,eACN,WAAa,CAAA,IAAA,CACb,OAAQ,KACR,CAAA,QAAA,CAAU,MACV,CAAA,kBAAA,CAAoB,iBACtB,CAAA,CCfA,IAAMmvB,EAAW,CAAA,YAAA,CAEJC,CAAoB,CAAA,CAC/B,KAAO,CAAA,GACP,IAAM,CAAA,EAAA,CACN,WAAa,CAAA,IAAA,CACb,IAAM,CAAA,GACN,KAAO,CAAA,GACP,MAAQ,CAAA,WAAA,CACR,QAAS,EAAC,CACV,EAAI,CAAA,EAAA,CACJ,YAAc,CAAA,KAAA,CACd,WAAY,KACZ,CAAA,UAAA,CAAY,KACZ,CAAA,UAAA,CAAY,KACZ,CAAA,IAAA,CAAM,KACN,IAAM,CAAA,EAAA,CACN,UAAY,CAAA,EACZ,CAAA,QAAA,CAAU,KACV,IAAM,CAAA,EACR,EAEMC,EAAe,CAAA,CAAC,CACpB,QAAAzrB,CAAAA,CAAAA,CACA,cAAA0rB,CAAAA,CAAAA,CACA,IAAAnM,CAAAA,CAAAA,CACA,IAAAzb,CACA,CAAA,MAAA,CAAAwlB,CACA,CAAA,GAAGhC,CACL,CAAA,GAGiC,CAE/B,GAAI,CAAC/H,CACH,CAAA,OAGF,GAAM,CAAE,QAAAgI,CAAS,CAAA,IAAA,CAAAhrB,CAAK,CAAI0jB,CAAAA,EAAAA,CAAkB,CAC1C,MAAQ,CAAA,IAAA,CACR,IAAAV,CAAAA,CAAAA,CACA,GAAG+H,CACL,CAAC,CACD,CAAA,GAAIC,EAAS,CACX,IAAMlpB,EAAO6M,CAAS,CAAA,eAAA,CAAgB,CACpC,QAAA,CAAAlL,CACA,CAAA,cAAA,CAAA0rB,EACA,IAAAnvB,CAAAA,CAAAA,CACA,IAAAuH,CACF,CAAC,EACDwlB,CAAOjrB,CAAAA,CAAI,EACb,CACF,CAEastB,CAAAA,EAAAA,CAAe,CAAC,CAC3B,OAAA,CAAAzrB,CACA,CAAA,IAAA,CAAAqf,CACA,CAAA,SAAA,CAAAqM,EACA,MAAAtC,CAAAA,CAAAA,CACA,IAAA/mB,CAAAA,CAAAA,CACA,GAAG+kB,CACL,IAKiC,CAE/B,GAAI,CAAC/H,CACH,CAAA,OAAO,CACL,OAAS,CAAA,KAAA,CACT,IAAM,CAAA,EACR,CAGF,CAAA,IAAMhhB,EAAS0hB,EAAkB,CAAA,CAC/B,MAAQ,CAAA,IAAA,CACR,IAAAV,CAAAA,CAAAA,CACA,GAAG+H,CACL,CAAC,CACK,CAAA,CAAE,OAAAC,CAAAA,CAAAA,CAAS,KAAAhrB,CAAK,CAAA,CAAIgC,EAC1B,GAAIgpB,CAAAA,CAAS,CACX,IAAMlpB,CAAAA,CAAO6M,CAAS,CAAA,oBAAA,CAAqB,CACzC,OAAA,CAAAhL,EACA,UAAY,CAAA,IAAA,CACZ,IAAA3D,CAAAA,CAAAA,CACA,IAAAgG,CAAAA,CACF,CAAC,CACD+mB,CAAAA,CAAAA,CAAOjrB,CAAI,CAAA,CAEXutB,CAAYrvB,GAAAA,CAAI,EAClB,CACA,OAAOgC,CACT,CAEMstB,CAAAA,EAAAA,CAAsBC,GAAsB,CAChD,IAAM1vB,CAASoB,CAAAA,CAAAA,EAETuuB,CAAAA,CAAAA,CAAmB,EAEzBC,CAAAA,EAAAA,CAAYF,CAAK,CAEjBA,CAAAA,CAAAA,CAAM,MAAM,KAAM,CAAA,OAAA,CAAShN,CAEvB1iB,EAAAA,CAAAA,CAAO,OAAQ,CAAA,qBAAqB,GAAG,KAAU,GAAA,sBAAA,CAE1C6vB,GAAY,CACjB,GAAGH,EACH,KAAOhN,CAAAA,CACT,CAAC,CAAA,CAGIoN,EAAkB,CAAA,CACvB,GAAGJ,CACH,CAAA,KAAA,CAAOhN,CACP,CAAA,MAAA,CAASzgB,CAAS,EAAA,CAChB0tB,EAAiB,IAAK1tB,CAAAA,CAAuB,EAC/C,CACF,CAAC,CACF,EAEG0tB,CAAiB,CAAA,MAAA,EACnBD,EAAM,MACJ5gB,CAAAA,CAAAA,CAAS,qBAAqB,CAC5B,IAAA,CAAM4gB,CAAM,CAAA,KAAA,CAAM,IAClB,CAAA,UAAA,CAAYC,CACd,CAAC,CACH,EAEJ,CAAA,CAEME,EAAc,CAAA,CAAC,CAAE,MAAA5vB,CAAAA,CAAAA,CAAQ,KAAA+iB,CAAAA,CAAAA,CAAO,MAAAkK,CAAAA,CAAO,IAAkB,CAC7D,IAAMltB,EAASoB,CAAU,EAAA,CAEnBuG,EAA+C,EAAC,CAChD/D,CAA8C,CAAA,EACpDof,CAAAA,CAAAA,CAAM,KAAK,OAASN,CAAAA,CAAAA,EAAe,CACjC,GAAM,CAAE,GAAA,CAAArkB,EAAK,KAAAC,CAAAA,CAAM,CAAIskB,CAAAA,EAAAA,CAAUF,CAAU,CAAA,CAC3C/a,EAAWtJ,CAAG,CAAA,CAAIC,EAClB,IAAMwF,CAAAA,CAAU4e,EAAW,iBAAqBA,EAAAA,CAAAA,CAAW,WACvD5e,CAAAA,CAAAA,GACFF,CAASvF,CAAAA,CAAG,EAAI,CAAC0C,CAAAA,CAAc+C,CAAO,CAAC,CAAA,EAE3C,CAAC,CAED,CAAA,IAAMA,CAAU,CAAA,CACdkf,CAAM,CAAA,WAAA,EAAejiB,EAAciiB,CAAM,CAAA,WAAW,EACpDA,CAAM,CAAA,UAAA,EAAc,aACtB,CAEA,CAAA,GACEhjB,CAAO,CAAA,OAAA,CAAQ,qBAAqB,CAAA,EAAG,QAAU,YACjDA,EAAAA,CAAAA,CAAO,OAAQ,CAAA,qBAAqB,CAAG,EAAA,KAAA,GAAU,uBACjD,CACAqvB,EAAAA,CAAa,CACX,MAAA,CAAApvB,CACA,CAAA,QAAA,CAAA2D,EACA,cAAgBE,CAAAA,CAAAA,CAChB,KAAMkf,CAAM,CAAA,IAAA,CACZ,IAAKrb,CACL,CAAA,MAAA,CAAAulB,CACF,CAAC,CACD,CAAA,MACF,CAEAqC,EAAa,CAAA,CACX,MAAAtvB,CAAAA,CAAAA,CACA,OAAA6D,CAAAA,CAAAA,CACA,KAAMkf,CAAM,CAAA,IAAA,CACZ,SAAY7iB,CAAAA,CAAAA,EAAS,CAEnB,GAAIH,EAAO,OAAQ,CAAA,qBAAqB,GAAG,KAAU,GAAA,YAAA,CAAc,CACjE,IAAMsE,CAAAA,CAAawK,CAAS,CAAA,gBAAA,CAAiB,CAC3C,SAAA,CAAW,KACX,GAAK,CAAA,MAAA,CAAO,OAAQnH,CAAAA,CAAU,CAAE,CAAA,GAAA,CAAI,CAAC,CAACtJ,CAAAA,CAAKC,CAAK,CAAA,IAAO,CACrD,QAAA,CAAUsF,EAASvF,CAAG,CAAA,CACtB,IAAAA,CACA,CAAA,KAAA,CAAAC,CACF,CAAE,CAAA,CAAA,CACF,QAAU,CAAA,IACZ,CAAC,CAAA,CACK2D,EAAO6M,CAAS,CAAA,aAAA,CAAc,CAClC,SAAW,CAAA,OAAA,CACX,QAAAhL,CACA,CAAA,WAAA,CAAa,IACb,CAAA,UAAA,CAAAQ,CACA,CAAA,IAAA,CAAAnE,CACF,CAAC,CAAA,CACD+sB,EAAOjrB,CAAI,EACb,CACF,CACA,CAAA,MAAA,CAAAirB,CACA,CAAA,IAAA,CAAM1K,EAAcQ,CAAAA,CAAAA,CAAM,IAAI,CAChC,CAAC,EACH,CAAA,CAEM8M,EAAoB,CAAA,CAAC,CAAE,KAAA9M,CAAAA,CAAAA,CAAO,MAAAkK,CAAAA,CAAO,CAAkB,GAAA,CAC3D,IAAMvlB,CAA+C,CAAA,GAC/C/D,CAA8C,CAAA,GACpDof,CAAM,CAAA,IAAA,CAAK,OAASN,CAAAA,CAAAA,EAAe,CACjC,GAAM,CAAE,GAAArkB,CAAAA,CAAAA,CAAK,MAAAC,CAAM,CAAA,CAAIskB,GAAUF,CAAU,CAAA,CAC3C/a,CAAWtJ,CAAAA,CAAG,CAAIC,CAAAA,CAAAA,CAClB,IAAMwF,CAAU4e,CAAAA,CAAAA,CAAW,mBAAqBA,CAAW,CAAA,WAAA,CACvD5e,IACFF,CAASvF,CAAAA,CAAG,CAAI,CAAA,CAAC0C,CAAc+C,CAAAA,CAAO,CAAC,CAE3C,EAAA,CAAC,CACDopB,CAAAA,CAAAA,CACEpe,CAAS,CAAA,eAAA,CAAgB,CACvB,QAAAlL,CAAAA,CAAAA,CACA,cAAgB,CAAA,CACdof,CAAM,CAAA,WAAA,EAAejiB,EAAciiB,CAAM,CAAA,WAAW,EACpDA,CAAM,CAAA,UAAA,EAAc,aACtB,CACA,CAAA,IAAA,CAAMA,CAAM,CAAA,IAAA,EAAM,IAAQA,EAAAA,CAAAA,CAAM,KAChC,GAAKrb,CAAAA,CACP,CAAC,CACH,EACF,EAEMioB,EAAc,CAAA,CAAC,CAAE,MAAA,CAAA3vB,CAAQ,CAAA,KAAA,CAAA+iB,EAAO,MAAAkK,CAAAA,CAAO,IAAkB,CAC7DqC,EAAAA,CAAa,CACX,MAAAtvB,CAAAA,CAAAA,CACA,OAAS,CAAA,CACP+iB,CAAM,CAAA,WAAA,EAAejiB,EAAciiB,CAAM,CAAA,WAAW,CACpDA,CAAAA,CAAAA,CAAM,UAAc,EAAA,aACtB,EACA,IAAMA,CAAAA,CAAAA,CAAM,IACZ,CAAA,MAAA,CAAAkK,CACA,CAAA,IAAA,CAAM7J,GAAOL,CAAK,CACpB,CAAC,EACH,CAAA,CAEM+M,GAAgBL,CAAsB,EAAA,CAC1C,OAAQA,CAAAA,CAAM,KAAM,CAAA,MAAA,EAClB,KAAK,QAAA,CACL,KAAK,QAAA,CACL,KAAK,QAAA,CACL,KAAK,WACH,CAAA,OAAOD,EAAmBC,CAAAA,CAAK,CACjC,CAAA,KAAK,OACH,OAAOG,EAAAA,CAAYH,CAAK,CAC1B,CAAA,QACE,OAAOE,EAAYF,CAAAA,CAAK,CAC5B,CACF,CAcMM,CAAAA,EAAAA,CAAsB,CAAC,CAC3B,MAAA,CAAA/vB,CACA,CAAA,MAAA,CAAAitB,CACF,CAAA,GAA6C,CAC3C,IAAM+C,CAAAA,CAAqB,EAAC,CAEtBjwB,CAASoB,CAAAA,CAAAA,GAEf,GACE,CAACpB,EAAO,OAAQ,CAAA,cAAc,GAC9B,CAACA,CAAAA,CAAO,OAAQ,CAAA,qBAAqB,CAAG,EAAA,IAAA,CAExC,OAGF,IAAM0jB,CAAAA,CAAWpiB,EAAetB,CAAM,CAAA,CAEtC,QAAWmtB,CAAWltB,IAAAA,CAAAA,CAAO,QAC3B,CAAA,IAAA,IAAW4S,CAAasa,IAAAA,CAAAA,CAAQ,WAAY,CAC1C,GAAI,CAACta,CAAU,CAAA,UAAA,CAAW,QAAU,CAACA,CAAAA,CAAU,SAAU,CAAA,MAAA,CACvD,SAGGod,CAAAA,CAASpd,EAAU,IAAI,CAAA,GAC1Bod,CAASpd,CAAAA,CAAAA,CAAU,IAAI,CAAA,CAAI,EAE7B,CAAA,CAAA,IAAMqd,CAAUD,CAAAA,CAAAA,CAASpd,CAAU,CAAA,IAAI,EAElCqd,CAAQrd,CAAAA,CAAAA,CAAU,MAAM,CAC3Bqd,GAAAA,CAAAA,CAAQrd,EAAU,MAAM,CAAA,CAAI,EAAC,CAAA,CAE/B,IAAMsd,CAAAA,CAAYD,EAAQrd,CAAU,CAAA,MAAM,CAG1C,CAAA,GAFAsd,CAAU,CAAA,IAAA,CAAOtd,EAAU,IAEvBA,CAAAA,CAAAA,CAAU,SAAU,CAAA,MAAA,CAAS,CAAG,CAAA,CAKlC,GAJKsd,CAAU,CAAA,GAAA,GACbA,EAAU,GAAM,CAAA,IAGd,KAAM,CAAA,OAAA,CAAQA,CAAU,CAAA,GAAG,CAC7B,CAAA,SAGFtd,EAAU,SAAU,CAAA,OAAA,CAAS1T,CAAa,EAAA,CACxCgxB,CAAU,CAAA,GAAA,CAAKhxB,EAAS,IAAI,CAAA,CAAIA,EAClC,CAAC,EACH,CAEA,GAAI0T,CAAU,CAAA,UAAA,CAAW,OAAS,CAAG,CAAA,CACnC,IAAIud,CAAqC,CAAA,CACvC,SAAW,CAAA,IAAA,CACX,GAAGhB,CAAAA,CACH,GAAI,MACJ,CAAA,IAAA,CAAM,OACN,IAAM,CAAA,MACR,EACIiB,CAAgBxd,CAAAA,CAAAA,CAAU,UAAW,CAAA,MAAA,CACtCpN,CAAcA,EAAAA,CAAAA,CAAU,KAAO,MAClC,CAAA,CACK4qB,EAAc,MACjBA,GAAAA,CAAAA,CAAgBxd,EAAU,UAAW,CAAA,MAAA,CAClCpN,CAAcA,EAAAA,CAAAA,CAAU,EAAO,GAAA,UAClC,GAGE4qB,CAAc,CAAA,MAAA,GAAW,CAC3BD,CAAAA,CAAAA,CAAiB,CACf,GAAGhB,EACH,GAAGiB,CAAAA,CAAc,CAAC,CAAA,CAClB,EAAI,CAAA,MAAA,CACJ,WAAYA,CAAc,CAAA,CAAC,EAAG,UAC9B,CAAA,IAAA,CAAM,OACN,IAAM,CAAA,MACR,CAESA,CAAAA,CAAAA,CAAc,MAAS,CAAA,CAAA,GAChCD,EAAiB,CACf,GAAGhB,CACH,CAAA,EAAA,CAAI,MACJ,CAAA,UAAA,CAAYiB,EAAc,IAAM5qB,CAAAA,CAAAA,EAAcA,CAAU,CAAA,UAAU,CAClE,CAAA,SAAA,CAAW,sBACX,IAAM,CAAA,MAAA,CACN,KAAM,MACN,CAAA,UAAA,CAAY4qB,CACd,CAGF,CAAA,CAAA,IAAMC,CAAuC,CAAA,CAC3C,GAAGlB,CAAAA,CACH,GAAI,QACJ,CAAA,UAAA,CAAYpL,EACVnR,CAAAA,CAAAA,CAAU,UAAW,CAAA,MAAA,CAClBpN,GAAcA,CAAU,CAAA,EAAA,GAAO,QAClC,CACF,CACA,CAAA,SAAA,CAAW,KACX,IAAMie,CAAAA,CAAAA,CAAW,SAAW,SAC5B,CAAA,IAAA,CAAMA,EAAW,QAAW,CAAA,SAAA,CAC5B,UAAY7Q,CAAAA,CAAAA,CAAU,UACnB,CAAA,MAAA,CAAQpN,GAAcA,CAAU,CAAA,EAAA,GAAO,QAAQ,CAC/C,CAAA,IAAA,CAAK4c,EAAY,CACtB,CAAA,CACMkO,CAAqC,CAAA,CACzC,GAAGnB,CAAAA,CACH,GAAI,MACJ,CAAA,UAAA,CAAYpL,GACVnR,CAAU,CAAA,UAAA,CAAW,OAAQpN,CAAcA,EAAAA,CAAAA,CAAU,EAAO,GAAA,MAAM,CACpE,CAAA,CACA,UAAW,IACX,CAAA,IAAA,CAAM,MACN,CAAA,IAAA,CAAM,MACN,CAAA,UAAA,CAAYoN,EAAU,UACnB,CAAA,MAAA,CAAQpN,CAAcA,EAAAA,CAAAA,CAAU,EAAO,GAAA,MAAM,EAC7C,IAAK4c,CAAAA,EAAY,CACtB,CACMmO,CAAAA,CAAAA,CAAsC,CAC1C,GAAGpB,CAAAA,CACH,EAAI,CAAA,OAAA,CACJ,UAAYpL,CAAAA,EAAAA,CACVnR,EAAU,UAAW,CAAA,MAAA,CAClBpN,CAAcA,EAAAA,CAAAA,CAAU,EAAO,GAAA,OAClC,CACF,CACA,CAAA,SAAA,CAAW,IACX,CAAA,IAAA,CAAM,OACN,CAAA,IAAA,CAAM,QACN,UAAYoN,CAAAA,CAAAA,CAAU,WACnB,MAAQpN,CAAAA,CAAAA,EAAcA,EAAU,EAAO,GAAA,OAAO,CAC9C,CAAA,IAAA,CAAK4c,EAAY,CACtB,EACMoO,CAAuB/M,CAAAA,CAAAA,CAYzBpB,EAAW,CAAA,CAAC,GAAGzP,CAAAA,CAAU,UAAU,CAAC,CAAA,CAXpC,CACEud,CAAAA,CACAE,CACAC,CAAAA,CAAAA,CACAC,CACF,CAAE,CAAA,MAAA,CACC7qB,GACCA,CAAM,CAAA,UAAA,CAAW,QACjBA,CAAM,CAAA,KAAA,CAAM,MACZA,EAAAA,CAAAA,CAAM,SACV,CAAA,CAGJwqB,EAAU,GAAMM,CAAAA,CAAAA,CAGhBlB,GAAa,CACX,MAAA,CAAAtvB,EACA,IAAM,CAAA,CAGJ,IAAM4S,CAAAA,CAAAA,CAAU,IAChB,CAAA,IAAA,CAAMA,EAAU,IAClB,CAAA,CACA,gBAAiBwY,EACjB,CAAA,MAAA,CAAA6B,EACA,IAAM7J,CAAAA,EAAAA,CAAO,CACX,GAAG+L,CACH,CACA,UAAYqB,CAAAA,CACd,CAAC,CACH,CAAC,EACH,CAEA,IAAMtE,CAAAA,CAAmBtZ,CAAU,CAAA,SAAA,CAAU,MAAQ1T,CAAAA,CAAAA,EACnDA,EAAS,aAAc,CAAA,QAAA,CAAS,SAAS,CAC3C,CAAA,CAEA,GAAIgtB,CAAiB,CAAA,MAAA,CAAS,CAAG,CAAA,CAE/BoD,EAAa,CAAA,CACX,OAAAtvB,CACA,CAAA,IAAA,CAAM,CAGJ,IAAA,CAAM4S,CAAU,CAAA,IAAA,CAChB,KAAMA,CAAU,CAAA,IAClB,CACA,CAAA,eAAA,CAAiB2Y,EACjB,CAAA,MAAA,CAAA0B,EACA,IAAM7J,CAAAA,EAAAA,CAAO,CACX,GAAG+L,CAAAA,CACH,OAAQ,QACR,CACA,UAAA,CAAYjD,CACd,CAAC,CACH,CAAC,CAAA,CAED,IAAMQ,CAAAA,CAAiB9Z,CAAU,CAAA,SAAA,CAAU,OAAQ1T,CACjDA,EAAAA,CAAAA,CAAS,aAAc,CAAA,QAAA,CAAS,OAAO,CACzC,EAEKukB,CAEH6L,EAAAA,EAAAA,CAAa,CACX,MAAAtvB,CAAAA,CAAAA,CACA,KAAM,CAGJ,IAAA,CAAM4S,CAAU,CAAA,IAAA,CAChB,IAAMA,CAAAA,CAAAA,CAAU,IAClB,CACA,CAAA,eAAA,CAAiByY,GACjB,MAAA4B,CAAAA,CAAAA,CACA,KAAM7J,EACJsJ,CAAAA,CAAAA,CAAe,MACX,CAAA,CACE,GAAGyC,CAAAA,CACH,OAAQ,QACR,CACA,UAAYzC,CAAAA,CACd,EACA,CACE,GAAGyC,CACH,CAAA,IAAA,CAAM,SAGR,CACN,CACF,CAAC,EAEL,CACF,CAGF,IAAMznB,CAAa,CAAA,MAAA,CAAO,OAAQsoB,CAAAA,CAAQ,EAAE,GAAI,CAAA,CAAC,CAAC1jB,CAAM2jB,CAAAA,CAAO,IAAM,CACnE,IAAMK,CAAiB,CAAA,MAAA,CAAO,OAAQL,CAAAA,CAAO,EAC1C,GAAI,CAAA,CAAC,CAACQ,CAAAA,CAASP,CAAS,CAAA,GAAM,CAC7B,IAAMnX,CAAAA,CAAS0X,CAEXC,CAAAA,CAAAA,CAA4B,EAAC,CAEjC,GAAIR,CAAU,CAAA,GAAA,CAAK,CACjB,IAAMS,CAAAA,CAAgBT,EAAU,IAC1B,CAAA,CAAE,IAAMlsB,CAAAA,CAAK,CAAI4f,CAAAA,EAAAA,CAAkB,CACvC,MAAA5jB,CAAAA,CAAAA,CACA,IAAM,CAAA,CAGJ,IAAM2wB,CAAAA,CAAAA,CACN,KAAMA,CACR,CAAA,CACA,eAAiBvF,CAAAA,EACnB,CAAC,CAAA,CACKwF,EAAgB,CACpB,GAAGzB,EACH,IAAAnrB,CAAAA,CAAAA,CACA,OAAQ,WACR,CAAA,UAAA,CAAY,IACZ,CAAA,IAAA,CAAM,KACN,CAAA,UAAA,CAAY,EACZ,CAAA,IAAA,CAAMA,CACR,CACA0sB,CAAAA,CAAAA,CAAmB,CAAC,GAAGA,CAAAA,CAAkBE,CAAM,EACjD,CAEA,GAAIV,EAAU,GAAK,CAAA,CACjB,IAAMW,CAAmB,CAAA,MAAA,CAAO,QAAQX,CAAU,CAAA,GAAG,CAAE,CAAA,GAAA,CACrD,CAAC,CAACY,EAAM9sB,CAAI,CAAA,IAEW,CACnB,GAAGmrB,CACH,CAAA,GAAGnrB,EACH,UAAY,CAAA,IAAA,CACZ,IAAM,CAAA,MAAA,CAAO8sB,CAAI,CACnB,EAGJ,CAEMC,CAAAA,CAAAA,CAAgB,CACpB,GAAG5B,CAAAA,CACH,WAAY,IACZ,CAAA,IAAA,CAAM,KACN,CAAA,UAAA,CAAY0B,CACd,CAAA,CACAH,EAAmB,CAAC,GAAGA,CAAkBK,CAAAA,CAAM,EACjD,CAQA,OANyB,CACvB,GAAG5B,CACH,CAAA,UAAA,CAAY,IACZ,CAAA,IAAA,CAAMpW,EAAO,iBAAkB,EAAA,CAC/B,WAAY2X,CACd,CAEF,CAAC,CACA,CAAA,MAAA,CAAO,OAAO,CAAA,CAOjB,OANuB,CACrB,GAAGvB,CACH,CAAA,UAAA,CAAY,IACZ,CAAA,IAAA,CAAM,CAAI7iB,CAAAA,EAAAA,CAAI,IACd,UAAYgkB,CAAAA,CACd,CAEF,CAAC,CAEGvwB,CAAAA,CAAAA,CAAO,QAAQ,qBAAqB,CAAA,EAAG,MACzCuvB,EAAa,CAAA,CACX,OAAAtvB,CACA,CAAA,IAAA,CAAM,CACJ,IAAA,CAAM,qBACN,CAAA,IAAA,CAAMkvB,EACR,CACA,CAAA,MAAA,CAAAjC,EACA,IAAM7J,CAAAA,EAAAA,CAAO,CACX,GAAG+L,CAAAA,CACH,UAAAznB,CAAAA,CACF,CAAC,CACH,CAAC,EAEL,CAAA,CAEa2c,GAA8C,CAAC,CAC1D,OAAArkB,CACA,CAAA,KAAA,CAAAskB,CACF,CAAA,GAAM,CACJ,IAAMvkB,EAASoB,CAAU,EAAA,CAEzBmjB,CAAM,CAAA,KAAA,CAAQ,IAAIhP,EAAAA,CAAe,CAC/B,GAAKvV,CAAAA,CAAAA,CAAO,MAAO,CAAA,IAAA,CACnB,IAAM,CAAA,UACR,CAAC,CAED,CAAA,IAAMktB,EAAgCjrB,CAAS,EAAA,CAC7CsiB,EAAM,KAAO,EAAA,GAAA,CAAItiB,CAAI,EACvB,CAEA,CAAA,IAAA,IAAW+gB,KAAS/iB,CAAO,CAAA,MAAA,CACzB8vB,EAAa,CAAA,CAAE,MAAA9vB,CAAAA,CAAAA,CAAQ,MAAA+iB,CAAO,CAAA,MAAA,CAAAkK,CAAO,CAAC,CAGxC8C,CAAAA,EAAAA,CAAoB,CAAE,MAAA/vB,CAAAA,CAAAA,CAAQ,OAAAitB,CAAO,CAAC,EACxC,CC/lBA,CAAA,IAAMrD,EAAmB,CAAA,MAAA,CAEnBoH,EAAkB9xB,CAAAA,CAAAA,EACtBA,EAAS,IAAS,GAAA,SAAA,EAClBA,CAAS,CAAA,MAAA,GAAW,SACpBA,EAAAA,CAAAA,CAAS,OAAS,SAEd+xB,CAAAA,EAAAA,CAAe,CAAC,CACpB,MAAAjxB,CAAAA,CAAAA,CACA,MAAA+iB,CACF,CAAA,GACoBA,EAAM,KAAM,CAAA,GAAA,CAAK3G,GAAQ,CACzC,IAAM8U,CAAWlxB,CAAAA,CAAAA,CAAO,MAAO,CAAA,IAAA,CAAM+iB,GAAUA,CAAM,CAAA,IAAA,EAAM,OAAS3G,CAAG,CAAA,CACvE,GAAI,CAAC8U,CAAAA,CACH,MAAM,IAAI,KACR,CAAA,CAAA,IAAA,EAAO9U,CAAG,CACZ,wFAAA,CAAA,CAAA,CAEF,OAAO8U,CACT,CAAC,EAIGC,EACJ1B,CAAAA,CAAAA,EACG,CACH,IAAM2B,CAAY3B,CAAAA,CAAAA,CAAM,MAAM,IAAM,CAAA,IAAA,CAE9B,CAAE,IAAA,CAAAvvB,CAAK,CAAA,CAAIovB,GAAa,CAC5B,GAAGG,CACH,CAAA,IAAA,CAAM,CACJ,IAAA,CAAM,gBAAgB2B,CAAS,CAAA,CAAA,CAC/B,KAAMA,CACR,CAAA,CACA,gBAAiBjG,EACjB,CAAA,SAAA,CAAYjrB,CAAS,EAAA,CACnB,IAAMgH,CAAAA,CAAa4oB,GAAa,CAC9B,GAAGL,CACH,CAAA,IAAA,CAAM,CACJ,IAAA,CAAM,gBAAgB2B,CAAS,CAAA,CAAA,CAC/B,IAAAlxB,CAAAA,CACF,CACA,CAAA,IAAA,CAAM,CAAC0pB,EAAgB,CACzB,CAAC,CACDyH,CAAAA,EAAAA,CAA4B,CAC1B,GAAG5B,CAAAA,CACH,KAAO,CAAA,KAAA,CACP,IAAAvvB,CAAAA,CAAAA,CACA,WAAAgH,CACF,CAAC,EACH,CAAA,CACA,IAAM,CAAA,CAAA,CAAA,EAAI0iB,EAAgB,CAAawH,UAAAA,EAAAA,CAAS,CAClD,CAAA,CAAC,CAMD,CAAA,OAJe,CACb,OAAS,CAAA,CAAA,CAAQ3B,EAAM,MAAO,CAAA,KAAA,CAAMvvB,CAAI,CACxC,CAAA,IAAA,CAAAA,CACF,CAEF,CAEMoxB,CAAAA,EAAAA,CAAgB7B,GAAsB,CAC1C,GAAM,CAAE,KAAA1M,CAAAA,CAAM,EAAI0M,CACZ8B,CAAAA,CAAAA,CAAYN,EAAaxB,CAAAA,CAAK,CAEpC,CAAA,GAAI8B,EAAU,MAAW,GAAA,CAAA,CAAG,CAC1B,GAAM,CAAE,QAAArG,CAAS,CAAA,IAAA,CAAMsG,CAA6B,CAAA,CAClDL,EAAqC,CAAA,CAAE,GAAG1B,CAAO,CAAA,KAAA,CAAO8B,CAAU,CAAA,CAAC,CAAG,CAAC,EAEzE,OAAKrG,CAAAA,CAIE,CACLrc,CAAAA,CAAS,sBAAuB,CAAA,CAC9B,KAAM4gB,CAAM,CAAA,IAAA,CACZ,gBAAiB+B,CACnB,CAAC,CACH,CARS,CAAA,EASX,CAEA,OACE1O,EAAAA,CAAYC,CAAK,CAChBA,EAAAA,CAAAA,CAAM,IACL,EAAA,CAAC,KAAM,CAAA,OAAA,CAAQA,EAAM,IAAI,CAAA,EACzBA,CAAM,CAAA,IAAA,CAAK,MAAW,GAAA,QAAA,EACtBA,EAAM,IAAK,CAAA,UAAA,CAAW,KAAM/U,CAAa8U,EAAAA,EAAAA,CAAY9U,CAAQ,CAAC,CAAA,CAEzD,CACLa,CAAAA,CAAS,iBAAkB,CAAA,CACzB,KAAM4gB,CAAM,CAAA,IAAA,CACZ,mBAAqB5gB,CAAAA,CAAAA,CAAS,qBAAsB,CAAA,CAClD,UAAWA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,MAAO,CAAC,EAC/C,SAAWA,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM,MAAO,CAAC,CAAA,CAC/C,QAAUA,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CAClC,cAAe,MACjB,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAA,CAIK,EACT,CAEM4iB,CAAAA,EAAAA,CAAmBhC,GAAsB,CAC7C,GAAM,CAAE,KAAA1M,CAAAA,CAAM,EAAI0M,CACZnjB,CAAAA,CAAAA,CAAO,CAAC,GAAGmjB,CAAM,CAAA,IAAA,CAAM1M,EAAM,IAAI,CAAA,CAEvC,OACEA,CAAAA,CAAM,IAAS,GAAA,QAAA,EACfA,EAAM,MAAW,GAAA,OAAA,EACjBD,EAAYC,CAAAA,CAAK,CAEV,CAAA,CAAClU,EAAS,qBAAsB,CAAA,CAAE,KAAAvC,CAAK,CAAC,CAAC,CAI3CwjB,CAAAA,EAAAA,CAAa,CAClB,GAAGL,CACH,CAAA,KAAA,CAAA1M,EACA,IAAAzW,CAAAA,CACF,CAAC,CACH,CAEMwjB,CAAAA,EAAAA,CAAgBL,GAAsC,CAC1D,GAAM,CAAE,KAAA,CAAA1M,CAAM,CAAA,CAAI0M,EAElB,OAAQ1M,CAAAA,CAAM,QACZ,KAAK,QACH,OAAOuO,EAAAA,CAAa7B,CAAK,CAAA,CAC3B,KAAK,WAAA,CACH,OAAO1M,CAAM,CAAA,UAAA,CAAW,OAAS/U,CAAAA,CAAAA,EAC/ByjB,EAAgB,CAAA,CAAE,GAAGhC,CAAO,CAAA,KAAA,CAAOzhB,CAAS,CAAC,CAC/C,CAAA,CACF,KAAK,WAAa,CAAA,CAChB,GAAI+U,CAAM,CAAA,KAAA,CAAM,SAAW,CACzB,CAAA,OAAO,EAAC,CAEV,IAAMwO,CAAAA,CAAYN,GAAaxB,CAAK,CAAA,CAE9B,CAAE,OAAAvE,CAAAA,CAAAA,CAAS,KAAMsG,CAA6B,CAAA,CAClDL,EAAqC,CAAA,CACnC,GAAG1B,CAAAA,CACH,MAAO8B,CAAU,CAAA,CAAC,CACpB,CAAC,CAAA,CAEH,OAAKrG,CAIEnI,CAAAA,CAAAA,CAAM,EAAO,GAAA,UAAA,CAChB,CACElU,CAAAA,CAAS,sBAAsB,CAC7B,UAAA,CAAYA,CAAS,CAAA,cAAA,CAAe,CAClC,YAAA,CAAc2iB,EACd,UAAY,CAAA,CAAC5H,EAAgB,CAC/B,CAAC,CACH,CAAC,CACH,CAAA,CACA/a,EAAS,yBAA0B,CAAA,CACjC,KAAM4gB,CAAM,CAAA,IAAA,CACZ,eAAiB+B,CAAAA,CACnB,CAAC,CAAA,CAfI,EAgBX,CAEA,QACE,OAAO,EACX,CACF,CAEMH,CAAAA,EAAAA,CAA8B,CAAC,CACnC,KAAAtqB,CAAAA,CAAAA,CACA,OAAA/G,CACA,CAAA,IAAA,CAAAE,EACA,MAAA+sB,CAAAA,CAAAA,CACA,aAAAyE,CACA,CAAA,UAAA,CAAAxqB,CACF,CAAA,GAIM,CACJ,IAAMhF,EAAS,CACb,OAAA,CAAS,KACT,CAAA,IAAA,CAAAhC,CACF,CAAA,CAEA,GAAI,CAACgH,CAAAA,CAAW,MAGd,CAAA,OAAA2c,EAAoB,CAAA,CAClB,OAAA7jB,CACA,CAAA,IAAA,CAAAE,CACF,CAAC,CAAA,CACDwxB,KACOxvB,CAAAA,CAAAA,CAGT,IAAMmC,CAAAA,CAAawK,CAAS,CAAA,aAAA,CAAc,CACxC,KAAA9H,CAAAA,CAAAA,CACA,UAAW,IACX,CAAA,UAAA,CAAY,CACV,CACE,IAAA,CAAM6iB,EACR,CACF,CACA,CAAA,UAAA,CAAY,CACV,GAAG1iB,CAAAA,CACH2H,EAAS,cAAe,CAAA,CACtB,WAAY+a,EACd,CAAC,CACH,CACF,CAAC,CAAA,CACKngB,EAAYoF,CAAS,CAAA,aAAA,CAAc,CACvC,WAAA,CAAa,IACb,CAAA,UAAA,CAAAxK,EACA,IAAAnE,CAAAA,CAAAA,CACA,QAAUA,CAAAA,CACZ,CAAC,CAAA,CACD,OAAA+sB,CAAOxjB,CAAAA,CAAS,EAET,CACL,OAAA,CAAS,KACT,IAAAvJ,CAAAA,CACF,CACF,CAAA,CAGamkB,EAA8C,CAAA,CAAC,CAC1D,MAAArkB,CAAAA,CAAAA,CACA,KAAAskB,CAAAA,CACF,CAAM,GAAA,CACJ,IAAMvkB,CAASoB,CAAAA,CAAAA,EAET8rB,CAAAA,CAAAA,CAAgCjrB,CAAS,EAAA,CAC7CsiB,EAAM,KAAO,EAAA,GAAA,CAAItiB,CAAI,EACvB,CAAA,CACM0vB,EAA2C,IAAM,CACrDpN,CAAM,CAAA,KAAA,EAAO,UAAW,GAC1B,EAEA,IAAW4I,IAAAA,CAAAA,IAAWltB,CAAO,CAAA,QAAA,CAC3B,IAAW4S,IAAAA,CAAAA,IAAasa,EAAQ,UAAY,CAAA,CAC1C,IAAMhB,CAAAA,CAAmBtZ,CAAU,CAAA,SAAA,CAAU,OAAQ1T,CACnDA,EAAAA,CAAAA,CAAS,cAAc,QAAS,CAAA,SAAS,CAC3C,CAEA,CAAA,GAAI,CAACgtB,CAAAA,CAAiB,MACpB,CAAA,SAGF,IAAMyF,CAAmBzF,CAAAA,CAAAA,CAAiB,OACvChtB,CAAa,EAAA,CAAC8xB,GAAe9xB,CAAQ,CACxC,CAEA,CAAA,GAAI,CAACyyB,CAAAA,CAAiB,OACpB,SAGF,GAAIA,EAAiB,MAAS,CAAA,CAAA,CAAG,CAC3B5xB,CAAO,CAAA,IAAA,CAAK,KAAU,GAAA,OAAA,EACxB,OAAQ,CAAA,IAAA,CACN,4CAAkC+jB,EAAgBlR,CAAAA,CAAS,CAAC,CAAA,KAAA,EAAQ+e,CAAiB,CAAA,MAAM,0MAC7F,CAEF,CAAA,QACF,CAEA,IAAMzxB,CAAOqrB,CAAAA,EAAAA,CAA0B3Y,EAAU,IAAI,CAAA,CACrD0c,GAAa,CACX,MAAA,CAAAtvB,EACA,IAAM,CAAA,CACJ,IAAM,CAAA,CAAA,aAAA,EAAgBE,CAAI,CAAA,CAAA,CAC1B,KAAAA,CACF,CAAA,CACA,eAAiBorB,CAAAA,EAAAA,CACjB,SAAYsG,CAAAA,CAAAA,EAAgB,CAC1B,IAAM1qB,CAAAA,CACJglB,CAAiB,CAAA,MAAA,CAAS,CACtBA,CAAAA,CAAAA,CAAiB,QAAShtB,CAAa,EAAA,CACrC,IAAMgI,CAAa4oB,CAAAA,EAAAA,CAAa,CAC9B,MAAA9vB,CAAAA,CAAAA,CACA,IAAM,CAAA,CACJ,IAAM,CAAA,CAAA,aAAA,EAAgBE,CAAI,CAC1B,CAAA,CAAA,IAAA,CAAAA,CACF,CAAA,CACA,KAAOhB,CAAAA,CAAAA,CACP,OAAA+tB,CACA,CAAA,YAAA,CAAAyE,CACA,CAAA,IAAA,CAAM,CAAC9H,EAAgB,CACzB,CAAC,CAAA,CAGD,OAAK1iB,CAAW,CAAA,MAAA,CAIT,CACL2H,CAAS,CAAA,WAAA,CAAY,CACnB,UAAA,CAAYA,CAAS,CAAA,oBAAA,CAAqB,CAAC,MAAM,CAAC,EAClD,aAAeA,CAAAA,CAAAA,CAAS,MAAM,CAAE,UAAA,CAAA3H,CAAW,CAAC,CAC9C,CAAC,CACH,CARS,CAAA,EASX,CAAC,CAAA,CACD4oB,GAAa,CACX,MAAA,CAAA9vB,CACA,CAAA,IAAA,CAAM,CACJ,IAAA,CAAM,gBAAgBE,CAAI,CAAA,CAAA,CAC1B,IAAAA,CAAAA,CACF,CACA,CAAA,KAAA,CAAOgsB,EAAiB,CAAC,CAAA,CACzB,MAAAe,CAAAA,CAAAA,CACA,YAAAyE,CAAAA,CAAAA,CACA,KAAM,CAAC9H,EAAgB,CACzB,CAAC,CAAA,CACPyH,GAA4B,CAC1B,KAAA,CAAO,IACP,CAAA,MAAA,CAAArxB,CACA,CAAA,IAAA,CAAM4xB,EACN,MAAA3E,CAAAA,CAAAA,CACA,YAAAyE,CAAAA,CAAAA,CACA,UAAAxqB,CAAAA,CACF,CAAC,EACH,CAAA,CACA,MAAA+lB,CAAAA,CAAAA,CACA,IAAM,CAAA,CAAA,CAAA,EAAIrD,EAAgB,CAAqB1pB,kBAAAA,EAAAA,CAAI,GACrD,CAAC,EACH,CAEJ,CC3VO,CAAA,IAAMmU,EAAuC,CAAA,CAClD,aAAe,CAAA,CAAC,qBAAqB,CACrC,CAAA,QAAA,CAAUgB,EACV,CAAA,cAAA,CAAgBgP,EAChB,CAAA,KAAA,CAAO,CAAC,aAAa,CAAA,CACrB,MAAQ,CAAA,IAAA,CACR,KAAO,CAAA,IAAA,CACP,gBAAiB,KACjB,CAAA,IAAA,CAAM,wBACN,MAAQ,CAAA,cACV,ECLO,IAAMwN,EAAY,CAAA,CAAC,CACxB,OAAAnf,CAAAA,CAAAA,CACA,KAAAxS,CACF,CAAA,IAIEG,EAAa,CAAA,SAAA,CAAY,CACrBA,CAAAA,EAAAA,CAAa,KAAKH,CAAI,CAAA,CACjBsB,mBAAG,OAAQ,CAAA,oBAAA,CAAqBtB,CAAI,CAOtC6R,CAAAA,CAAAA,CAAW,CAAE,IAAA,CAAMW,CAAQ,CAAA,MAAA,CAAO,OAAO,IAAM,CAAA,KAAA,CAAOxS,CAAK,CAAC,CC1BrE,CAAA,CAWA,IAAM4xB,EAAajjB,CAAAA,CAAAA,CAAS,eAAgB,CAAA,CAAE,QAAS,QAAS,CAAC,EAE3DkjB,EAAsB,CAAA,CAAC,CAAE,MAAAC,CAAAA,CAAO,CAAmC,GAAA,CACvE,IAAMpe,CAAAA,CAAMjE,GAASqiB,CAAO,CAAA,GAAG,EAE/B,OAAIpe,CAAAA,CAAI,UAAYA,CAAI,CAAA,IAAA,CACf/E,CAAS,CAAA,eAAA,CAAgB,CAC9B,OAAA,CAASA,EAAS,aAAc,CAAA,CAAE,KAAMmjB,CAAO,CAAA,GAAI,CAAC,CACtD,CAAC,CAGInjB,CAAAA,CAAAA,CAAS,mBAAoB,CAAA,CAClC,MAAO,CACL+E,CAAAA,CAAI,QAAYke,EAAAA,EAAAA,CAChB,KACAle,CAAAA,CAAAA,CAAI,MAAQke,EACZle,CAAAA,CAAAA,CAAI,IAAO,CAAA,CAAA,CAAA,EAAIA,CAAI,CAAA,IAAI,GAAK,EAC5BA,CAAAA,CAAAA,CAAI,MAAQ,EACd,CACF,CAAC,CACH,CAAA,CAEaqe,EAAsB,CAAA,CAAC,CAClC,OAAA,CAAAvf,EACA,UAAAT,CAAAA,CAAAA,CACA,QAAAmB,CACF,CAAA,GAKM,CACJ,IAAMT,CAAAA,CAAOD,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAIJ,CAAQ,CAAC,CAAA,CAEzC,GAAI,CAACL,CAAAA,CAAW,KACd,OAGF,IAAMjS,CAASC,CAAAA,CAAAA,CAAgByS,CAAQ,CAAA,MAAM,EAEvC5M,CAA4BsN,CAAAA,CAAAA,CAAQ,GAAK4e,CAAAA,CAAAA,EAC7CD,EAAoB,CAAA,CAAE,OAAAC,CAAO,CAAC,CAChC,CAAA,CAEK5e,CAAQ,CAAA,MAAA,CAEA,kBAAmBpT,CAAUA,EAAAA,CAAAA,CAAO,eAC/C8F,CAAM,CAAA,IAAA,CACJ+I,EAAS,oBAAqB,CAAA,CAC5B,KAAO,CAAA,CAACijB,EAAYtwB,CAAAA,kBAAAA,CAAG,QAAQ,qBAAsB,CAAA,EAAE,CAAC,CAC1D,CAAC,CACH,CANAsE,CAAAA,CAAAA,CAAM,IAAKgsB,CAAAA,EAAU,CASvB,CAAA,IAAMI,EAAoBrjB,CAAS,CAAA,oBAAA,CAAqB,CACtD,UAAY,CAAA,IAAA,CACZ,KAAMoD,CAAW,CAAA,IAAA,CACjB,IAAMpD,CAAAA,CAAAA,CAAS,iBAAkB,CAAA,CAC/B,WAAY,CACV,CACE,IAAM/O,CAAAA,CAAAA,CAAoB4S,CAAQ,CAAA,MAAM,EACxC,IAAM7D,CAAAA,CAAAA,CAAS,aAAc,CAAA,CAAE,KAAA/I,CAAAA,CAAM,CAAC,CACxC,CACF,EACA,mBAAqB,CAAA,KACvB,CAAC,CACH,CAAC,CAED6M,CAAAA,CAAAA,CAAK,GAAIuf,CAAAA,CAAiB,EAC5B,CCjDA,CAAA,IAAMnX,GAAmB,CAAC,CAAE,OAAApG,CAAO,CAAA,GAAmC,CACpE,IAAMhR,CAAW,CAAA,CACfgR,EAAO,WAAe7T,EAAAA,CAAAA,CAAc6T,EAAO,WAAW,CAAA,CACtDA,EAAO,UAAc,EAAA,aACvB,CAAE,CAAA,MAAA,CAAO,OAAO,CAAA,CAEhB,GAAKhR,CAAS,CAAA,MAAA,CAId,OAAOA,CACT,CAEMwuB,CAAAA,EAAAA,CAAa,CAAC,CAClB,IAAA,CAAAjiB,CACA,CAAA,WAAA,CAAAkiB,CACA,CAAA,MAAA,CAAAjyB,CACF,CAIM,GAAA,CACJ,GAAI,CAACiyB,CAAAA,CACH,OAAOliB,CAGT,CAAA,IAAMmiB,CAAWniB,CAAAA,CAAAA,CAAK,KAAM,CAAA,GAAG,EACzBhQ,CAAOmyB,CAAAA,CAAAA,CAAS,GAAI,EAAA,CACpBC,CACJF,CAAAA,CAAAA,GAAgB,OACZjyB,CAAO,CAAA,mBAAA,CACPA,CAAO,CAAA,mBAAA,CACPoyB,CAAgBC,CAAAA,EAAAA,CAAmB,CAAE,IAAAtyB,CAAAA,CAAAA,CAAM,YAAAoyB,CAAY,CAAC,EAC9D,OAAAD,CAAAA,CAAS,IAAKE,CAAAA,CAAa,CACpBF,CAAAA,CAAAA,CAAS,KAAK,GAAG,CAC1B,CAEMG,CAAAA,EAAAA,CAAqB,CAAC,CAC1B,KAAAtyB,CACA,CAAA,WAAA,CAAAoyB,CACF,CAAA,GAIOA,CAIEA,CAAAA,CAAAA,CAAY,QAAQ,UAAYpyB,CAAAA,CAAI,EAHlCA,CAMLuyB,CAAAA,EAAAA,CAAmB,CAAC,CACxB,MAAA,CAAA9d,CACA,CAAA,KAAA,CAAAsD,CACF,CAAA,GAIE,GACEA,CAAO,EAAA,WAAA,EACLtD,EAAO,WACPsD,EAAAA,CAAAA,CAAM,cAAgBtD,CAAO,CAAA,WAAA,CAAA,CAG7B+d,EAAoB,CAAA,CAAC,CACzB,IAAA,CAAAxiB,EACA,OAAAwC,CAAAA,CAAAA,CACA,OAAAvS,CACA,CAAA,MAAA,CAAAwU,CACF,CAKM,GAAA,CAEJ,IAAM1C,CAAAA,CADOS,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAIJ,CAAAA,CAAQ,CAAC,CAAA,CACjB,UAAW,CAAA,CACjC,KAAApC,CACA,CAAA,MAAA,CAAQ,IACR,CAAA,SAAA,CAAW,OACb,CAAC,EAOD,GAAI,CAAC+B,EAAW,OACd,CAAA,OAGF,IAAM0gB,CAAaC,CAAAA,EAAAA,CAAmB,CAAE,MAAA,CAAAzyB,CAAQ,CAAA,MAAA,CAAAwU,CAAO,CAAC,CAAA,CAElDtQ,CAAawK,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CAC3C,UAAW,IACX,CAAA,GAAA,CAAK8jB,CAAW,CAAA,GAClB,CAAC,CAAA,CAQD,OAPa9jB,CAAS,CAAA,aAAA,CAAc,CAClC,SAAW,CAAA,OAAA,CACX,QAASkM,EAAiB,CAAA,CAAE,MAAApG,CAAAA,CAAO,CAAC,CAAA,CACpC,YAAa,IACb,CAAA,UAAA,CAAAtQ,CACA,CAAA,IAAA,CAAM4N,CAAW,CAAA,IAAA,EAAQ,EAC3B,CAAC,CAEH,CAEM2gB,CAAAA,EAAAA,CAAqB,CAAC,CAC1B,OAAAzyB,CACA,CAAA,MAAA,CAAAwU,CACF,CAGM,GAAA,CACJ,IAAMke,CASF,CAAA,EA+CJ,CAAA,OAAO,CACL,GAAA,CAAA,CA9CWle,EAAO,KAAS,EAAA,IAAI,GAAKzK,CAAAA,CAAAA,EAAS,CAC7C,IAAM4oB,CAAAA,CAAkB,OAAO5oB,CAAAA,CAAK,KAE/B2oB,CAAAA,CAAAA,CAAY,SAASC,CAAe,CAAA,EAGvCD,EAAY,IAAKC,CAAAA,CAAe,EAGlC,IAAI10B,CAAAA,CACJ,OAAI8L,CAAAA,CAAK,KACP9L,CAAAA,CAAAA,CAAM8L,EAAK,KACF4oB,CAAAA,CAAAA,GAAoB,QAAYA,EAAAA,CAAAA,GAAoB,QAC7D10B,CAAAA,CAAAA,CAAM,GAAG8L,CAAK,CAAA,KAAK,CACV4oB,CAAAA,CAAAA,CAAAA,GAAoB,SAC7B10B,CAAAA,CAAAA,CAAM8L,EAAK,KAAQ,CAAA,MAAA,CAAS,QACnBA,CAAK,CAAA,KAAA,GAAU,OACxB9L,CAAM,CAAA,MAAA,CAAA,CAGJA,CACFA,GAAAA,CAAAA,CAAM2T,CAAW,CAAA,CACf,KAAM5R,CAAO,CAAA,SAAA,CACb,sBAAwB,CAAA,KAAA,CACxB,KAAO/B,CAAAA,CACT,CAAC,CAEDiC,CAAAA,EAAAA,CAAa,SAAY,CAAA,CAAA,CAGvBA,EAAa,CAAA,IAAA,CAAKjC,CAAG,CACpB+B,GAAAA,CAAAA,CAAO,QAAU,YAChBA,EAAAA,CAAAA,CAAO,QAAU,sBAEnB/B,CAAAA,GAAAA,CAAAA,CAAM,CAAIA,CAAAA,EAAAA,CAAG,CAIV,CAAA,CAAA,CAAA,CAAA,CACL,SAAU2c,EAAiB,CAAA,CAAE,MAAQ7Q,CAAAA,CAAK,CAAC,CAAA,CAC3C,IAAA9L,CACA,CAAA,KAAA,CAAO8L,CAAK,CAAA,KACd,CACF,CAAC,EAIC,WAAA2oB,CAAAA,CACF,CACF,CAEME,CAAAA,EAAAA,CAAc,CAAC,CACnB,IAAA,CAAA7iB,CACA,CAAA,OAAA,CAAAwC,CACA,CAAA,MAAA,CAAAvS,EACA,MAAAwU,CAAAA,CAAAA,CACA,MAAAsD,CACF,CAAA,GAM2C,CAEzC,IAAMhG,CAAAA,CADOS,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAIJ,CAAQ,CAAC,CAAA,CACjB,WAAW,CACjC,IAAA,CAAApC,EACA,MAAQ,CAAA,IAAA,CACR,SAAW,CAAA,MACb,CAAC,CAAA,CAOD,GACE,CAAC+B,CAAAA,CAAW,OACZ,EAAA,CAAChC,EAAsBC,CAAAA,CAAI,GAC3B/P,CAAO,CAAA,KAAA,GAAU,sBAEjB,CAAA,OAGF,IAAM+F,CAAAA,CAAO8sB,EAAa,CACxB,OAAA,CAAAtgB,EACA,MAAAvS,CAAAA,CAAAA,CACA,OAAQ,CACN,GAAGwU,CACH,CAAA,IAAA,CAAM,MACR,CAAA,CACA,MAAAsD,CACF,CAAC,CAED,CAAA,GAAI/R,CAOF,CAAA,OANa2I,EAAS,oBAAqB,CAAA,CACzC,OAASkM,CAAAA,EAAAA,CAAiB,CAAE,MAAA,CAAApG,CAAO,CAAC,CAAA,CACpC,WAAY,IACZ,CAAA,IAAA,CAAM1C,EAAW,IAAQ,EAAA,EAAA,CACzB,IAAA/L,CAAAA,CACF,CAAC,CAGL,EAEM+sB,EAAoB,CAAA,CAAC,CACzB,IAAA,CAAA/iB,CACA,CAAA,OAAA,CAAAwC,EACA,MAAAvS,CAAAA,CAAAA,CACA,MAAAwU,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,IAMM,CAEJ,IAAMhG,EADOS,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAIJ,CAAAA,CAAQ,CAAC,CAAA,CACjB,UAAW,CAAA,CACjC,KAAApC,CACA,CAAA,MAAA,CAAQ,KACR,SAAW,CAAA,OACb,CAAC,CAOD,CAAA,GAAI,CAAC+B,CAAAA,CAAW,OAAW9R,EAAAA,CAAAA,CAAO,QAAU,sBAC1C,CAAA,OAGF,IAAMwyB,CAAaC,CAAAA,EAAAA,CAAmB,CAAE,MAAAzyB,CAAAA,CAAAA,CAAQ,MAAAwU,CAAAA,CAAO,CAAC,CAAA,CAGxD,OACEge,CAAW,CAAA,WAAA,CAAY,MACpBzsB,CAAAA,CAAAA,EAASA,CAAS,GAAA,QAAA,EAAYA,IAAS,QAC1C,CAAA,CAAE,MAEW6sB,CAAAA,EAAAA,CAAY,CACvB,IAAA,CAAA7iB,EACA,OAAAwC,CAAAA,CAAAA,CACA,OAAAvS,CACA,CAAA,MAAA,CAAAwU,EACA,KAAAsD,CAAAA,CACF,CAAC,CAAA,CAIUpJ,CAAS,CAAA,eAAA,CAAgB,CACpC,cAAgBkM,CAAAA,EAAAA,CAAiB,CAAE,MAAA,CAAApG,CAAO,CAAC,EAC3C,IAAM1C,CAAAA,CAAAA,CAAW,IAAQ,EAAA,EAAA,CACzB,GAAK0gB,CAAAA,CAAAA,CAAW,GAClB,CAAC,CAEH,EAEMO,EAAwB,CAAA,CAAC,CAC7B,OAAAxgB,CAAAA,CAAAA,CACA,SAAAgD,CAAAA,CAAAA,CACA,MAAAvV,CAAAA,CAAAA,CACA,OAAAwU,CACA,CAAA,KAAA,CAAAsD,CACF,CAAA,GAMmB,CACjB,GAAI,CAACtD,CAAO,CAAA,KAAA,CACV,OAAO9F,CAAAA,CAAS,aACdA,CAAAA,CAAAA,CAAS,gBAAgB,CACvB,OAAA,CAAS,SACX,CAAC,CACH,EAGF8F,CAASmQ,CAAAA,EAAAA,CAAkB,CAAE,MAAA,CAAAnQ,CAAO,CAAC,EAErC,IAAMqU,CAAAA,CAAgC,EAGtC,CAAA,IAAA,IAAW9e,KAAQyK,CAAO,CAAA,KAAA,CAAQ,CAChC,IAAMzO,CAAO8sB,CAAAA,CAAAA,CAAa,CACxB,OAAAtgB,CAAAA,CAAAA,CACA,UAAAgD,CACA,CAAA,MAAA,CAAAvV,EACA,MAAQ+J,CAAAA,CAAAA,CACR,KAAA+N,CAAAA,CACF,CAAC,CAAA,CAEG/R,GACF8iB,CAAU,CAAA,IAAA,CAAK9iB,CAAI,EAEvB,CAEA,OAAI8iB,EAAU,MAAW,GAAA,CAAA,CAChBna,CAAS,CAAA,aAAA,CAAcma,CAAU,CAAA,CAAC,CAAE,CAGzCrU,CAAAA,CAAAA,CAAO,kBAAoB,KACtB9F,CAAAA,CAAAA,CAAS,cACdA,CAAS,CAAA,oBAAA,CAAqB,CAAE,KAAA,CAAOma,CAAU,CAAC,CACpD,CAGKna,CAAAA,CAAAA,CAAS,aAAcA,CAAAA,CAAAA,CAAS,aAAc,CAAA,CAAE,MAAOma,CAAU,CAAC,CAAC,CAC5E,CAEMmK,CAAAA,EAAAA,CAA0B,CAAC,CAC/B,MAAA,CAAAxe,CACF,CAKMA,GAAAA,CAAAA,CAAO,QAAU,MACZ9F,CAAAA,CAAAA,CAAS,eAAgB,CAAA,CAC9B,OAASA,CAAAA,CAAAA,CAAS,IAAI,OAAQ8F,CAAAA,CAAAA,CAAO,KAAgB,CACvD,CAAC,CAAA,CAGI9F,EAAS,eAAgB,CAAA,CAC9B,OAAS,CAAA,SACX,CAAC,CAAA,CAGGukB,GAAuB,CAAC,CAC5B,KAAAljB,CACA,CAAA,OAAA,CAAAwC,EACA,SAAAgD,CAAAA,CAAAA,CACA,MAAAvV,CAAAA,CAAAA,CACA,MAAAwU,CAAAA,CAAAA,CACA,MAAAsD,CACF,CAAA,GAO+B,CAC7B,IAAMtF,CAAAA,CAAOD,EAAQ,IAAK,CAAA,CAAE,EAAIJ,CAAAA,CAAQ,CAAC,CAAA,CACnC+gB,EAAiBnjB,CAAOD,CAAAA,EAAAA,CAAsBC,CAAI,CAAI,CAAA,KAAA,CACtDojB,EAAmBD,CAAkB,EAAA,CAAA,CAAQlzB,CAAO,CAAA,iBAAA,CAE1D,GAAI+P,CAAAA,EAAQojB,EAAkB,CAG5B,GAAI,CAACnzB,CAAAA,CAAO,KAAO,CAAA,CACjB,IAAM8iB,CAAW8P,CAAAA,EAAAA,CAAY,CAC3B,IAAA,CAAA7iB,CACA,CAAA,OAAA,CAAAwC,EACA,MAAAvS,CAAAA,CAAAA,CACA,OAAAwU,CACA,CAAA,KAAA,CAAAsD,CACF,CAAC,CAAA,CACGgL,CACFtQ,EAAAA,CAAAA,CAAK,GAAIsQ,CAAAA,CAAQ,EAErB,CAEA,GAAI9iB,CAAO,CAAA,KAAA,GAAU,YAAc,CAAA,CACjC,IAAM8iB,CAAW8P,CAAAA,EAAAA,CAAY,CAC3B,IAAA,CAAA7iB,CACA,CAAA,OAAA,CAAAwC,EACA,MAAAvS,CAAAA,CAAAA,CACA,OAAAwU,CACA,CAAA,KAAA,CAAAsD,CACF,CAAC,CAAA,CACGgL,CACFtQ,EAAAA,CAAAA,CAAK,GAAIsQ,CAAAA,CAAQ,EAGnB,IAAMsQ,CAAAA,CAAab,EAAkB,CAAA,CACnC,IAAAxiB,CAAAA,CAAAA,CACA,QAAAwC,CACA,CAAA,MAAA,CAAAvS,CACA,CAAA,MAAA,CAAAwU,CACF,CAAC,EACG4e,CACF5gB,EAAAA,CAAAA,CAAK,IAAI4gB,CAAU,EAEvB,CAEA,GAAIpzB,CAAAA,CAAO,KAAU,GAAA,YAAA,CAAc,CACjC,IAAMqzB,EAAWP,EAAkB,CAAA,CACjC,KAAA/iB,CACA,CAAA,OAAA,CAAAwC,EACA,MAAAvS,CAAAA,CAAAA,CACA,MAAAwU,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAAC,CACGub,CAAAA,CAAAA,EACF7gB,EAAK,GAAI6gB,CAAAA,CAAQ,EAErB,CAEA,GAAIrzB,CAAO,CAAA,KAAA,GAAU,sBAAwB,CAAA,CAC3C,IAAMqzB,CAAWP,CAAAA,EAAAA,CAAkB,CACjC,IAAA,CAAA/iB,CACA,CAAA,OAAA,CAAAwC,EACA,MAAAvS,CAAAA,CAAAA,CACA,MAAAwU,CAAAA,CAAAA,CACA,KAAAsD,CAAAA,CACF,CAAC,CACGub,CAAAA,CAAAA,GACEH,EACF1gB,CAAK,CAAA,GAAA,CAAI6gB,CAAQ,CAGjB9d,CAAAA,CAAAA,CAAU,IAAK8d,CAAAA,CAAQ,CAG7B,EAAA,CACF,CAWA,OATaR,CAAAA,CAAa,CACxB,OAAA,CAAAtgB,CACA,CAAA,MAAA,CAAAvS,EACA,MAAQ,CAAA,CACN,GAAGwU,CAAAA,CACH,IAAM,CAAA,MACR,EACA,KAAAsD,CAAAA,CACF,CAAC,CAEH,CAAA,CAEMwb,GAAyB,CAAC,CAC9B,OAAA/gB,CAAAA,CAAAA,CACA,MAAAiC,CAAAA,CACF,IAKMA,CAAO,CAAA,KAAA,GAAU,MACZ9F,CAAAA,CAAAA,CAAS,eAAgB,CAAA,CAC9B,QAASA,CAAS,CAAA,GAAA,CAAI,MAAO8F,CAAAA,CAAAA,CAAO,KAAe,CACrD,CAAC,CAGCA,CAAAA,CAAAA,CAAO,OAAS,SAAaA,EAAAA,CAAAA,CAAO,SAAW,OAE7CjC,EAAAA,CAAAA,CAAQ,MAAO,CAAA,OAAA,CAAQ,uBAAuB,CAAA,EAAG,OAC5C7D,CAAS,CAAA,iBAAA,CAAkB,CAAE,QAAU,CAAA,QAAS,CAAC,CAIrDA,CAAAA,CAAAA,CAAS,eAAgB,CAAA,CAC9B,OAAS,CAAA,QACX,CAAC,CAGG6kB,CAAAA,EAAAA,CAAyB,CAAC,CAC9B,OAAA,CAAAhhB,EACA,SAAAgD,CAAAA,CAAAA,CACA,MAAAvV,CAAAA,CAAAA,CACA,MAAAwU,CAAAA,CAAAA,CACA,MAAAsD,CACF,CAAA,GAM+B,CAE7B,IAAIpK,CACE6N,CAAAA,CAAAA,CAAoC,EACtCiY,CAAAA,CAAAA,CAA6C,EAAC,CAC5CvqB,CAAWuL,CAAAA,CAAAA,CAAO,UAAY,EAAC,CACjCif,EAAwB,KACxBC,CAAAA,CAAAA,CAAuB,MAE3B,IAAW3zB,IAAAA,CAAAA,IAAQyU,CAAO,CAAA,UAAA,CAAY,CACpC,IAAM3G,EAAW2G,CAAO,CAAA,UAAA,CAAWzU,CAAI,CAAA,CAOvC,GALauyB,EAAAA,CAAiB,CAC5B,MAAQzkB,CAAAA,CAAAA,CACR,KAAAiK,CAAAA,CACF,CAAC,CAAA,CAES,CACR4b,CAAuB,CAAA,IAAA,CACvB,QACF,CAEA,IAAM3L,EAAa9e,CAAS,CAAA,QAAA,CAASlJ,CAAI,CAAA,CACzCwb,CAAiB,CAAA,IAAA,CAAK,CACpB,OAASX,CAAAA,EAAAA,CAAiB,CAAE,MAAA,CAAQ/M,CAAS,CAAC,EAC9C,UAAYA,CAAAA,CAAAA,CAAS,WAAgB,GAAA,MAAA,CACrC,UAAAka,CAAAA,CAAAA,CACA,KAAM2J,EAAU,CAAA,CAAE,QAAAnf,CAAS,CAAA,IAAA,CAAAxS,CAAK,CAAC,CAAA,CACjC,IAAM8yB,CAAAA,CAAAA,CAAa,CACjB,IAAA,CAAM,GAAGhjB,EAAK,CAAA,EAAG9P,CAAI,CACrB,CAAA,CAAA,OAAA,CAAAwS,EACA,SAAAgD,CAAAA,CAAAA,CACA,MAAAvV,CAAAA,CAAAA,CACA,MAAQ6N,CAAAA,CAAAA,CACR,MAAAiK,CACF,CAAC,CACH,CAAC,CAAA,CACD0b,EAAmB,IAAK3lB,CAAAA,CAAQ,CAE3Bka,CAAAA,CAAAA,GACH0L,CAAwB,CAAA,IAAA,EAE5B,CAqCA,GAlCEjf,CAAAA,CAAO,oBACNA,GAAAA,CAAAA,CAAO,oBAAqB,CAAA,IAAA,GAAS,SAAW,CAACgf,CAAAA,CAAmB,MAEjEhf,CAAAA,GAAAA,CAAAA,CAAO,oBAAqB,CAAA,IAAA,GAAS,QACvCgf,CAAqB,CAAA,CAAChf,EAAO,oBAAoB,CAAA,CAEjDgf,EAAmB,OAAQhf,CAAAA,CAAAA,CAAO,oBAAoB,CAAA,CAGpDif,CACFD,EAAAA,CAAAA,CAAmB,KAAK,CACtB,IAAA,CAAM,WACR,CAAC,CAGH9lB,CAAAA,CAAAA,CAAgB,CACd,UAAY,CAAA,IAAA,CACZ,IAAM,CAAA,KAAA,CACN,IAAMmlB,CAAAA,CAAAA,CAAa,CACjB,OAAAtgB,CAAAA,CAAAA,CACA,UAAAgD,CACA,CAAA,MAAA,CAAAvV,EACA,MACEwzB,CAAAA,CAAAA,CAAmB,MAAW,GAAA,CAAA,CAC1BA,CAAmB,CAAA,CAAC,EACpB,CACE,KAAA,CAAOA,CACP,CAAA,eAAA,CAAiB,IACnB,CAAA,CACN,MAAA1b,CACF,CAAC,CACH,CAAA,CAAA,CAGE,EAAA4b,CAAAA,EAAwB,CAACnY,CAAiB,CAAA,MAAA,EAAU,CAAC7N,CAIzD,CAAA,CAAA,OAAOgB,EAAS,iBAAkB,CAAA,CAChC,aAAAhB,CAAAA,CAAAA,CACA,UAAY6N,CAAAA,CAAAA,CACZ,oBAAqB,KACvB,CAAC,CACH,CAEMoY,CAAAA,EAAAA,CAAyB,CAAC,CAC9B,OAAA,CAAAphB,CACA,CAAA,MAAA,CAAAiC,CACF,CAAA,GAImB,CACjB,GAAIA,CAAAA,CAAO,QAAU,MACnB,CAAA,OAAO9F,EAAS,eAAgB,CAAA,CAC9B,OAASA,CAAAA,CAAAA,CAAS,aAAc,CAAA,CAAE,KAAM8F,CAAO,CAAA,KAAgB,CAAC,CAClE,CAAC,CAAA,CAGH,GAAIA,CAAO,CAAA,MAAA,CAAQ,CACjB,GAAIA,CAAO,CAAA,MAAA,GAAW,SACpB,OAAO9F,CAAAA,CAAS,cAAc,CAC5B,KAAA,CAAO,CACLA,CAAS,CAAA,iBAAA,CAAkB,CACzB,QAAA,CAAU,MACZ,CAAC,EACDA,CAAS,CAAA,iBAAA,CAAkB,CACzB,QAAA,CAAU,MACZ,CAAC,CACH,CACF,CAAC,CAGH,CAAA,GAAA,CAAI8F,CAAO,CAAA,MAAA,GAAW,aAAeA,CAAO,CAAA,MAAA,GAAW,SAEjDjC,CAAQ,CAAA,MAAA,CAAO,QAAQ,uBAAuB,CAAA,EAAG,KACnD,CAAA,OAAO7D,CAAS,CAAA,iBAAA,CAAkB,CAAE,QAAU,CAAA,MAAO,CAAC,CAG5D,CAEA,OAAOA,EAAS,eAAgB,CAAA,CAC9B,OAAS,CAAA,QACX,CAAC,CACH,EAEMklB,EAAwB,CAAA,CAAC,CAC7B,OAAArhB,CAAAA,CAAAA,CACA,UAAAgD,CACA,CAAA,MAAA,CAAAvV,CACA,CAAA,MAAA,CAAAwU,CACA,CAAA,KAAA,CAAAsD,CACF,CAMmB,GAAA,CACjB,IAAI+Q,CAAgD,CAAA,GAEpD,GAAIrU,CAAAA,CAAO,KAAS,EAAA,KAAA,CAAM,OAAQA,CAAAA,CAAAA,CAAO,KAAK,CAC5CqU,CAAAA,CAAAA,CAAYrU,EAAO,KAAM,CAAA,GAAA,CAAKtW,GACTwQ,CAAS,CAAA,iBAAA,CAAkB,CAAE,KAAA,CAAAxQ,CAAM,CAAC,GAClCwQ,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,SAAU,CAAC,CAC7D,CACQ8F,CAAAA,KAAAA,GAAAA,CAAAA,CAAO,KAChB,CAAA,IAAA,IAAWzK,CAAQyK,IAAAA,CAAAA,CAAO,MAAO,CAC/B,IAAMzO,EAAO8sB,CAAa,CAAA,CACxB,QAAAtgB,CACA,CAAA,SAAA,CAAAgD,CACA,CAAA,MAAA,CAAAvV,CACA,CAAA,MAAA,CAAQ+J,EACR,KAAA+N,CAAAA,CACF,CAAC,CAAA,CAEG/R,CACF8iB,EAAAA,CAAAA,CAAU,KAAK9iB,CAAI,EAEvB,CAGF,OAAO2I,CAAS,CAAA,aAAA,CAAc,CAC5B,KAAOma,CAAAA,CACT,CAAC,CACH,CAAA,CAEMgL,GAAyB,CAAC,CAC9B,IAAA9jB,CAAAA,CAAAA,CACA,OAAAwC,CAAAA,CAAAA,CACA,UAAAgD,CACA,CAAA,MAAA,CAAAvV,CACA,CAAA,MAAA,CAAAwU,CACA,CAAA,KAAA,CAAAsD,CACF,CAO+B,GAAA,CAC7B,OAAQtD,CAAAA,CAAO,IAA2C,EACxD,KAAK,OACH,CAAA,OAAOue,GAAsB,CAC3B,OAAA,CAAAxgB,EACA,SAAAgD,CAAAA,CAAAA,CACA,MAAAvV,CAAAA,CAAAA,CACA,MAAQwU,CAAAA,CAAAA,CACR,MAAAsD,CACF,CAAC,EACH,KAAK,SAAA,CACH,OAAOkb,EAAwB,CAAA,CAG7B,OAAQxe,CACV,CAAC,EACH,KAAK,MAAA,CACH,OAAOye,EAAqB,CAAA,CAC1B,IAAAljB,CAAAA,CAAAA,CACA,OAAAwC,CAAAA,CAAAA,CACA,UAAAgD,CACA,CAAA,MAAA,CAAAvV,CACA,CAAA,MAAA,CAAQwU,CACR,CAAA,KAAA,CAAAsD,CACF,CAAC,CAAA,CACH,KAAK,SAAA,CACL,KAAK,QAAA,CACH,OAAOwb,EAAuB,CAAA,CAC5B,QAAA/gB,CACA,CACA,MAAQiC,CAAAA,CACV,CAAC,CAAA,CACH,KAAK,OAAA,CACH,OAAO9F,CAAS,CAAA,eAAA,CAAgB,CAC9B,OAAA,CAAS,OACX,CAAC,EACH,KAAK,MAAA,CACH,OAAOA,CAAAA,CAAS,eAAgB,CAAA,CAC9B,QAASA,CAAS,CAAA,IAAA,EACpB,CAAC,CAAA,CACH,KAAK,QACH,CAAA,OAAO6kB,EAAuB,CAAA,CAC5B,OAAAhhB,CAAAA,CAAAA,CACA,UAAAgD,CACA,CAAA,MAAA,CAAAvV,CACA,CAAA,MAAA,CAAQwU,CACR,CAAA,KAAA,CAAAsD,CACF,CAAC,CAAA,CACH,KAAK,QAAA,CACH,OAAO6b,EAAAA,CAAuB,CAC5B,OAAAphB,CAAAA,CAAAA,CAEA,MAAA,CAAQiC,CACV,CAAC,CAAA,CACH,KAAK,OAAA,CACH,OAAOof,EAAAA,CAAsB,CAC3B,OAAArhB,CAAAA,CAAAA,CACA,UAAAgD,CACA,CAAA,MAAA,CAAAvV,EACA,MAAQwU,CAAAA,CAAAA,CACR,KAAAsD,CAAAA,CACF,CAAC,CAAA,CACH,KAAK,WACH,CAAA,OAAOpJ,EAAS,eAAgB,CAAA,CAC9B,QAAS,WACX,CAAC,CACH,CAAA,KAAK,SACH,CAAA,OAAOA,EAAS,eAAgB,CAAA,CAC9B,OAAS,CAAA,SACX,CAAC,CAAA,CACH,KAAK,MACH,CAAA,OAAOA,CAAS,CAAA,eAAA,CAAgB,CAC9B,OAAA,CAAS,MACX,CAAC,CACL,CACF,CAEMolB,CAAAA,EAAAA,CAAyB,CAAC,CAC9B,UAAA,CAAA1uB,CACF,CAAA,GAEuB,CACrB,IAAMyV,EAA4B,CAChC,IAAA,CAAM,QACR,CAAA,CAEA,GAAIzV,CAAAA,CAAY,CACd,IAAMmC,CAAAA,CAA8C,EAAC,CAC/C0B,CAA0B,CAAA,GAEhC,IAAWlJ,IAAAA,CAAAA,IAAQqF,EAAY,CAC7B,IAAMC,EAAYD,CAAWrF,CAAAA,CAAI,CAEjCwH,CAAAA,CAAAA,CAAWxH,CAAI,CAAA,CAAI4kB,GAAkB,CACnC,MAAA,CAAQtf,CAAU,CAAA,MACpB,CAAC,CAAA,CAEGA,EAAU,QACZ4D,EAAAA,CAAAA,CAAS,IAAKlJ,CAAAA,CAAI,EAEtB,CAEA8a,EAAS,UAAatT,CAAAA,CAAAA,CAElB0B,EAAS,MACX4R,GAAAA,CAAAA,CAAS,SAAW5R,CAExB,EAAA,CAEA,OAAO4R,CACT,CAEMkZ,CAAAA,EAAAA,CAAsB,CAAC,CAC3B,OAAA,CAAAxhB,EACA,SAAAE,CAAAA,CAAAA,CACA,OAAAzS,CACF,CAAA,GAIM,CACJ,IAAMwS,CAAOD,CAAAA,CAAAA,CAAQ,KAAK,CAAE,EAAA,CAAIJ,CAAQ,CAAC,CAAA,CACnC6hB,EAAwB,CAC5B,IAAA,CAAM,QACR,CAAA,CACMC,CAA8B,CAAA,GAE/BD,CAAK,CAAA,UAAA,GACRA,CAAK,CAAA,UAAA,CAAa,EAAC,CAAA,CAGjBvhB,EAAU,IACZuhB,EAAAA,CAAAA,CAAK,UAAW,CAAA,IAAA,CAAOvhB,CAAU,CAAA,IAAA,CAAK,OAElCA,CAAU,CAAA,IAAA,CAAK,UACjBwhB,CAAa,CAAA,IAAA,CAAK,MAAM,CAG1BD,EAAAA,CAAAA,CAAK,UAAW,CAAA,IAAA,CAAO,CACrB,IAAA,CAAM,OACR,CAMEvhB,CAAAA,CAAAA,CAAU,UAAY,EAAA,MAAA,GACxBuhB,CAAK,CAAA,UAAA,CAAW,QAAUF,EAAuB,CAAA,CAC/C,UAAYrhB,CAAAA,CAAAA,CAAU,UAAW,CAAA,MACnC,CAAC,CAEGuhB,CAAAA,CAAAA,CAAK,WAAW,OAAQ,CAAA,QAAA,EAC1BC,EAAa,IAAK,CAAA,SAAS,CAI3BxhB,CAAAA,CAAAA,CAAAA,CAAU,UAAY,EAAA,IAAA,EACxBuhB,EAAK,UAAW,CAAA,IAAA,CAAOF,EAAuB,CAAA,CAC5C,UAAYrhB,CAAAA,CAAAA,CAAU,WAAW,IACnC,CAAC,CAEGuhB,CAAAA,CAAAA,CAAK,UAAW,CAAA,IAAA,CAAK,UACvBC,CAAa,CAAA,IAAA,CAAK,MAAM,CAG1BD,EAAAA,CAAAA,CAAK,WAAW,IAAO,CAAA,CACrB,IAAM,CAAA,OACR,CAGEvhB,CAAAA,CAAAA,CAAU,YAAY,KACxBuhB,EAAAA,CAAAA,CAAK,WAAW,KAAQF,CAAAA,EAAAA,CAAuB,CAC7C,UAAYrhB,CAAAA,CAAAA,CAAU,UAAW,CAAA,KACnC,CAAC,CAAA,CAEGuhB,EAAK,UAAW,CAAA,KAAA,CAAM,UACxBC,CAAa,CAAA,IAAA,CAAK,OAAO,CAG3BD,EAAAA,CAAAA,CAAK,UAAW,CAAA,KAAA,CAAQ,CACtB,IAAA,CAAM,OACR,CAGFA,CAAAA,CAAAA,CAAK,UAAW,CAAA,GAAA,CAAM,CACpB,KAAA,CAAOvhB,EAAU,IACjB,CAAA,IAAA,CAAM,QACR,CAAA,CACAwhB,CAAa,CAAA,IAAA,CAAK,KAAK,CAEvBD,CAAAA,CAAAA,CAAK,SAAWC,CAEhB,CAAA,IAAMniB,EAAaU,CAAK,CAAA,UAAA,CAAW,CACjC,IAAA,CAAMR,CAAe,CAAA,CAAE,GAAIS,CAAU,CAAA,EAAA,CAAI,IAAM,CAAA,MAAO,CAAC,CAAA,CACvD,OAAQ,IACR,CAAA,SAAA,CAAW,MACb,CAAC,CACK1M,CAAAA,CAAAA,CAAO8sB,EAAa,CACxB,OAAA,CAAAtgB,EACA,MAAAvS,CAAAA,CAAAA,CACA,OAAQg0B,CACR,CAAA,KAAA,CACEh0B,CAAO,CAAA,yBAAA,GAA8B,KACjC,CAAA,MAAA,CACA,CACE,WAAa,CAAA,OACf,CACR,CAAC,CAED,CAAA,GAAI+F,EAAM,CACR,IAAMlE,CAAO6M,CAAAA,CAAAA,CAAS,oBAAqB,CAAA,CACzC,WAAY,IACZ,CAAA,IAAA,CAAMoD,EAAW,IAAQ,EAAA,EAAA,CACzB,KAAA/L,CACF,CAAC,CACDyM,CAAAA,CAAAA,CAAK,GAAI3Q,CAAAA,CAAI,EACf,CACF,CAAA,CAEMqyB,GAAkB,CAAC,CACvB,QAAA3hB,CACA,CAAA,SAAA,CAAAE,CACA,CAAA,MAAA,CAAAzS,CACF,CAAA,GAIM,CACJ+zB,EAAoB,CAAA,CAClB,QAAAxhB,CACA,CAAA,SAAA,CAAAE,EACA,MAAAzS,CAAAA,CACF,CAAC,CAAA,CAED,IAAMwS,CAAAA,CAAOD,EAAQ,IAAK,CAAA,CAAE,EAAIJ,CAAAA,CAAQ,CAAC,CAAA,CAEnC,CAAE,KAAAjT,CAAAA,CAAAA,CAAO,MAAAsmB,CAAAA,CAAAA,CAAQ,QAAAzmB,CAAAA,CAAAA,CAAU,UAAA0mB,CAAU,CAAA,CACzCF,GAAsB9S,CAAS,CAAA,CAEjC,GAAI+S,CAAQ,CAAA,CACV,IAAM2O,CAAAA,CAAmB3hB,CAAK,CAAA,UAAA,CAAW,CACvC,IAAMR,CAAAA,CAAAA,CAAe,CAAE,EAAA,CAAIS,CAAU,CAAA,EAAA,CAAI,KAAM,QAAS,CAAC,CACzD,CAAA,MAAA,CAAQ,IACR,CAAA,SAAA,CAAW,MACb,CAAC,CAAA,CACD,GAAI0hB,CAAiB,CAAA,IAAA,CAAM,CACzB,IAAMpuB,CAAAA,CAAO8sB,CAAa,CAAA,CACxB,OAAAtgB,CAAAA,CAAAA,CACA,OAAAvS,CACA,CAAA,MAAA,CAAQwlB,CACR,CAAA,KAAA,CACExlB,CAAO,CAAA,yBAAA,GAA8B,MACjC,MACA,CAAA,CACE,WAAa,CAAA,MACf,CACR,CAAC,EAED,GAAI+F,CAAAA,CAAM,CACR,IAAMlE,CAAAA,CAAO6M,EAAS,oBAAqB,CAAA,CACzC,UAAY,CAAA,IAAA,CACZ,IAAMylB,CAAAA,CAAAA,CAAiB,KACvB,IAAApuB,CAAAA,CACF,CAAC,CACDyM,CAAAA,CAAAA,CAAK,IAAI3Q,CAAI,EACf,CAEA,GAAI3C,CAAO,CAAA,CACT,IAAM0T,CAAkBJ,CAAAA,CAAAA,CAAK,WAAW,CACtC,IAAA,CAAMR,EAAe,CAAE,EAAA,CAAIS,CAAU,CAAA,EAAA,CAAI,IAAM,CAAA,OAAQ,CAAC,CACxD,CAAA,MAAA,CAAQ,IACR,CAAA,SAAA,CAAW,MACb,CAAC,EACD,GAAIG,CAAAA,CAAgB,IAAM,CAAA,CACxB,IAAMwhB,CAAAA,CAAa1lB,EAAS,iBAAkB,CAAA,CAC5C,SAAUylB,CAAiB,CAAA,IAC7B,CAAC,CACKE,CAAAA,CAAAA,CAAYhzB,kBAAG,CAAA,OAAA,CAAQ,sBAC3BA,CAAAA,kBAAAA,CAAG,WAAW,YACd+yB,CAAAA,CACF,CACMvyB,CAAAA,CAAAA,CAAO6M,CAAS,CAAA,oBAAA,CAAqB,CACzC,UAAY,CAAA,IAAA,CACZ,IAAMkE,CAAAA,CAAAA,CAAgB,IACtB,CAAA,IAAA,CAAMlE,EAAS,qBAAsB,CAAA,CACnC,UAAW2lB,CACX,CAAA,UAAA,CAAYD,CACd,CAAC,CACH,CAAC,CAAA,CACD5hB,CAAK,CAAA,GAAA,CAAI3Q,CAAI,EACf,CACF,CACF,CACF,CAEA,GAAI4jB,EAAW,CACb,IAAM6O,CAAsB9hB,CAAAA,CAAAA,CAAK,UAAW,CAAA,CAC1C,KAAMR,CAAe,CAAA,CAAE,GAAIS,CAAU,CAAA,EAAA,CAAI,KAAM,WAAY,CAAC,CAC5D,CAAA,MAAA,CAAQ,IACR,CAAA,SAAA,CAAW,MACb,CAAC,CAAA,CACD,GAAI6hB,CAAoB,CAAA,IAAA,CAAM,CAC5B,IAAMvuB,CAAAA,CAAO8sB,CAAa,CAAA,CACxB,OAAAtgB,CAAAA,CAAAA,CACA,OAAAvS,CACA,CAAA,MAAA,CAAQylB,EACR,KACEzlB,CAAAA,CAAAA,CAAO,4BAA8B,KACjC,CAAA,MAAA,CACA,CACE,WAAA,CAAa,MACf,CACR,CAAC,CAED,CAAA,GAAI+F,CAAM,CAAA,CACR,IAAMlE,CAAAA,CAAO6M,EAAS,oBAAqB,CAAA,CACzC,UAAY,CAAA,IAAA,CACZ,IAAM4lB,CAAAA,CAAAA,CAAoB,KAC1B,IAAAvuB,CAAAA,CACF,CAAC,CACDyM,CAAAA,CAAAA,CAAK,IAAI3Q,CAAI,EACf,CAEA,GAAI9C,CAAU,CAAA,CACZ,IAAM+T,CAAqBN,CAAAA,CAAAA,CAAK,UAAW,CAAA,CACzC,IAAMR,CAAAA,CAAAA,CAAe,CAAE,EAAIS,CAAAA,CAAAA,CAAU,EAAI,CAAA,IAAA,CAAM,UAAW,CAAC,EAC3D,MAAQ,CAAA,IAAA,CACR,UAAW,MACb,CAAC,EACD,GAAIK,CAAAA,CAAmB,IAAM,CAAA,CAC3B,IAAMyhB,CAAAA,CAAgB7lB,EAAS,iBAAkB,CAAA,CAC/C,QAAU4lB,CAAAA,CAAAA,CAAoB,IAChC,CAAC,EACKD,CAAYhzB,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,sBAAA,CAC3BA,kBAAG,CAAA,UAAA,CAAW,aACdkzB,CACF,CAAA,CACM1yB,EAAO6M,CAAS,CAAA,oBAAA,CAAqB,CACzC,UAAY,CAAA,IAAA,CACZ,IAAMoE,CAAAA,CAAAA,CAAmB,IACzB,CAAA,IAAA,CAAMpE,EAAS,qBAAsB,CAAA,CACnC,UAAW2lB,CACX,CAAA,UAAA,CAAYE,CACd,CAAC,CACH,CAAC,CAAA,CACD/hB,CAAK,CAAA,GAAA,CAAI3Q,CAAI,EACf,CACF,CACF,CACF,CACF,EAEagxB,CAAe,CAAA,CAAC,CAC3B,IAAA,CAAA9iB,CACA,CAAA,OAAA,CAAAwC,EACA,SAAAgD,CAAAA,CAAAA,CAAY,EAAC,CACb,MAAAvV,CAAAA,CAAAA,CACA,OAAAwU,CACA,CAAA,KAAA,CAAAsD,CACF,CAAA,GAO+B,CAC7B,IAAMtF,EAAOD,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAIJ,CAAAA,CAAQ,CAAC,CAErCpM,CAAAA,CAAAA,CAEJ,GAAIyO,CAAAA,CAAO,IAAM,CAAA,CACf,IAAMuI,CAAYxK,CAAAA,CAAAA,CAAQ,YAA8BiC,CAAAA,CAAAA,CAAO,IAAI,CAAA,CAC7DggB,EAAWxC,EAAW,CAAA,CAC1B,IAAMxd,CAAAA,CAAAA,CAAO,IACb,CAAA,WAAA,CAAauI,EAAU,YAAc,EAAA,MAAA,CACjCjF,GAAO,WACP,CAAA,MAAA,CACJ,OAAA9X,CACF,CAAC,CACK8R,CAAAA,CAAAA,CAAaU,CAAK,CAAA,UAAA,CAAW,CACjC,IAAMgiB,CAAAA,CAAAA,CACN,MAAQ,CAAA,IAAA,CACR,SAAW,CAAA,MACb,CAAC,CACDzuB,CAAAA,CAAAA,CAAO2I,CAAS,CAAA,iBAAA,CAAkB,CAChC,QAAA,CAAUoD,EAAW,IAAQ,EAAA,EAC/B,CAAC,EACH,CAAA,KAAA,GAAW0C,EAAO,IAChBzO,CAAAA,CAAAA,CAAO8tB,EAAuB,CAAA,CAC5B,IAAA9jB,CAAAA,CAAAA,CACA,QAAAwC,CACA,CAAA,SAAA,CAAAgD,EACA,MAAAvV,CAAAA,CAAAA,CACA,OAAAwU,CACA,CAAA,KAAA,CAAAsD,CACF,CAAC,CACQtD,CAAAA,KAAAA,GAAAA,CAAAA,CAAO,MAEhB,GADAA,CAAAA,CAASmQ,GAAkB,CAAE,MAAA,CAAAnQ,CAAO,CAAC,CAAA,CACjCA,CAAO,CAAA,KAAA,CAAO,CAChB,IAAMqU,EAAgC,EAAC,CAEvC,IAAW9e,IAAAA,CAAAA,IAAQyK,CAAO,CAAA,KAAA,CAAO,CAC/B,IAAMzO,CAAAA,CAAO8sB,CAAa,CAAA,CACxB,OAAAtgB,CAAAA,CAAAA,CACA,UAAAgD,CACA,CAAA,MAAA,CAAAvV,EACA,MAAQ+J,CAAAA,CAAAA,CACR,MAAA+N,CACF,CAAC,CACG/R,CAAAA,CAAAA,EACF8iB,CAAU,CAAA,IAAA,CAAK9iB,CAAI,EAEvB,CAEAA,CACEyO,CAAAA,CAAAA,CAAO,eAAoB,GAAA,KAAA,CACvB9F,EAAS,oBAAqB,CAAA,CAAE,KAAOma,CAAAA,CAAU,CAAC,CAAA,CAClDna,EAAS,aAAc,CAAA,CAAE,MAAOma,CAAU,CAAC,EACnD,CACE9iB,KAAAA,CAAAA,CAAO8sB,CAAa,CAAA,CAClB,OAAAtgB,CAAAA,CAAAA,CACA,UAAAgD,CACA,CAAA,MAAA,CAAAvV,CACA,CAAA,MAAA,CAAAwU,CACA,CAAA,KAAA,CAAAsD,CACF,CAAC,CAAA,CAAA,KAIH/R,CAAO8tB,CAAAA,EAAAA,CAAuB,CAC5B,OAAA,CAAAthB,EACA,SAAAgD,CAAAA,CAAAA,CACA,OAAAvV,CACA,CAAA,MAAA,CAAQ,CACN,IAAM,CAAA,SACR,CACA,CAAA,KAAA,CAAA8X,CACF,CAAC,EAIH,GAAI/H,CAAAA,EAAQD,GAAsBC,CAAI,CAAA,CAAG,CAEvC,GAAIwF,CAAAA,CAAU,MAAQ,CAAA,CACpB,IAAMzD,CAAAA,CAAaU,EAAK,UAAW,CAAA,CACjC,KAAAzC,CACA,CAAA,MAAA,CAAQ,KACR,SAAW,CAAA,OACb,CAAC,CAAA,CACKlO,CAAO6M,CAAAA,CAAAA,CAAS,qBAAqB,CACzC,IAAA,CAAMoD,CAAW,CAAA,IAAA,EAAQ,EACzB,CAAA,UAAA,CAAYyD,CACd,CAAC,CAAA,CACD/C,CAAK,CAAA,GAAA,CAAI3Q,CAAI,EACf,CAGA,GAAI2S,CAAAA,CAAO,OAAS,MAAUzO,EAAAA,CAAAA,CAAM,CAClC,IAAM+L,CAAAA,CAAaU,CAAK,CAAA,UAAA,CAAW,CACjC,IAAA,CAAAzC,EACA,MAAQ,CAAA,IAAA,CACR,SAAW,CAAA,MACb,CAAC,CAAA,CACKlO,EAAO6M,CAAS,CAAA,oBAAA,CAAqB,CACzC,OAAA,CAASkM,EAAiB,CAAA,CAAE,OAAApG,CAAO,CAAC,EACpC,UAAY,CAAA,IAAA,CACZ,KAAM1C,CAAW,CAAA,IAAA,EAAQ,EACzB,CAAA,IAAA,CAAA/L,CACF,CAAC,EACDyM,CAAK,CAAA,GAAA,CAAI3Q,CAAI,EACf,CACF,CAEA,OAAOkE,CACT,CAAA,CAEamP,EAAkC,CAAA,CAAC,CAAE,OAAA,CAAA3C,EAAS,MAAAvS,CAAAA,CAAO,IAAM,CAStE,IAAMqT,EAROd,CAAQ,CAAA,UAAA,CAAW,CAC9B,eAAA,CAAiBvS,CAAO,CAAA,eAAA,CACxB,GAAImS,CACJ,CAAA,cAAA,CAAgBnS,EAAO,cACvB,CAAA,IAAA,CAAMA,EAAO,MACf,CAAC,CAG0B,CAAA,UAAA,CAAW,CACpC,IAAA,CAAM,gBACN,MAAQ,CAAA,IAAA,CACR,UAAW,MACb,CAAC,EAEDuS,CAAQ,CAAA,SAAA,CAAU,QAAU,CAAA,CAAC,CAAE,IAAA,CAAAxC,EAAM,MAAAyE,CAAAA,CAAO,CAAM,GAAA,CAChD,GACE,CAACA,EAAO,YAAc,EAAA,MAAA,EACtBxU,CAAO,CAAA,yBAAA,GAA8B,KACrC,CAAA,CACA6yB,EAAa,CACX,IAAA,CAAA9iB,EACA,OAAAwC,CAAAA,CAAAA,CACA,OAAAvS,CACA,CAAA,MAAA,CAAAwU,CACA,CAAA,KAAA,CAAO,MACT,CAAC,EACD,MACF,CAIAqe,CAAa,CAAA,CACX,IAAMb,CAAAA,EAAAA,CAAW,CACf,IAAAjiB,CAAAA,CAAAA,CACA,WAAa,CAAA,MAAA,CACb,MAAA/P,CAAAA,CACF,CAAC,CACD,CAAA,OAAA,CAAAuS,EACA,MAAAvS,CAAAA,CAAAA,CACA,OAAAwU,CACA,CAAA,KAAA,CAAO,CACL,WAAA,CAAa,MACf,CACF,CAAC,CACDqe,CAAAA,CAAAA,CAAa,CACX,IAAA,CAAMb,EAAW,CAAA,CACf,KAAAjiB,CACA,CAAA,WAAA,CAAa,OACb,CAAA,MAAA,CAAA/P,CACF,CAAC,EACD,OAAAuS,CAAAA,CAAAA,CACA,OAAAvS,CACA,CAAA,MAAA,CAAAwU,EACA,KAAO,CAAA,CACL,WAAa,CAAA,OACf,CACF,CAAC,EACH,CAAC,CAAA,CAEDjC,EAAQ,SAAU,CAAA,WAAA,CAAa,CAAC,CAAE,IAAA,CAAAxC,CAAM,CAAA,SAAA,CAAA1K,CAAU,CAAA,GAAM,CACtDwtB,CAAa,CAAA,CACX,KAAA9iB,CACA,CAAA,OAAA,CAAAwC,EACA,MAAAvS,CAAAA,CAAAA,CACA,MAAQqF,CAAAA,CAAAA,CAAU,MAClB,CAAA,KAAA,CAAO,MACT,CAAC,EACH,CAAC,CAAA,CAEDkN,CAAQ,CAAA,SAAA,CAAU,cAAe,CAAC,CAAE,IAAAxC,CAAAA,CAAAA,CAAM,WAAAoO,CAAAA,CAAY,IAAM,CAC1D0U,CAAAA,CAAa,CACX,IAAA9iB,CAAAA,CAAAA,CACA,QAAAwC,CACA,CAAA,MAAA,CAAAvS,CACA,CAAA,MAAA,CAAQme,CAAY,CAAA,MAAA,CACpB,MACEne,CAAO,CAAA,yBAAA,GAA8B,KACjC,CAAA,MAAA,CACA,CACE,WAAA,CAAa,OACf,CACR,CAAC,EACH,CAAC,CAEDuS,CAAAA,CAAAA,CAAQ,UAAU,WAAa,CAAA,CAAC,CAAE,SAAAE,CAAAA,CAAU,IAAM,CAChDyhB,EAAAA,CAAgB,CACd,OAAA,CAAA3hB,CACA,CAAA,SAAA,CAAAE,EACA,MAAAzS,CAAAA,CACF,CAAC,EACH,CAAC,CAAA,CAED,IAAMiT,CAAkC,CAAA,EAExCV,CAAAA,CAAAA,CAAQ,SAAU,CAAA,QAAA,CAAU,CAAC,CAAE,MAAA,CAAAsf,CAAO,CAAM,GAAA,CAC1C5e,EAAQ,IAAK4e,CAAAA,CAAM,EACrB,CAAC,CAEDtf,CAAAA,CAAAA,CAAQ,UAAU,OAAS,CAAA,IAAM,CAC/Buf,EAAoB,CAAA,CAClB,QAAAvf,CACA,CAAA,UAAA,CAAYc,CACZ,CACA,OAAA,CAAAJ,CACF,CAAC,EACH,CAAC,EACH,CAAA,CC5wCO,IAAMiB,EAAuC,CAAA,CAClD,QAAUgB,CAAAA,EAAAA,CACV,cAAgBgP,CAAAA,EAAAA,CAChB,MAAO,KACP,CAAA,SAAA,CAAW,sBACX,CAAA,eAAA,CAAiB,IACjB,CAAA,iBAAA,CAAmB,MACnB,cAAgB,CAAA,YAAA,CAChB,IAAM,CAAA,qBAAA,CACN,MAAQ,CAAA,OAAA,CACR,0BAA2B,OAC3B,CAAA,mBAAA,CAAqB,mBACrB,KAAO,CAAA,UAAA,CACP,KAAM,KACN,CAAA,mBAAA,CAAqB,kBACvB,CAAA,CCVO,IAAMuQ,EAAAA,CAAc,CAAC,CAC1B,OAAAliB,CAAAA,CAAAA,CACA,UAAAE,CACA,CAAA,MAAA,CAAAzS,CACF,CAAA,GAIM,CACJ,IAAMwS,EAAOD,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAIvS,CAAAA,CAAAA,CAAO,IAAK,CAAC,CAAA,CAO7C,OALiB2tB,EAAAA,CAAqB,CACpC,OAAA,CAAApb,EACA,IAAAC,CAAAA,CAAAA,CACA,SAAAC,CAAAA,CACF,CAAC,CAEH,EAEaiiB,EAAe,CAAA,CAAC,CAC3B,OAAA,CAAAniB,CACA,CAAA,SAAA,CAAAE,EACA,MAAAzS,CAAAA,CACF,IAIM,CACJ,IAAMwS,EAAOD,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAIvS,CAAO,CAAA,IAAK,CAAC,CAEzC20B,CAAAA,CAAAA,CAAoC,CACtC,MAAQ,CAAA,IAAA,CACR,KAHsBhiB,EAAsB,CAAA,CAAE,OAAAJ,CAAAA,CAAAA,CAAS,IAAAC,CAAAA,CAAAA,CAAM,UAAAC,CAAU,CAAC,EAGlD,IAAQ,EAAA,EAChC,EASA,GARKkiB,CAAAA,CAAU,IACbA,GAAAA,CAAAA,CAAYniB,CAAK,CAAA,MAAA,CAAO,CACtB,MAAQ,CAAA,IAAA,CACR,MAAQxS,CAAAA,CAAAA,CAAO,IACf,CAAA,IAAA,CAAM,cACR,CAAC,CAAA,CAAA,CAEYF,CAAgByS,CAAAA,CAAAA,CAAQ,MAAM,CAAA,CAClC,OAAS,uBAAyB,CAAA,CAC3C,IAAMqiB,CAAapiB,CAAAA,CAAAA,CAAK,OAAO,CAC7B,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQ,OACR,CAAA,IAAA,CAAM,YACR,CAAC,CAAA,CACDmiB,CAAY,CAAA,CACV,GAAGC,CAAAA,CACH,KAAM,CAAGA,EAAAA,CAAAA,CAAW,IAAI,CAAA,CAAA,EAAID,CAAU,CAAA,IAAI,GAC5C,EACF,CACA,OAAOA,CACT,CAAA,CAEaE,GAAkB,CAAC,CAC9B,OAAAtiB,CAAAA,CAAAA,CACA,SAAAE,CAAAA,CAAAA,CACA,OAAAzS,CACF,CAAA,GAIM,CACJ,IAAMwS,CAAOD,CAAAA,CAAAA,CAAQ,KAAK,CAAE,EAAA,CAAIvS,CAAO,CAAA,IAAK,CAAC,CAAA,CAO7C,OAN2B6S,EAAyB,CAAA,CAClD,QAAAN,CACA,CAAA,IAAA,CAAAC,EACA,SAAAC,CAAAA,CACF,CAAC,CAAA,CACuC,IAAQ,EAAA,SAElD,EC1EA,IAAMqiB,EAAAA,CAAmB,iBACZC,EAAe,CAAA,UAAA,CACtBC,GAAe,UAEfC,CAAAA,EAAAA,CAAqBvmB,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,UAAW,CAAC,CAAA,CAC7DwmB,GAAoBxmB,CAAS,CAAA,UAAA,CAAW,CAAE,IAAM,CAAA,SAAU,CAAC,CAAA,CAEpDymB,EAAyB,CAAA,CAAC,CACrC,OAAA5iB,CAAAA,CAAAA,CACA,MAAAvS,CAAAA,CACF,CAGM,GAAA,CACJ,IAAMwS,CAAOD,CAAAA,CAAAA,CAAQ,IAAK,CAAA,CAAE,EAAIvS,CAAAA,CAAAA,CAAO,IAAK,CAAC,CAAA,CAEvCo1B,EAA2B5iB,CAAK,CAAA,UAAA,CAAW,CAC/C,IAAM,CAAA,CAAA,KAAA,EAAQsiB,EAAgB,CAAA,CAAA,CAC9B,MAAQ,CAAA,IAAA,CACR,UAAW,OACb,CAAC,CAED,CAAA,GAAIM,CAAyB,CAAA,IAAA,CAAM,CACjC,IAAMtuB,CAAAA,CAAa4H,CAAS,CAAA,qBAAA,CAAsB,CAChD,SAAA,CAAWA,EAAS,eAAgB,CAAA,CAClC,QAASA,CAAS,CAAA,GAAA,CAAI,OAAO,CAAC,CAChC,CAAC,CAAA,CACD,UAAYA,CAAAA,CAAAA,CAAS,kBAAkB,CACrC,aAAA,CAAe,CAACA,CAAAA,CAAS,iBAAkB,CAAA,CAAE,SAAUsmB,EAAa,CAAC,CAAC,CAAA,CACtE,QAAUD,CAAAA,EACZ,CAAC,CACH,CAAC,EAEKM,CAAK3mB,CAAAA,CAAAA,CAAS,cAAc,CAChC,UAAA,CAAYA,CAAS,CAAA,aAAA,CAAc,CACjC,SAAA,CAAW,KACX,UAAY,CAAA,CACV,CACE,IAAM,CAAA,IAAA,CACN,KAAMA,CAAS,CAAA,iBAAA,CAAkB,CAAE,QAAA,CAAU,QAAS,CAAC,CACzD,CACA,CAAA,CACE,WAAY,KACZ,CAAA,IAAA,CAAM,UACN,IAAMA,CAAAA,CAAAA,CAAS,iBAAkB,CAAA,CAAE,QAAUsmB,CAAAA,EAAa,CAAC,CAC7D,CAAA,CACA,CACE,UAAA,CAAY,KACZ,CAAA,IAAA,CAAM,WACN,IAAMtmB,CAAAA,CAAAA,CAAS,iBAAkB,CAAA,CAAE,QAAU,CAAA,SAAU,CAAC,CAC1D,CACF,EACA,UAAYA,CAAAA,CAAAA,CAAS,cAAc,CACjC,KAAA,CAAO,CAAC5H,CAAU,CACpB,CAAC,EACD,UAAY,CAAA,CACV4H,CAAS,CAAA,aAAA,CAAc,CACrB,SAAA,CAAW5H,EACX,UAAY4H,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CACpC,SAAW,CAAA,KAAA,CACX,IAAK,CACH,CACE,IAAK,KACL,CAAA,KAAA,CAAOA,EAAS,UAAW,CAAA,CAAE,IAAM,CAAA,IAAK,CAAC,CAC3C,EACA,CACE,GAAA,CAAK/O,CAAoB4S,CAAAA,CAAAA,CAAQ,MAAM,CAAA,CACvC,MAAO7D,CAAS,CAAA,UAAA,CAAW,CACzB,IAAA,CAAM,CAAkD/O,+CAAAA,EAAAA,CAAAA,CAAoB4S,EAAQ,MAAM,CAAC,EAC7F,CAAC,CACH,CACF,CACF,CAAC,CACD,CAAA,IAAA,CAAM,QACN,CAAA,QAAA,CAAUzL,CACZ,CAAC,CAAA,CACD4H,EAAS,WAAY,CAAA,CACnB,WAAYumB,EACZ,CAAA,aAAA,CAAevmB,CAAS,CAAA,KAAA,CAAM,CAC5B,UAAA,CAAY,CACVA,CAAS,CAAA,qBAAA,CAAsB,CAC7B,UAAYA,CAAAA,CAAAA,CAAS,iBAAiB,CACpC,IAAA,CAAMA,CAAS,CAAA,wBAAA,CAAyB,CACtC,UAAA,CAAY,SACZ,IAAM,CAAA,WACR,CAAC,CAAA,CACD,KAAOumB,CAAAA,EACT,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACDvmB,CAAAA,CAAAA,CAAS,YAAY,CACnB,UAAA,CAAYA,EAAS,wBAAyB,CAAA,CAC5C,UAAYwmB,CAAAA,EAAAA,CACZ,UAAY,CAAA,IAAA,CACZ,KAAMxmB,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,MAAO,CAAC,CAC5C,CAAC,CAAA,CACD,aAAeA,CAAAA,CAAAA,CAAS,KAAM,CAAA,CAC5B,WAAY,CACVA,CAAAA,CAAS,sBAAsB,CAC7B,UAAA,CAAYA,EAAS,gBAAiB,CAAA,CACpC,IAAMA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CACtC,WAAY,QACZ,CAAA,IAAA,CAAM,MACR,CAAC,CACD,CAAA,KAAA,CAAOA,EAAS,wBAAyB,CAAA,CACvC,UAAY,CAAA,SAAA,CACZ,IAAM,CAAA,MACR,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAAA,CACDA,CAAS,CAAA,WAAA,CAAY,CACnB,UAAYA,CAAAA,CAAAA,CAAS,yBAAyB,CAC5C,UAAA,CAAYwmB,GACZ,UAAY,CAAA,IAAA,CACZ,IAAMxmB,CAAAA,CAAAA,CAAS,UAAW,CAAA,CAAE,KAAM,SAAU,CAAC,CAC/C,CAAC,CAAA,CACD,cAAeA,CAAS,CAAA,KAAA,CAAM,CAC5B,UAAA,CAAY,CACVA,CAAAA,CAAS,sBAAsB,CAC7B,UAAA,CAAYA,CAAS,CAAA,gBAAA,CAAiB,CACpC,IAAA,CAAMA,EAAS,wBAAyB,CAAA,CACtC,UAAY,CAAA,QAAA,CACZ,IAAM,CAAA,SACR,CAAC,CACD,CAAA,KAAA,CAAOA,EAAS,wBAAyB,CAAA,CACvC,WAAY,SACZ,CAAA,IAAA,CAAM,SACR,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,EACDA,CAAS,CAAA,WAAA,CAAY,CACnB,UAAA,CAAYA,CAAS,CAAA,wBAAA,CAAyB,CAC5C,UAAYwmB,CAAAA,EAAAA,CACZ,WAAY,IACZ,CAAA,IAAA,CAAMxmB,EAAS,UAAW,CAAA,CAAE,IAAM,CAAA,MAAO,CAAC,CAC5C,CAAC,CACD,CAAA,aAAA,CAAeA,CAAS,CAAA,KAAA,CAAM,CAC5B,UAAA,CAAY,CACVA,CAAS,CAAA,qBAAA,CAAsB,CAC7B,UAAA,CAAYA,CAAS,CAAA,gBAAA,CAAiB,CACpC,IAAMA,CAAAA,CAAAA,CAAS,yBAAyB,CACtC,UAAA,CAAY,SACZ,IAAM,CAAA,MACR,CAAC,CAAA,CACD,KAAOA,CAAAA,CAAAA,CAAS,yBAAyB,CACvC,UAAA,CAAY,UACZ,IAAM,CAAA,MACR,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,EACDA,CAAS,CAAA,WAAA,CAAY,CACnB,UAAYA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC5C,UAAYwmB,CAAAA,EAAAA,CACZ,WAAY,IACZ,CAAA,IAAA,CAAMxmB,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,OAAQ,CAAC,CAC7C,CAAC,CAAA,CACD,aAAeA,CAAAA,CAAAA,CAAS,MAAM,CAC5B,UAAA,CAAY,CACVA,CAAS,CAAA,qBAAA,CAAsB,CAC7B,UAAYA,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CACpC,IAAMA,CAAAA,CAAAA,CAAS,yBAAyB,CACtC,UAAA,CAAY,SACZ,IAAM,CAAA,OACR,CAAC,CACD,CAAA,KAAA,CAAOA,CAAS,CAAA,wBAAA,CAAyB,CACvC,UAAA,CAAY,UACZ,IAAM,CAAA,OACR,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,EACDA,CAAS,CAAA,eAAA,CAAgB,CACvB,UAAA,CAAYA,CAAS,CAAA,sBAAA,CAAuB,CAC1C,QAAU,CAAA,CAACA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,QAAS,CAAC,CAAC,CACpD,CAAC,CACH,CAAC,CACH,CAAA,CACA,KAAO,CAAA,CACL,CACE,OAAA,CAASA,EAAS,iBAAkB,CAAA,CAClC,SAAUA,CAAS,CAAA,UAAA,CAAW,CAC5B,IAAMY,CAAAA,CAAAA,CAAU,OAAQ,CAAA,IAC1B,CAAC,CACH,CAAC,CACD,CAAA,IAAA,CAAM0lB,EACR,CACF,CACF,CAAC,CACD,CAAA,IAAA,CAAMI,CAAyB,CAAA,IACjC,CAAC,CAAA,CACD5iB,EAAK,GAAI6iB,CAAAA,CAAE,EACb,CACF,CAEMC,CAAAA,EAAAA,CAAwB,CAAC,CAC7B,OAAA,CAAA/iB,CACA,CAAA,EAAA,CAAAN,CACA,CAAA,UAAA,CAAAsjB,EACA,MAAAv1B,CAAAA,CACF,IAKM,CAEJ,IAAMo1B,EADO7iB,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAIvS,CAAO,CAAA,IAAK,CAAC,CACP,CAAA,UAAA,CAAW,CAC/C,IAAA,CAAM,CAAQ80B,KAAAA,EAAAA,EAAgB,GAC9B,SAAW,CAAA,OACb,CAAC,CAAA,CASD,OARqCpmB,CAAAA,CAAS,eAAe,CAC3D,YAAA,CAAc0mB,EAAyB,IAAQ,EAAA,EAAA,CAC/C,WAAY,CACV1mB,CAAAA,CAAS,GAAI,CAAA,MAAA,CAAOuD,CAAE,CAAA,CACtB,UACAsjB,CAAa7mB,CAAAA,CAAAA,CAAS,GAAI,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAI,MAC5C,CACF,CAAC,CAEH,CAAA,CAEa8mB,EAAqB,CAAA,CAAC,CACjC,OAAAjjB,CAAAA,CAAAA,CACA,OAAAvS,CACF,CAAA,GAGM,CACJ,IAAMwS,CAAAA,CAAOD,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAIvS,EAAO,IAAK,CAAC,EAEvCuH,CAAyB,CAAA,CAC7B,CACE,IAAM,CAAA,KAAA,CACN,IAAMmH,CAAAA,CAAAA,CAAS,eAAgB,CAAA,CAC7B,QAAS,QACX,CAAC,CACH,CACA,CAAA,CACE,WAAY,KACZ,CAAA,IAAA,CAAM,WACN,CAAA,IAAA,CAAMA,CAAS,CAAA,eAAA,CAAgB,CAC7B,OAAS,CAAA,SACX,CAAC,CACH,CACF,CAAA,CAEM+mB,EAAe/mB,CAAS,CAAA,oBAAA,CAAqB,CACjD,UAAA,CAAY,IACZ,CAAA,IAAA,CAAMqmB,GACN,IAAMrmB,CAAAA,CAAAA,CAAS,cAAc,CAC3B,KAAA,CAAO,CACLA,CAAS,CAAA,oBAAA,CAAqB,CAC5B,KAAA,CAAO,CACLA,CAAAA,CAAS,kBAAkB,CACzB,QAAA,CAAU,CAAQsmB,KAAAA,EAAAA,EAAY,CAAMr1B,GAAAA,EAAAA,CAAAA,CAAoB4S,EAAQ,MAAM,CAAC,CACzE,0CAAA,CAAA,CAAC,CACD7D,CAAAA,CAAAA,CAAS,kBAAkB,CACzB,UAAA,CAAAnH,EACA,mBAAqB,CAAA,IACvB,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,EACD,cAAgB,CAAA,CACd,CACE,OAAA,CAASmH,CAAS,CAAA,iBAAA,CAAkB,CAClC,QAAUA,CAAAA,CAAAA,CAAS,UAAW,CAAA,CAC5B,IAAMY,CAAAA,CAAAA,CAAU,QAAQ,IAC1B,CAAC,CACH,CAAC,CAAA,CACD,KAAM0lB,EACR,CACF,CACF,CAAC,CACDxiB,CAAAA,CAAAA,CAAK,IAAIijB,CAAY,EACvB,EAEaC,EAA6B,CAAA,CAAC,CACzC,OAAAnjB,CAAAA,CAAAA,CACA,UAAAgjB,CAAAA,CAAAA,CACA,SAAA9iB,CAAAA,CACF,IAKE,CAAG+Z,EAAAA,CAAAA,CAA0B,CAC3B,MAAQja,CAAAA,CAAAA,CAAQ,OAChB,EAAIE,CAAAA,CAAAA,CAAU,EACd,CAAA,SAAA,CAAAA,CACF,CAAC,CAAC,CAAG8iB,EAAAA,CAAAA,CAAa,UAAa,CAAA,EAAE,CAEtBI,QAAAA,CAAAA,CAAAA,EAAAA,CAAoB,CAAC,CAChC,OAAA,CAAApjB,CACA,CAAA,UAAA,CAAAgjB,CACA,CAAA,SAAA,CAAA9iB,EACA,MAAAzS,CAAAA,CAAAA,CACA,aAAA41B,CACF,CAAA,GAMM,CACJ,IAAMpjB,CAAAA,CAAOD,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAIvS,EAAO,IAAK,CAAC,CACvC61B,CAAAA,CAAAA,CAAWpB,EAAY,CAAA,CAAE,QAAAliB,CAAS,CAAA,SAAA,CAAAE,CAAW,CAAA,MAAA,CAAAzS,CAAO,CAAC,EACrDD,CAAO21B,CAAAA,EAAAA,CAA2B,CACtC,OAAAnjB,CAAAA,CAAAA,CACA,WAAAgjB,CACA,CAAA,SAAA,CAAA9iB,CACF,CAAC,CACKqjB,CAAAA,CAAAA,CAAqBtjB,EAAK,UAAW,CAAA,CACzC,IAAM,CAAA,CAAA,WAAA,EAAczS,CAAI,CAAA,CAAA,CACxB,OAAQ,IACR,CAAA,SAAA,CAAW,OACb,CAAC,CAqBD,CAAA,OApBkB2O,EAAS,aAAc,CAAA,CACvC,YAAa,IACb,CAAA,UAAA,CAAYA,EAAS,aAAc,CAAA,CACjC,UAAY,CAAA,CACV,CACE,UAAA,CAAYsW,GAAyBvS,CAAS,CAAA,CAC9C,KAAM,SACN,CAAA,IAAA,CAAMojB,CACR,CACF,CAAA,CACA,UAAYN,CAAAA,CAAAA,CAAaK,CAAe,CAAA,MAAA,CACxC,WAAYN,EAAsB,CAAA,CAChC,QAAA/iB,CACA,CAAA,EAAA,CAAIE,EAAU,EACd,CAAA,UAAA,CAAA8iB,CACA,CAAA,MAAA,CAAAv1B,CACF,CAAC,CACH,CAAC,CAAA,CACD,IAAM81B,CAAAA,CAAAA,CAAmB,IAAQ,EAAA,EACnC,CAAC,CAEH,CAAA,CCnVA,IAAMC,EAAAA,CAAyB,sBACzBC,CAAAA,EAAAA,CAAyB,uBAEzBC,EAA+B,CAAA,CAAC,CACpC,OAAA1jB,CAAAA,CAAAA,CACA,OAAAvS,CACF,CAAA,GAGM,CACJ,IAAMwS,CAAOD,CAAAA,CAAAA,CAAQ,KAAK,CAAE,EAAA,CAAIvS,CAAO,CAAA,IAAK,CAAC,CAAA,CAEvCq1B,EAAK3mB,CAAS,CAAA,aAAA,CAAc,CAChC,UAAA,CAAYA,CAAS,CAAA,aAAA,CAAc,CACjC,SAAW,CAAA,IAAA,CACX,WAAY,CACV,CACE,KAAM,UACN,CAAA,IAAA,CAAMA,CAAS,CAAA,iBAAA,CAAkB,CAC/B,QAAA,CAAU,YAAYY,CAAU,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA,CAC9C,CAAC,CACH,EACA,CACE,IAAA,CAAM,MACN,CAAA,IAAA,CAAMZ,CAAS,CAAA,iBAAA,CAAkB,CAAE,QAAU,CAAA,GAAI,CAAC,CACpD,CACF,EACA,UAAY,CAAA,CACVA,CAAS,CAAA,aAAA,CAAc,CACrB,UAAA,CAAYA,EAAS,UAAW,CAAA,CAC9B,KAAM,aACR,CAAC,EACD,IAAM,CAAA,QACR,CAAC,CAAA,CACDA,CAAS,CAAA,WAAA,CAAY,CACnB,UAAYA,CAAAA,CAAAA,CAAS,yBAAyB,CAC5C,UAAA,CAAYA,EAAS,UAAW,CAAA,CAC9B,IAAM,CAAA,MACR,CAAC,CAAA,CACD,KAAMA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,MAAO,CAAC,CAC5C,CAAC,CAAA,CACD,aAAeA,CAAAA,CAAAA,CAAS,KAAM,CAAA,CAC5B,WAAY,CACVA,CAAAA,CAAS,sBAAsB,CAC7B,UAAA,CAAYA,EAAS,gBAAiB,CAAA,CACpC,IAAMA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CACtC,WAAY,QACZ,CAAA,IAAA,CAAM,MACR,CAAC,CACD,CAAA,KAAA,CAAOA,EAAS,gBAAiB,CAAA,CAC/B,SAAW,CAAA,IAAA,CACX,GAAK,CAAA,CACH,CACE,SAAW,CAAA,KAAA,CACX,OAAQ,kBACV,CAAA,CACA,CACE,SAAW,CAAA,KAAA,CACX,MAAQ,CAAA,WACV,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACDA,CAAAA,CAAAA,CAAS,WAAY,CAAA,CACnB,WAAYA,CAAS,CAAA,wBAAA,CAAyB,CAC5C,UAAYA,CAAAA,CAAAA,CAAS,WAAW,CAC9B,IAAA,CAAM,MACR,CAAC,CACD,CAAA,IAAA,CAAMA,EAAS,UAAW,CAAA,CAAE,KAAM,SAAU,CAAC,CAC/C,CAAC,CAAA,CACD,aAAeA,CAAAA,CAAAA,CAAS,KAAM,CAAA,CAC5B,WAAY,CACVA,CAAAA,CAAS,sBAAsB,CAC7B,UAAA,CAAYA,EAAS,gBAAiB,CAAA,CACpC,IAAMA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CACtC,WAAY,QACZ,CAAA,IAAA,CAAM,SACR,CAAC,CACD,CAAA,KAAA,CAAOA,EAAS,gBAAiB,CAAA,CAC/B,SAAW,CAAA,IAAA,CACX,GAAK,CAAA,CACH,CACE,MAAQ,CAAA,qBACV,EACA,CACE,MAAA,CAAQ,cACV,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAAA,CACDA,EAAS,WAAY,CAAA,CACnB,UAAYA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC5C,WAAYA,CAAS,CAAA,UAAA,CAAW,CAC9B,IAAM,CAAA,MACR,CAAC,CACD,CAAA,IAAA,CAAMA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,MAAO,CAAC,CAC5C,CAAC,CAAA,CACD,aAAeA,CAAAA,CAAAA,CAAS,MAAM,CAC5B,UAAA,CAAY,CACVA,CAAAA,CAAS,qBAAsB,CAAA,CAC7B,WAAYA,CAAS,CAAA,gBAAA,CAAiB,CACpC,IAAMA,CAAAA,CAAAA,CAAS,yBAAyB,CACtC,UAAA,CAAY,QACZ,CAAA,IAAA,CAAM,MACR,CAAC,EACD,KAAOA,CAAAA,CAAAA,CAAS,iBAAiB,CAC/B,SAAA,CAAW,KACX,GAAK,CAAA,CACH,CACE,SAAA,CAAW,KACX,CAAA,MAAA,CAAQ,kBACV,CACA,CAAA,CACE,UAAW,KACX,CAAA,MAAA,CAAQ,WACV,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAAA,CACDA,EAAS,WAAY,CAAA,CACnB,UAAYA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC5C,WAAYA,CAAS,CAAA,UAAA,CAAW,CAC9B,IAAM,CAAA,MACR,CAAC,CACD,CAAA,IAAA,CAAMA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,OAAQ,CAAC,CAC7C,CAAC,CAAA,CACD,aAAeA,CAAAA,CAAAA,CAAS,MAAM,CAC5B,UAAA,CAAY,CACVA,CAAAA,CAAS,qBAAsB,CAAA,CAC7B,WAAYA,CAAS,CAAA,gBAAA,CAAiB,CACpC,IAAMA,CAAAA,CAAAA,CAAS,yBAAyB,CACtC,UAAA,CAAY,QACZ,CAAA,IAAA,CAAM,OACR,CAAC,EACD,KAAOA,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CAC/B,SAAW,CAAA,IAAA,CACX,IAAK,CACH,CACE,SAAW,CAAA,KAAA,CACX,MAAQ,CAAA,mBACV,EACA,CACE,SAAA,CAAW,MACX,MAAQ,CAAA,YACV,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAAA,CACDA,EAAS,cAAe,CAAA,CACtB,UAAYA,CAAAA,CAAAA,CAAS,YAAa,CAAA,CAChC,WAAYA,CAAS,CAAA,YAAA,CAAa,CAChC,UAAYA,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM,QAAS,CAAC,CAClD,CAAA,IAAA,CAAMA,EAAS,eAAgB,CAAA,CAAE,OAAS,CAAA,SAAU,CAAC,CACvD,CAAC,CACD,CAAA,IAAA,CAAMrN,kBAAG,CAAA,OAAA,CAAQ,mBACfqN,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM,MAAO,CAAC,CACtC,CACF,CAAC,CACH,CAAC,CACH,CACA,CAAA,KAAA,CAAO,CACL,CACE,OAAA,CAASA,CAAS,CAAA,iBAAA,CAAkB,CAClC,QAAA,CAAUA,EAAS,UAAW,CAAA,CAC5B,IAAM,CAAA,CAAA,cAAA,EAAiBY,CAAU,CAAA,OAAA,CAAQ,IAAI,CAC/C,4CAAA,CAAA,CAAC,CACH,CAAC,CAAA,CACD,KAAM,GACR,CACF,CACF,CAAC,CACD,CAAA,IAAA,CAAMymB,EACR,CAAC,CAAA,CACDvjB,CAAK,CAAA,GAAA,CAAI6iB,CAAE,EACb,EAEMa,EAAyC,CAAA,CAAC,CAC9C,OAAA,CAAA3jB,CACA,CAAA,SAAA,CAAAE,CACF,CAIE,GAAA,CAAA,EAAG+Z,EAA0B,CAC3B,MAAA,CAAQja,EAAQ,MAChB,CAAA,EAAA,CAAIE,CAAU,CAAA,EAAA,CACd,SAAAA,CAAAA,CACF,CAAC,CAAC,CAAA,eAAA,CAAA,CAES0jB,GAA6B,CAAC,CACzC,QAAA5jB,CACA,CAAA,SAAA,CAAAE,CACA,CAAA,MAAA,CAAAzS,CACA,CAAA,OAAA,CAAAo2B,EACA,KAAAte,CAAAA,CACF,IAMM,CACJ,GACE,CAAC9X,CAAO,CAAA,oBAAA,EACR,CAAE,CAAC,KAAO,CAAA,MAAM,EAAkC,QAASyS,CAAAA,CAAAA,CAAU,MAAM,CAAA,CAE3E,OAAOqF,CAAAA,CAGT,IAAM2F,CAAawH,CAAAA,EAAAA,CAAoB,CAAE,OAAA,CAAA1S,CAAS,CAAA,SAAA,CAAAE,CAAU,CAAC,CAAA,CAE7D,GAAI,CAACgL,CAAAA,CACH,OAAO3F,CAGT,CAAA,IAAMtF,CAAOD,CAAAA,CAAAA,CAAQ,IAAK,CAAA,CAAE,GAAIvS,CAAO,CAAA,IAAK,CAAC,CAAA,CACvC+nB,CAAa/C,CAAAA,EAAAA,CAAyBvS,CAAS,CAEhDqF,CAAAA,CAAAA,CAAM,kBACTA,GAAAA,CAAAA,CAAM,kBAAqB,CAAA,IAAA,CAEtBA,EAAM,+BACT0d,GAAAA,EAAAA,CAAmB,CAAE,OAAAjjB,CAAAA,CAAAA,CAAS,OAAAvS,CAAO,CAAC,CACtCm1B,CAAAA,EAAAA,CAAuB,CAAE,OAAA,CAAA5iB,EAAS,MAAAvS,CAAAA,CAAO,CAAC,CAAA,CAC1C8X,CAAM,CAAA,+BAAA,CAAkC,MAGrCA,CAAM,CAAA,+BAAA,GACTme,EAA6B,CAAA,CAAE,OAAA1jB,CAAAA,CAAAA,CAAS,OAAAvS,CAAO,CAAC,EAChD8X,CAAM,CAAA,+BAAA,CAAkC,MAG1CtF,CAAK,CAAA,MAAA,CAAO,CACV,MAAA,CAAQxS,CAAO,CAAA,IAAA,CACf,KAAMg2B,EACR,CAAC,EAEDle,CAAM,CAAA,gBAAA,CAAmBtF,EAAK,MAAO,CAAA,CACnC,MAAQ,CAAA,IAAA,CACR,MAAQxS,CAAAA,CAAAA,CAAO,KACf,IAAM,CAAA,cACR,CAAC,CAGH8X,CAAAA,CAAAA,CAAAA,CAAM,eAAiB,IAEvB,CAAA,IAAM+d,CAAWpB,CAAAA,EAAAA,CAAY,CAAE,OAAA,CAAAliB,EAAS,SAAAE,CAAAA,CAAAA,CAAW,MAAAzS,CAAAA,CAAO,CAAC,CAAA,CACrD20B,EAAYD,EAAa,CAAA,CAAE,OAAAniB,CAAAA,CAAAA,CAAS,SAAAE,CAAAA,CAAAA,CAAW,OAAAzS,CAAO,CAAC,EACvDq2B,CAAexB,CAAAA,EAAAA,CAAgB,CAAE,OAAAtiB,CAAAA,CAAAA,CAAS,SAAAE,CAAAA,CAAAA,CAAW,MAAAzS,CAAAA,CAAO,CAAC,CAE7D41B,CAAAA,CAAAA,CAAe,CAAGb,EAAAA,EAAY,CAAIc,CAAAA,EAAAA,CAAQ,IAC1CS,CAAsB,CAAA,CAAA,KAAA,EAAQV,CAAY,CAAA,2CAAA,CAAA,CAG1C7vB,CAAO8sB,CAAAA,CAAAA,CAAa,CACxB,OAAAtgB,CAAAA,CAAAA,CACA,OAAQA,CAAQ,CAAA,MAAA,CAAO,QAAQ,qBAAqB,CAAA,CAGpD,MAAQkL,CAAAA,CAAAA,CAAW,MACnB,CAAA,KAAA,CAAO,MACT,CAAC,CAAA,CACK8Y,CAAgBxwB,CAAAA,CAAAA,CAClB,CAAGnE,EAAAA,EAAAA,CAAe,CAChB,IAAMmE,CAAAA,CAAAA,CACN,QAAU,CAAA,IACZ,CAAC,CAAC,MAAMuwB,CAAmB,CAAA,CAAA,CAC3B,GAAGA,CAAmB,CAAA,CAAA,CAEpBz0B,EAAO8zB,EAAkB,CAAA,CAC7B,OAAApjB,CAAAA,CAAAA,CACA,UAAY,CAAA,IAAA,CACZ,UAAAE,CACA,CAAA,MAAA,CAAAzS,EACA,YAAA41B,CAAAA,CACF,CAAC,CACDpjB,CAAAA,CAAAA,CAAK,GAAI3Q,CAAAA,CAAI,CAEb,CAAA,IAAM20B,EAAuBd,EAA2B,CAAA,CACtD,QAAAnjB,CACA,CAAA,UAAA,CAAY,KACZ,SAAAE,CAAAA,CACF,CAAC,CAAA,CACKqjB,CAAqBtjB,CAAAA,CAAAA,CAAK,WAAW,CACzC,IAAA,CAAM,CAAcgkB,WAAAA,EAAAA,CAAoB,CACxC,CAAA,CAAA,SAAA,CAAW,OACb,CAAC,CAAA,CAEKltB,CAAYoF,CAAAA,CAAAA,CAAS,aAAc,CAAA,CAEvC,QAAS,EAAC,CACV,YAAa,IACb,CAAA,UAAA,CAAYA,EAAS,aAAc,CAAA,CACjC,UAAY,CAAA,CACV,CACE,UAAA,CAAAqZ,EACA,IAAM,CAAA,SAAA,CACN,IAAM8N,CAAAA,CACR,CACF,CAAA,CACA,WAAY,CACVnnB,CAAAA,CAAS,kBAAmB,CAAA,CAC1B,IAAM,CAAA,CACJA,EAAS,gBAAiB,CAAA,CACxB,SAAU,CACR,CACE,MAAO,KACP,CAAA,KAAA,CAAO,CAAC,YAAY,CACtB,CACF,EACA,GAAK,CAAA,CACH,CACE,GAAA,CAAK,SACL,CAAA,KAAA,CAAOA,EAAS,aAAc,CAAA,CAC5B,KAAO,CAAA,IAAA,CACP,SAAW,CAAA,IAAA,CACX,WAAY,CACV,CACE,YAAa,CACX,CACE,KAAM,WACR,CAAA,CACA,CACE,IAAA,CAAM,UACR,CAAA,CACA,CACE,IAAM,CAAA,QACR,CACF,CACF,CACF,EACA,UAAY,CAAA,CACVA,CAAS,CAAA,aAAA,CAAc,CACrB,OAAA,CAAS,CACP,CACE,KAAA,CAAO,MACP,KAAO,CAAA,CAAC,YAAY,CACtB,CACF,CACA,CAAA,UAAA,CAAYA,CAAS,CAAA,qBAAA,CAAsB,CACzC,SAAWA,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CACnC,IAAMA,CAAAA,CAAAA,CAAS,iBAAiB,CAC9B,IAAA,CAAM,WACR,CAAC,CACD,CAAA,QAAA,CAAU,MACV,KAAOA,CAAAA,CAAAA,CAAS,IAAI,MAAO,CAAA,QAAQ,CACrC,CAAC,CAAA,CACD,SAAWA,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CACnC,UAAW,IACX,CAAA,GAAA,CAAK,CACH,CACE,GAAK+O,CAAAA,CAAAA,CAAW,GAChB,KAAO/O,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CAC/B,SAAW,CAAA,IAAA,CACX,IAAK,CACH,CACE,IAAK+O,CAAW,CAAA,IAAA,CAChB,MAAO/O,CAAS,CAAA,UAAA,CAAW,CACzB,IAAA,CAAM,WACR,CAAC,CACH,CACF,CACF,CAAC,CACH,CACF,CACF,CAAC,CACD,CAAA,QAAA,CAAUA,CAAS,CAAA,UAAA,CAAW,CAC5B,IAAA,CAAM,WACR,CAAC,CACH,CAAC,CACD,CAAA,IAAA,CAAM,OACN,QAAU4nB,CAAAA,CACZ,CAAC,CAAA,CACD5nB,CAAS,CAAA,aAAA,CAAc,CACrB,UAAYA,CAAAA,CAAAA,CAAS,eAAe,CAClC,YAAA,CAAcqnB,GACd,UAAY,CAAA,CAAC,UAAY,CAAA,MAAM,CACjC,CAAC,EACD,IAAM,CAAA,QACR,CAAC,CACDrnB,CAAAA,CAAAA,CAAS,cAAc,CACrB,WAAA,CAAa,IACb,CAAA,UAAA,CAAYA,CAAS,CAAA,eAAA,CAAgB,CACnC,UAAYA,CAAAA,CAAAA,CAAS,cAAe,CAAA,CAClC,YAAc0nB,CAAAA,CAAAA,CACd,WAAY,CACV1nB,CAAAA,CAAS,gBAAiB,CAAA,CACxB,SAAW,CAAA,IAAA,CACX,IAAK,CACH,CACE,OAAQ,SACV,CAAA,CACA,CACE,MAAQ,CAAA,QACV,CACA,CAAA,CACE,GAAK,CAAA,QAAA,CACL,UAAW,IACX,CAAA,KAAA,CAAOA,CAAS,CAAA,UAAA,CAAW,CACzB,IAAA,CAAM,QACR,CAAC,CACH,CACA,CAAA,CACE,GAAK,CAAA,cAAA,CACL,MAAO,IACT,CACF,CACF,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAAA,CACD,IAAM,CAAA,MACR,CAAC,CACDA,CAAAA,CAAAA,CAAS,cAAe,CAAA,CACtB,UAAY,CAAA,MACd,CAAC,CACH,CACF,CAAC,CACH,CACA,CAAA,CACE,IAAK,UACL,CAAA,KAAA,CAAOA,EAAS,cAAe,CAAA,CAC7B,aAAconB,CAAmB,CAAA,IAAA,EAAQ,EACzC,CAAA,UAAA,CAAY,CAAC,SAAS,CACxB,CAAC,CACH,CACF,CACF,CAAC,CACH,CACA,CAAA,IAAA,CAAME,EAEN,CAAA,KAAA,CAAO,CACLK,CAAAA,CACA1B,EAAU,IACV,CAAA,CAAA,EAAG,OAAO7c,CAAM,CAAA,gBAAA,EAAqB,SAAWA,CAAM,CAAA,gBAAA,CAAmBA,CAAM,CAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA,EAAIue,CAAY,CACpHT,CAAAA,CAAAA,CAAAA,CAAAA,CACAW,CACF,CACF,CAAC,CACH,CACF,CAAC,CAAA,CACD,IAAML,CAAAA,EAAAA,CAAuC,CAC3C,OAAA,CAAA3jB,EACA,SAAAE,CAAAA,CACF,CAAC,CACH,CAAC,EACDD,CAAK,CAAA,GAAA,CAAIlJ,CAAS,EACpB,CC/dA,CAAA,IAAMmtB,GAAoB,iBAEpBC,CAAAA,EAAAA,CAAoC,CAAC,CACzC,OAAAnkB,CAAAA,CAAAA,CACA,UAAAE,CACF,CAAA,GAIE,CAAG+Z,EAAAA,CAAAA,CAA0B,CAC3B,MAAA,CAAQja,EAAQ,MAChB,CAAA,EAAA,CAAIE,EAAU,EACd,CAAA,SAAA,CAAAA,CACF,CAAC,CAAC,CAESkkB,QAAAA,CAAAA,CAAAA,EAAAA,CAAwB,CAAC,CACpC,QAAApkB,CACA,CAAA,SAAA,CAAAE,CACA,CAAA,MAAA,CAAAzS,CACA,CAAA,OAAA,CAAAo2B,EACA,KAAAte,CAAAA,CACF,CAMM,GAAA,CACJ,GACE,CAAC9X,EAAO,eACR,EAAA,CACE,CAAC,QAAU,CAAA,OAAA,CAAS,OAAQ,KAAK,CAAA,CACjC,QAASyS,CAAAA,CAAAA,CAAU,MAAM,CAAA,CAE3B,OAAOqF,CAGT,CAAA,IAAM8e,EACJ52B,CAAO,CAAA,IAAA,GAAS,wCAChBA,CAAO,CAAA,IAAA,GAAS,wBAChBA,EAAAA,CAAAA,CAAO,IAAS,GAAA,uBAAA,CACZ,kBACA,oBAEAwS,CAAAA,CAAAA,CAAOD,EAAQ,IAAK,CAAA,CAAE,GAAIvS,CAAO,CAAA,IAAK,CAAC,CAAA,CAExC8X,CAAM,CAAA,YAAA,GACTA,EAAM,YAAe,CAAA,IAAA,CAErBtF,CAAK,CAAA,MAAA,CAAO,CACV,MAAA,CAAQ,KACR,MAAQxS,CAAAA,CAAAA,CAAO,IACf,CAAA,IAAA,CAAM42B,CACR,CAAC,GAGH9e,CAAM,CAAA,cAAA,CAAiB,KAEvB,IAAM+d,CAAAA,CAAWpB,GAAY,CAAE,OAAA,CAAAliB,CAAS,CAAA,SAAA,CAAAE,CAAW,CAAA,MAAA,CAAAzS,CAAO,CAAC,CAAA,CACrD20B,CAAYD,CAAAA,EAAAA,CAAa,CAAE,OAAA,CAAAniB,EAAS,SAAAE,CAAAA,CAAAA,CAAW,MAAAzS,CAAAA,CAAO,CAAC,CAAA,CACvDq2B,EAAexB,EAAgB,CAAA,CAAE,QAAAtiB,CAAS,CAAA,SAAA,CAAAE,EAAW,MAAAzS,CAAAA,CAAO,CAAC,CAAA,CAE7D62B,CAAe,CAAA,CAAA,EAAGD,CAAa,CAAIP,CAAAA,EAAAA,CAAY,CAAK1B,EAAAA,EAAAA,CAAAA,CAAU,IAAI,CAAA,EAAA,EAAKkB,CAAQ,CAE/E3xB,CAAAA,CAAAA,CAAAA,CAAAA,CAAawK,CAAS,CAAA,aAAA,CAAc,CACxC,UAAA,CAAY,CACV,CACE,UAAA,CAAY,MACZ,IAAM,CAAA,SAAA,CACN,KAAM,CAAWmnB,QAAAA,EAAAA,CAAQ,CAC3B,CAAA,CAAA,CACF,CACA,CAAA,UAAA,CAAYgB,EACZ,UAAY,CAAA,CACVnoB,EAAS,aAAc,CAAA,CACrB,WAAYA,CAAS,CAAA,gBAAA,CAAiB,CACpC,GAAA,CAAK,CACH,CACE,IAAK,YACL,CAAA,KAAA,CAAOA,EAAS,aAAc,CAAA,CAC5B,MAAO,IACP,CAAA,SAAA,CAAW,IACX,CAAA,UAAA,CAAY,CACV,CACE,KAAM,cACR,CACF,CACA,CAAA,UAAA,CAAY,CACVA,CAAAA,CAAS,cAAc,CACrB,WAAA,CAAa,IACb,CAAA,UAAA,CAAYA,CAAS,CAAA,eAAA,CAAgB,CACnC,UAAYA,CAAAA,CAAAA,CAAS,eAAe,CAClC,YAAA,CAAc0nB,EACd,UAAY,CAAA,CACV1nB,CAAS,CAAA,gBAAA,CAAiB,CACxB,SAAA,CAAW,KACX,GAAK,CAAA,CACH,CACE,MAAA,CAAQ,SACV,CAAA,CACA,CACE,MAAQ,CAAA,cACV,CACA,CAAA,CACE,GAAK,CAAA,cAAA,CACL,MAAO,IACT,CACF,CACF,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAAA,CACD,IAAM,CAAA,MACR,CAAC,CACDA,CAAAA,CAAAA,CAAS,cAAe,CAAA,CACtB,UAAY,CAAA,MACd,CAAC,CACH,CACF,CAAC,CACH,CACF,CACF,CAAC,CACD,CAAA,IAAA,CAAM+nB,GACN,QAAUI,CAAAA,CACZ,CAAC,CACDnoB,CAAAA,CAAAA,CAAS,cAAe,CAAA,CACtB,UAAY+nB,CAAAA,EACd,CAAC,CACH,CACF,CAAC,CACKntB,CAAAA,CAAAA,CAAYoF,EAAS,aAAc,CAAA,CAEvC,OAAS,CAAA,EACT,CAAA,WAAA,CAAa,KACb,UAAAxK,CAAAA,CAAAA,CACA,KAAMwyB,EAAkC,CAAA,CAAE,QAAAnkB,CAAS,CAAA,SAAA,CAAAE,CAAU,CAAC,CAChE,CAAC,EACD,OAAAD,CAAAA,CAAK,GAAIlJ,CAAAA,CAAS,CAEXwO,CAAAA,CACT,ECrIA,IAAMgf,EAAAA,CAAiB,cAEjBC,CAAAA,EAAAA,CAAiC,CAAC,CACtC,QAAAxkB,CACA,CAAA,SAAA,CAAAE,CACF,CAIE,GAAA,CAAA,EAAG+Z,EAA0B,CAC3B,MAAA,CAAQja,CAAQ,CAAA,MAAA,CAChB,EAAIE,CAAAA,CAAAA,CAAU,GACd,SAAAA,CAAAA,CACF,CAAC,CAAC,CAESukB,OAAAA,CAAAA,CAAAA,EAAAA,CAAqB,CAAC,CACjC,OAAA,CAAAzkB,CACA,CAAA,SAAA,CAAAE,CACA,CAAA,MAAA,CAAAzS,EACA,OAAAo2B,CAAAA,CAAAA,CACA,MAAAte,CACF,CAAA,GAMM,CACJ,GACE,CAAC9X,CAAO,CAAA,YAAA,EACR,CAAE,CAAC,MAAO,MAAM,CAAA,CAAkC,QAASyS,CAAAA,CAAAA,CAAU,MAAM,CAAA,CAE3E,OAAOqF,CAGT,CAAA,IAAMtF,CAAOD,CAAAA,CAAAA,CAAQ,IAAK,CAAA,CAAE,GAAIvS,CAAO,CAAA,IAAK,CAAC,CACvC+nB,CAAAA,CAAAA,CAAa/C,GAAyBvS,CAAS,CAAA,CAEhDqF,CAAM,CAAA,UAAA,GACTA,CAAM,CAAA,UAAA,CAAa,KAEdA,CAAM,CAAA,+BAAA,GACT0d,GAAmB,CAAE,OAAA,CAAAjjB,EAAS,MAAAvS,CAAAA,CAAO,CAAC,CAAA,CACtCm1B,EAAuB,CAAA,CAAE,QAAA5iB,CAAS,CAAA,MAAA,CAAAvS,CAAO,CAAC,CAAA,CAC1C8X,EAAM,+BAAkC,CAAA,IAAA,CAAA,CAG1CtF,CAAK,CAAA,MAAA,CAAO,CACV,MAAA,CAAQxS,EAAO,IACf,CAAA,IAAA,CAAM82B,EACR,CAAC,CAGHhf,CAAAA,CAAAA,CAAAA,CAAM,eAAiB,IAEvB,CAAA,IAAMjW,CAAO8zB,CAAAA,EAAAA,CAAkB,CAC7B,OAAA,CAAApjB,EACA,UAAY,CAAA,KAAA,CACZ,UAAAE,CACA,CAAA,MAAA,CAAAzS,CACF,CAAC,CAAA,CACDwS,CAAK,CAAA,GAAA,CAAI3Q,CAAI,CAAA,CAEb,IAAMg0B,CAAWpB,CAAAA,EAAAA,CAAY,CAAE,OAAA,CAAAliB,CAAS,CAAA,SAAA,CAAAE,EAAW,MAAAzS,CAAAA,CAAO,CAAC,CAAA,CAErD+0B,CAAeW,CAAAA,EAAAA,CAA2B,CAC9C,OAAAnjB,CAAAA,CAAAA,CACA,WAAY,KACZ,CAAA,SAAA,CAAAE,CACF,CAAC,CAAA,CACKqjB,CAAqBtjB,CAAAA,CAAAA,CAAK,UAAW,CAAA,CACzC,KAAM,CAAcuiB,WAAAA,EAAAA,CAAY,CAChC,CAAA,CAAA,SAAA,CAAW,OACb,CAAC,EAEKzrB,CAAYoF,CAAAA,CAAAA,CAAS,aAAc,CAAA,CAEvC,OAAS,CAAA,GACT,WAAa,CAAA,IAAA,CACb,WAAYA,CAAS,CAAA,aAAA,CAAc,CACjC,UAAY,CAAA,CACV,CACE,UAAA,CAAAqZ,CACA,CAAA,IAAA,CAAM,UACN,IAAM8N,CAAAA,CACR,CACF,CACA,CAAA,UAAA,CAAY,CACVnnB,CAAS,CAAA,kBAAA,CAAmB,CAC1B,IAAA,CAAM,CACJA,CAAAA,CAAS,iBAAiB,CACxB,GAAA,CAAK,CACH,CACE,GAAA,CAAK,UACL,KAAOA,CAAAA,CAAAA,CAAS,aAAc,CAAA,CAC5B,KAAO,CAAA,IAAA,CACP,UAAW,IACX,CAAA,UAAA,CAAY,CACV,CACE,WAAa,CAAA,CACX,CACE,IAAM,CAAA,UACR,CACA,CAAA,CACE,IAAM,CAAA,QACR,CACF,CACF,CACF,EACA,UAAY,CAAA,CACVA,EAAS,aAAc,CAAA,CACrB,WAAa,CAAA,IAAA,CACb,UAAYA,CAAAA,CAAAA,CAAS,gBAAgB,CACnC,UAAA,CAAYA,CAAS,CAAA,cAAA,CAAe,CAClC,YAAA,CAAc0nB,EACd,UAAY,CAAA,CACV1nB,CAAS,CAAA,gBAAA,CAAiB,CACxB,SAAA,CAAW,KACX,GAAK,CAAA,CACH,CACE,MAAQ,CAAA,SACV,EACA,CACE,MAAA,CAAQ,aACV,CAAA,CACA,CACE,GAAA,CAAK,SACL,SAAW,CAAA,IAAA,CACX,KAAOA,CAAAA,CAAAA,CAAS,UAAW,CAAA,CACzB,KAAM,QACR,CAAC,CACH,CAAA,CACA,CACE,GAAA,CAAK,eACL,KAAO,CAAA,IACT,CACF,CACF,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACD,CAAA,IAAA,CAAM,MACR,CAAC,CAAA,CACDA,EAAS,cAAe,CAAA,CACtB,WAAY,MACd,CAAC,CACH,CACF,CAAC,CACH,EACA,CACE,GAAA,CAAK,WACL,KAAOA,CAAAA,CAAAA,CAAS,eAAe,CAC7B,YAAA,CAAconB,CAAmB,CAAA,IAAA,EAAQ,EACzC,CAAA,UAAA,CAAY,CAAC,SAAS,CACxB,CAAC,CACH,CACF,CACF,CAAC,CACH,CAAA,CACA,IAAMgB,CAAAA,EACR,CAAC,CACH,CACF,CAAC,CAAA,CACD,KAAMC,EAA+B,CAAA,CAAE,QAAAxkB,CAAS,CAAA,SAAA,CAAAE,CAAU,CAAC,CAG7D,CAAC,EACD,OAAAD,CAAAA,CAAK,GAAIlJ,CAAAA,CAAS,CAEXwO,CAAAA,CACT,EC5KO,IAAM5C,EAAAA,CAAyB,CAAC,CAAE,OAAA3C,CAAAA,CAAAA,CAAS,OAAAvS,CAAO,CAAA,GAAM,CAC7D,IAAMwS,CAAAA,CAAOD,EAAQ,UAAW,CAAA,CAC9B,eAAiBvS,CAAAA,CAAAA,CAAO,eACxB,CAAA,EAAA,CAAIA,EAAO,IACX,CAAA,IAAA,CAAMA,CAAO,CAAA,MACf,CAAC,CAAA,CAEK8X,EAAqB,CACzB,+BAAA,CAAiC,KACjC,CAAA,+BAAA,CAAiC,KACjC,CAAA,kBAAA,CAAoB,MACpB,YAAc,CAAA,KAAA,CACd,WAAY,KACZ,CAAA,cAAA,CAAgB,MAChB,gBAAkB,CAAA,MACpB,CAEAvF,CAAAA,CAAAA,CAAQ,SAAU,CAAA,QAAA,CAAU,IAAM,CAChCC,CAAAA,CAAK,OAAO,CACV,GAAGlD,EAAU,OACb,CAAA,MAAA,CAAQkD,CAAK,CAAA,kBAAA,CAAmB,CAAE,OAAA,CAAAD,EAAS,EAAI+a,CAAAA,EAAM,CAAC,CACxD,CAAC,EACH,CAAC,CAAA,CAED/a,CAAQ,CAAA,SAAA,CAAU,WAAa,CAAA,CAAC,CAAE,SAAAE,CAAAA,CAAU,CAAM,GAAA,CAChDqF,CAAM,CAAA,cAAA,CAAiB,MAEvB,IAAMse,CAAAA,CAAU,CACd7jB,CAAAA,CAAQ,MAAO,CAAA,OAAA,CAAQ,cAAc,CAAG,EAAA,OAAA,EACtCiP,GAAqB,CACnB,MAAA,CAAQjP,EAAQ,MAChB,CAAA,IAAA,CAAM0T,EAAexT,CAAAA,CAAAA,CAAU,IAAO,GAAA,CAAC,GAAK,SAAS,CACvD,CAAC,CAAA,CACH+Z,CAA0B,CAAA,CACxB,OAAQja,CAAQ,CAAA,MAAA,CAChB,aAAe,CAAA,CAACA,CAAQ,CAAA,MAAA,CAAO,QAAQ,cAAc,CAAA,EAAG,QACxD,EAAIE,CAAAA,CAAAA,CAAU,GACd,SAAAA,CAAAA,CACF,CAAC,CACH,CACG,CAAA,MAAA,CAAO,OAAO,CACd,CAAA,IAAA,CAAK,GAAG,CAAA,CAEXukB,EAAmB,CAAA,CACjB,QAAAzkB,CACA,CAAA,SAAA,CAAAE,CACA,CAAA,MAAA,CAAAzS,CACA,CAAA,OAAA,CAAAo2B,EACA,KAAAte,CAAAA,CACF,CAAC,CAEDqe,CAAAA,EAAAA,CAA2B,CACzB,OAAA5jB,CAAAA,CAAAA,CACA,SAAAE,CAAAA,CAAAA,CACA,MAAAzS,CAAAA,CAAAA,CACA,QAAAo2B,CACA,CAAA,KAAA,CAAAte,CACF,CAAC,CAAA,CAED6e,GAAsB,CACpB,OAAA,CAAApkB,CACA,CAAA,SAAA,CAAAE,CACA,CAAA,MAAA,CAAAzS,EACA,OAAAo2B,CAAAA,CAAAA,CACA,MAAAte,CACF,CAAC,EAEGA,CAAM,CAAA,cAAA,EACRtF,CAAK,CAAA,MAAA,CAAO,CACV,MAAA,CAAQA,EAAK,kBAAmB,CAAA,CAAE,OAAAD,CAAAA,CAAAA,CAAS,EAAI+a,CAAAA,EAAM,CAAC,CACtD,CAAA,IAAA,CAAM8I,CAAQ,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAC5B,CAAC,EAEL,CAAC,CAAA,CAED7jB,EAAQ,SAAU,CAAA,OAAA,CAAS,IAAM,CAAA,CAC3BuF,CAAM,CAAA,UAAA,EAAcA,EAAM,kBAC5BtF,GAAAA,CAAAA,CAAK,MAAO,CAAA,CACV,KAAO,CAAA,eAAA,CACP,OAAQA,CAAK,CAAA,kBAAA,CAAmB,CAAE,OAAA,CAAAD,CAAS,CAAA,EAAA,CAAI7S,EAAS,CAAC,CAAA,CACzD,KAAM,QACR,CAAC,EAEL,CAAC,EACH,CC/FA,CAyCA,IAAMu3B,EAA8BxkB,CAAAA,CAAAA,EAClC,CAAG+Z,EAAAA,CAAAA,CAA0B,CAC3B,MAAA,CAAQxrB,GACR,CAAA,EAAA,CAAIyR,CAAU,CAAA,IAAA,CACd,SAAAA,CAAAA,CACF,CAAC,CAAC,CAAA,eAAA,CAAA,CAEEykB,GAAyBzkB,CAC7B,EAAA,CAAA,EAAG+Z,EAA0B,CAC3B,MAAA,CAAQxrB,CAAU,EAAA,CAClB,EAAIyR,CAAAA,CAAAA,CAAU,KACd,SAAAA,CAAAA,CACF,CAAC,CAAC,CAAA,QAAA,CAAA,CAEE0kB,GAAqB,CAAC,CAC1B,MAAAv3B,CAAAA,CAAAA,CACA,EAAAqS,CAAAA,CAAAA,CACA,UAAAQ,CACF,CAAA,GAKE,GAAG+Z,CAA0B,CAAA,CAC3B,OAAA5sB,CACA,CAAA,EAAA,CAAAqS,CACA,CAAA,SAAA,CAAAQ,CACF,CAAC,CAAC,CAEE2kB,OAAAA,CAAAA,CAAAA,EAAAA,CAAiB,CAAC,CACtB,MAAAx3B,CAAAA,CAAAA,CACA,GAAAqS,CACA,CAAA,UAAA,CAAAsjB,CACA,CAAA,SAAA,CAAA9iB,CACF,CAAA,GAME,GAAG+Z,CAA0B,CAAA,CAC3B,OAAA5sB,CACA,CAAA,EAAA,CAAAqS,EACA,SAAAQ,CAAAA,CACF,CAAC,CAAC,CAAG8iB,EAAAA,CAAAA,CAAa,WAAa,EAAE,CAAA,QAAA,CAAA,CAE7B8B,EAAmBhyB,CAAAA,CAAAA,EAAkC,CACzD,OAAQA,EAAU,EAAI,EACpB,KAAK,UAAA,CACH,OAAO,MAAA,CACT,KAAK,QACH,CAAA,OAAO,UACT,QACE,OAAOA,EAAU,EACrB,CACF,CAEM0wB,CAAAA,EAAAA,CAAyB,sBACzBjB,CAAAA,EAAAA,CAAmB,iBACnBkB,EAAyB,CAAA,sBAAA,CACzBS,EAAoB,CAAA,iBAAA,CACpB1B,EAAe,CAAA,UAAA,CACf+B,GAAiB,cACjB9B,CAAAA,EAAAA,CAAe,UAEfiB,CAAAA,EAAAA,CAA+B,CAAC,CACpC,KAAAzjB,CACF,CAAA,GAEM,CACJ,IAAM6iB,CAAAA,CAAK3mB,EAAS,aAAc,CAAA,CAChC,UAAYA,CAAAA,CAAAA,CAAS,aAAc,CAAA,CACjC,UAAW,IACX,CAAA,UAAA,CAAY,CACV,CACE,IAAA,CAAM,WACN,IAAMA,CAAAA,CAAAA,CAAS,QACb,CAAA,CAAA,SAAA,EAAYY,CAAU,CAAA,mBAAA,CAAoB,IAAI,CAChD,CAAA,CAAA,CACF,EACA,CACE,IAAA,CAAM,OACN,IAAMZ,CAAAA,CAAAA,CAAS,QAAS,CAAA,GAAG,CAC7B,CACF,EACA,UAAY,CAAA,CACVA,CAAS,CAAA,aAAA,CAAc,CACrB,UAAA,CAAYA,EAAS,UAAW,CAAA,CAC9B,IAAM,CAAA,aACR,CAAC,CAAA,CACD,KAAM,QACR,CAAC,EACDA,CAAS,CAAA,WAAA,CAAY,CACnB,UAAYA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC5C,UAAYA,CAAAA,CAAAA,CAAS,WAAW,CAC9B,IAAA,CAAM,MACR,CAAC,CACD,CAAA,IAAA,CAAMA,EAAS,UAAW,CAAA,CAAE,IAAM,CAAA,MAAO,CAAC,CAC5C,CAAC,CACD,CAAA,aAAA,CAAeA,EAAS,KAAM,CAAA,CAC5B,WAAY,CACVA,CAAAA,CAAS,qBAAsB,CAAA,CAC7B,UAAYA,CAAAA,CAAAA,CAAS,iBAAiB,CACpC,IAAA,CAAMA,CAAS,CAAA,wBAAA,CAAyB,CACtC,UAAA,CAAY,SACZ,IAAM,CAAA,MACR,CAAC,CAAA,CACD,KAAOA,CAAAA,CAAAA,CAAS,iBAAiB,CAC/B,SAAA,CAAW,KACX,GAAK,CAAA,CACH,CACE,SAAW,CAAA,KAAA,CACX,MAAQ,CAAA,kBACV,CACA,CAAA,CACE,UAAW,KACX,CAAA,MAAA,CAAQ,WACV,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,EACDA,CAAS,CAAA,WAAA,CAAY,CACnB,UAAYA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CAC5C,UAAYA,CAAAA,CAAAA,CAAS,WAAW,CAC9B,IAAA,CAAM,MACR,CAAC,CACD,CAAA,IAAA,CAAMA,EAAS,UAAW,CAAA,CAAE,IAAM,CAAA,SAAU,CAAC,CAC/C,CAAC,CACD,CAAA,aAAA,CAAeA,EAAS,KAAM,CAAA,CAC5B,WAAY,CACVA,CAAAA,CAAS,qBAAsB,CAAA,CAC7B,UAAYA,CAAAA,CAAAA,CAAS,iBAAiB,CACpC,IAAA,CAAMA,CAAS,CAAA,wBAAA,CAAyB,CACtC,UAAA,CAAY,SACZ,IAAM,CAAA,SACR,CAAC,CAAA,CACD,KAAOA,CAAAA,CAAAA,CAAS,iBAAiB,CAC/B,SAAA,CAAW,KACX,GAAK,CAAA,CACH,CACE,MAAQ,CAAA,qBACV,CACA,CAAA,CACE,MAAQ,CAAA,cACV,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACDA,CAAAA,CAAAA,CAAS,YAAY,CACnB,UAAA,CAAYA,EAAS,wBAAyB,CAAA,CAC5C,WAAYA,CAAS,CAAA,UAAA,CAAW,CAC9B,IAAA,CAAM,MACR,CAAC,EACD,IAAMA,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM,MAAO,CAAC,CAC5C,CAAC,CAAA,CACD,aAAeA,CAAAA,CAAAA,CAAS,MAAM,CAC5B,UAAA,CAAY,CACVA,CAAS,CAAA,qBAAA,CAAsB,CAC7B,UAAYA,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CACpC,IAAMA,CAAAA,CAAAA,CAAS,yBAAyB,CACtC,UAAA,CAAY,QACZ,CAAA,IAAA,CAAM,MACR,CAAC,EACD,KAAOA,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CAC/B,SAAW,CAAA,IAAA,CACX,IAAK,CACH,CACE,OAAQ,kBACV,CAAA,CACA,CACE,MAAQ,CAAA,WACV,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACDA,CAAAA,CAAAA,CAAS,WAAY,CAAA,CACnB,UAAYA,CAAAA,CAAAA,CAAS,yBAAyB,CAC5C,UAAA,CAAYA,EAAS,UAAW,CAAA,CAC9B,KAAM,MACR,CAAC,CACD,CAAA,IAAA,CAAMA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAM,CAAA,OAAQ,CAAC,CAC7C,CAAC,CAAA,CACD,cAAeA,CAAS,CAAA,KAAA,CAAM,CAC5B,UAAA,CAAY,CACVA,CAAAA,CAAS,sBAAsB,CAC7B,UAAA,CAAYA,EAAS,gBAAiB,CAAA,CACpC,KAAMA,CAAS,CAAA,wBAAA,CAAyB,CACtC,UAAA,CAAY,QACZ,CAAA,IAAA,CAAM,OACR,CAAC,CAAA,CACD,MAAOA,CAAS,CAAA,gBAAA,CAAiB,CAC/B,SAAW,CAAA,IAAA,CACX,GAAK,CAAA,CACH,CACE,MAAA,CAAQ,mBACV,CACA,CAAA,CACE,OAAQ,YACV,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAAA,CACDA,CAAS,CAAA,cAAA,CAAe,CACtB,UAAYrN,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,kBAAA,CACrBA,kBAAG,CAAA,OAAA,CAAQ,mBACTqN,CAAS,CAAA,UAAA,CAAW,CAAE,IAAM,CAAA,QAAS,CAAC,CACtCrN,CAAAA,kBAAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsBA,kBAAG,CAAA,UAAA,CAAW,cAAc,CAC/D,CAAA,CACAA,kBAAG,CAAA,OAAA,CAAQ,mBACTqN,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM,MAAO,CAAC,CACtC,CACF,CACF,CAAC,CACH,EACA,KAAO,CAAA,CACL,CACE,OAASA,CAAAA,CAAAA,CAAS,iBAAkB,CAAA,CAClC,QAAUA,CAAAA,CAAAA,CAAS,WAAW,CAC5B,IAAA,CAAM,CAAiBY,cAAAA,EAAAA,CAAAA,CAAU,mBAAoB,CAAA,IAAI,8CAC3D,CAAC,CACH,CAAC,CAAA,CACD,IAAM,CAAA,GACR,CACF,CACF,CAAC,EACD,IAAMymB,CAAAA,EACR,CAAC,CACDvjB,CAAAA,CAAAA,CAAK,GAAI6iB,CAAAA,CAAE,EACb,CAAA,CAEMF,GAAyB,CAAC,CAAE,KAAA3iB,CAAK,CAAA,GAAoC,CACzE,IAAM1L,CAAAA,CAAa4H,CAAS,CAAA,qBAAA,CAAsB,CAChD,SAAA,CAAWA,EAAS,QAAS,CAAA,CAAC,EAC9B,UAAYA,CAAAA,CAAAA,CAAS,SAASqmB,EAAc,CAAA,CAC1CrmB,CAAS,CAAA,QAAA,CAASsmB,EAAY,CAChC,CAAC,CACH,CAAC,CAEKC,CAAAA,CAAAA,CAAqBvmB,CAAS,CAAA,UAAA,CAAW,CAAE,IAAM,CAAA,UAAW,CAAC,CAAA,CAE7D2mB,CAAK3mB,CAAAA,CAAAA,CAAS,cAAc,CAChC,UAAA,CAAYA,EAAS,aAAc,CAAA,CACjC,UAAW,IACX,CAAA,UAAA,CAAY,CACV,CACE,IAAM,CAAA,IAAA,CACN,KAAMA,CAAS,CAAA,QAAA,CAAS,QAAQ,CAClC,CACA,CAAA,CACE,WAAY,KACZ,CAAA,IAAA,CAAM,SACN,CAAA,IAAA,CAAMA,CAAS,CAAA,QAAA,CAASsmB,EAAY,CACtC,CAAA,CACA,CACE,UAAY,CAAA,KAAA,CACZ,KAAM,UACN,CAAA,IAAA,CAAMtmB,CAAS,CAAA,QAAA,CAAS,SAAS,CACnC,CACF,CACA,CAAA,UAAA,CAAA5H,CACA,CAAA,UAAA,CAAY,CACV4H,CAAAA,CAAS,cAAc,CACrB,SAAA,CAAW5H,CACX,CAAA,UAAA,CAAY4H,CAAS,CAAA,gBAAA,CAAiB,CACpC,SAAW,CAAA,KAAA,CACX,IAAK,CACH,CACE,IAAK,KACL,CAAA,KAAA,CAAOA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,IAAK,CAAC,CAC3C,EACA,CACE,GAAA,CAAK/O,EAAoBqB,CAAU,EAAC,CACpC,CAAA,KAAA,CAAO0N,CAAS,CAAA,UAAA,CAAW,CACzB,IAAM,CAAA,CAAA,+CAAA,EAAkD/O,EAAoBqB,CAAU,EAAC,CAAC,CAC1F,CAAA,CAAC,CACH,CACF,CACF,CAAC,EACD,IAAM,CAAA,QAAA,CACN,QAAU8F,CAAAA,CACZ,CAAC,CAAA,CACD4H,EAAS,WAAY,CAAA,CACnB,UAAYumB,CAAAA,CAAAA,CACZ,aAAevmB,CAAAA,CAAAA,CAAS,MAAM,CAC5B,UAAA,CAAY,CACVA,CAAS,CAAA,qBAAA,CAAsB,CAC7B,UAAYA,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CACpC,IAAMA,CAAAA,CAAAA,CAAS,yBAAyB,CACtC,UAAA,CAAY,QACZ,CAAA,IAAA,CAAM,WACR,CAAC,EACD,KAAOumB,CAAAA,CACT,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACDvmB,CAAAA,CAAAA,CAAS,YAAY,CACnB,UAAA,CAAYA,CAAS,CAAA,wBAAA,CAAyB,CAC5C,UAAA,CAAYA,EAAS,UAAW,CAAA,CAAE,IAAM,CAAA,SAAU,CAAC,CAAA,CACnD,WAAY,IACZ,CAAA,IAAA,CAAMA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,MAAO,CAAC,CAC5C,CAAC,CACD,CAAA,aAAA,CAAeA,EAAS,KAAM,CAAA,CAC5B,UAAY,CAAA,CACVA,CAAS,CAAA,qBAAA,CAAsB,CAC7B,UAAYA,CAAAA,CAAAA,CAAS,iBAAiB,CACpC,IAAA,CAAMA,EAAS,wBAAyB,CAAA,CACtC,UAAY,CAAA,QAAA,CACZ,IAAM,CAAA,MACR,CAAC,CACD,CAAA,KAAA,CAAOA,EAAS,wBAAyB,CAAA,CACvC,WAAY,SACZ,CAAA,IAAA,CAAM,MACR,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,EACDA,CAAS,CAAA,WAAA,CAAY,CACnB,UAAA,CAAYA,CAAS,CAAA,wBAAA,CAAyB,CAC5C,UAAYA,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM,SAAU,CAAC,CAAA,CACnD,UAAY,CAAA,IAAA,CACZ,IAAMA,CAAAA,CAAAA,CAAS,WAAW,CAAE,IAAA,CAAM,SAAU,CAAC,CAC/C,CAAC,EACD,aAAeA,CAAAA,CAAAA,CAAS,KAAM,CAAA,CAC5B,UAAY,CAAA,CACVA,EAAS,qBAAsB,CAAA,CAC7B,WAAYA,CAAS,CAAA,gBAAA,CAAiB,CACpC,IAAMA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CACtC,UAAY,CAAA,QAAA,CACZ,KAAM,SACR,CAAC,CACD,CAAA,KAAA,CAAOA,CAAS,CAAA,wBAAA,CAAyB,CACvC,UAAY,CAAA,SAAA,CACZ,IAAM,CAAA,SACR,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAAA,CACDA,CAAS,CAAA,WAAA,CAAY,CACnB,UAAA,CAAYA,EAAS,wBAAyB,CAAA,CAC5C,WAAYA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAM,CAAA,SAAU,CAAC,CAAA,CACnD,UAAY,CAAA,IAAA,CACZ,KAAMA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAM,CAAA,MAAO,CAAC,CAC5C,CAAC,CACD,CAAA,aAAA,CAAeA,CAAS,CAAA,KAAA,CAAM,CAC5B,UAAY,CAAA,CACVA,CAAS,CAAA,qBAAA,CAAsB,CAC7B,UAAA,CAAYA,EAAS,gBAAiB,CAAA,CACpC,IAAMA,CAAAA,CAAAA,CAAS,wBAAyB,CAAA,CACtC,WAAY,QACZ,CAAA,IAAA,CAAM,MACR,CAAC,CAAA,CACD,MAAOA,CAAS,CAAA,wBAAA,CAAyB,CACvC,UAAA,CAAY,SACZ,CAAA,IAAA,CAAM,MACR,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAAA,CACDA,CAAS,CAAA,WAAA,CAAY,CACnB,UAAYA,CAAAA,CAAAA,CAAS,yBAAyB,CAC5C,UAAA,CAAYA,EAAS,UAAW,CAAA,CAAE,IAAM,CAAA,SAAU,CAAC,CAAA,CACnD,WAAY,IACZ,CAAA,IAAA,CAAMA,CAAS,CAAA,UAAA,CAAW,CAAE,IAAA,CAAM,OAAQ,CAAC,CAC7C,CAAC,CAAA,CACD,aAAeA,CAAAA,CAAAA,CAAS,MAAM,CAC5B,UAAA,CAAY,CACVA,CAAS,CAAA,qBAAA,CAAsB,CAC7B,UAAYA,CAAAA,CAAAA,CAAS,gBAAiB,CAAA,CACpC,IAAMA,CAAAA,CAAAA,CAAS,yBAAyB,CACtC,UAAA,CAAY,SACZ,IAAM,CAAA,OACR,CAAC,CACD,CAAA,KAAA,CAAOA,CAAS,CAAA,wBAAA,CAAyB,CACvC,UAAA,CAAY,UACZ,IAAM,CAAA,OACR,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,EACDA,CAAS,CAAA,cAAA,CAAe,CACtB,UAAA,CAAY,QACd,CAAC,CACH,CACA,CAAA,KAAA,CAAO,CACL,CACE,OAASA,CAAAA,CAAAA,CAAS,kBAAkB,CAClC,QAAA,CAAUA,EAAS,UAAW,CAAA,CAC5B,KAAMY,CAAU,CAAA,mBAAA,CAAoB,IACtC,CAAC,CACH,CAAC,EACD,IAAM0lB,CAAAA,EACR,CACF,CACF,CAAC,EACD,IAAMF,CAAAA,EACR,CAAC,CAAA,CACDtiB,CAAK,CAAA,GAAA,CAAI6iB,CAAE,EACb,CAAA,CAEMG,GAAqB,CAAC,CAAE,KAAAhjB,CAAK,CAAA,GAAoC,CACrE,IAAMjL,CAAyB,CAAA,CAC7B,CACE,IAAM,CAAA,KAAA,CACN,IAAMmH,CAAAA,CAAAA,CAAS,eAAgB,CAAA,CAC7B,QAAS,QACX,CAAC,CACH,CAAA,CACA,CACE,UAAA,CAAY,MACZ,IAAM,CAAA,WAAA,CACN,KAAMA,CAAS,CAAA,eAAA,CAAgB,CAC7B,OAAS,CAAA,SACX,CAAC,CACH,CACF,CAAA,CAEM+mB,EAAe/mB,CAAS,CAAA,oBAAA,CAAqB,CACjD,IAAMqmB,CAAAA,EAAAA,CACN,KAAMrmB,CAAS,CAAA,aAAA,CAAc,CAC3B,KAAA,CAAO,CACLA,CAAAA,CAAS,qBAAqB,CAC5B,KAAA,CAAO,CACLA,CAAS,CAAA,iBAAA,CAAkB,CACzB,QAAU,CAAA,CAAA,KAAA,EAAQsmB,EAAY,CAAA,GAAA,EAAMr1B,CAAoBqB,CAAAA,CAAAA,EAAW,CAAC,CAAA,0CAAA,CACtE,CAAC,CAAA,CACD0N,CAAS,CAAA,iBAAA,CAAkB,CACzB,UAAAnH,CAAAA,CAAAA,CACA,mBAAqB,CAAA,IACvB,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,CAAA,CACD,eAAgB,CACd,CACE,OAASmH,CAAAA,CAAAA,CAAS,iBAAkB,CAAA,CAClC,SAAUA,CAAS,CAAA,UAAA,CAAW,CAC5B,IAAA,CAAMY,CAAU,CAAA,mBAAA,CAAoB,IACtC,CAAC,CACH,CAAC,CAAA,CACD,IAAM0lB,CAAAA,EACR,CACF,CACF,CAAC,EACDxiB,CAAK,CAAA,GAAA,CAAIijB,CAAY,EACvB,CAAA,CAEM6B,EAAiB,CAAA,CAAC,CACtB,MAAA,CAAAz3B,EACA,IAAA2S,CAAAA,CAAAA,CACA,SAAAC,CAAAA,CAAAA,CACA,eAAA8kB,CAAAA,CACF,IAKM,CACJ,GAAM,CAAE,IAAA,CAAMC,CAAa,CAAA,CAAI5M,GAAe,CAC5C,MAAA,CAAA/qB,EACA,IAAM4S,CAAAA,CAAAA,CAAU,WAAW,MACvB,CAAA,CAGE,IAAMA,CAAAA,CAAAA,CAAU,IAChB,CAAA,IAAA,CAAMA,EAAU,IAClB,CAAA,CACA,OACJ,eAAiBwY,CAAAA,EAAAA,CACjB,SAAWlrB,CAAS,EAAA,CAClByS,CAAK,CAAA,MAAA,CAAO,CACV,MAAA,CAAQ,KACR,MAAQ+kB,CAAAA,CAAAA,CACR,KAAAx3B,CACF,CAAC,EACH,CACF,CAAC,CAMD,CAAA,OAAO,CAAE,QAAA,CAJQsrB,GAAiC,CAChD,YAAA,CAAcmM,CAChB,CAAC,CAEiB,CACpB,EAEMC,EAAkB,CAAA,CAAC,CACvB,MAAA,CAAA53B,CACA,CAAA,IAAA,CAAA2S,EACA,SAAAC,CAAAA,CAAAA,CACA,WAAAilB,CACA,CAAA,eAAA,CAAAH,CACF,CAMM,GAAA,CACJ,IAAM33B,CAAAA,CAASoB,CAAU,EAAA,CAEnB,CAAE,IAAM22B,CAAAA,CAAc,CAAI/M,CAAAA,EAAAA,CAAe,CAC7C,MAAA,CAAA/qB,EACA,IAAM,CAAA,CAGJ,IAAM4S,CAAAA,CAAAA,CAAU,IAChB,CAAA,IAAA,CAAMA,EAAU,IAClB,CAAA,CACA,gBAAiByY,EACjB,CAAA,QAAA,CAAWnrB,GAAS,CAClByS,CAAAA,CAAK,MAAO,CAAA,CACV,MAAQ,CAAA,IAAA,CACR,OAAQ+kB,CACR,CAAA,IAAA,CAAAx3B,CACF,CAAC,EACH,CACF,CAAC,CAEG40B,CAAAA,CAAAA,CAAoC,CACtC,MAAA,CAAQ,IACR,CAAA,IAAA,CAAMgD,CACR,CAUA,CAAA,GATKhD,EAAU,IACbA,GAAAA,CAAAA,CAAYniB,EAAK,MAAO,CAAA,CACtB,MAAQ,CAAA,IAAA,CACR,MAAQklB,CAAAA,CAAAA,CACR,KAAM,cACR,CAAC,GAGkB53B,CAAgBF,CAAAA,CAAM,EAC1B,IAAS,GAAA,uBAAA,CAAyB,CACjD,IAAMg1B,CAAapiB,CAAAA,CAAAA,CAAK,OAAO,CAC7B,MAAA,CAAQ,KACR,MAAQ,CAAA,OAAA,CACR,KAAM,YACR,CAAC,CACDmiB,CAAAA,CAAAA,CAAY,CACV,GAAGC,EACH,IAAM,CAAA,CAAA,EAAGA,CAAW,CAAA,IAAI,CAAID,CAAAA,EAAAA,CAAAA,CAAU,IAAI,CAC5C,CAAA,CAAA,EACF,CAEA,OAAO,CAAE,SAAA,CAAAA,CAAU,CACrB,CAAA,CAEMiD,GAAqB,CAAC,CAC1B,OAAA/3B,CACA,CAAA,IAAA,CAAA2S,CACA,CAAA,SAAA,CAAAC,CACA,CAAA,eAAA,CAAA8kB,CACF,CAKM,GAAA,CACJ,GAAM,CAAE,IAAMM,CAAAA,CAAiB,EAAIjN,EAAe,CAAA,CAChD,MAAA/qB,CAAAA,CAAAA,CACA,IAAM,CAAA,CAGJ,KAAM4S,CAAU,CAAA,IAAA,CAChB,KAAMA,CAAU,CAAA,IAClB,EACA,eAAiB2Y,CAAAA,EAAAA,CACjB,QAAWgC,CAAAA,CAAAA,EAAa,CACtB5a,CAAAA,CAAK,OAAO,CACV,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQ+kB,CACR,CAAA,IAAA,CAAMnK,CACR,CAAC,EACH,CACF,CAAC,CAID,CAAA,OAAO,CAAE,YAFYyK,CAAAA,CAAAA,EAAoB,MAEnB,CACxB,CAAA,CAEMvC,GAAwB,CAAC,CAC7B,EAAArjB,CAAAA,CAAAA,CACA,UAAAsjB,CAAAA,CACF,IAI0B7mB,CAAS,CAAA,sBAAA,CAAuB,CACtD,QAAU,CAAA,CACRA,EAAS,cAAe,CAAA,CACtB,YAAcomB,CAAAA,EAAAA,CACd,UAAY,CAAA,CACVpmB,EAAS,GAAI,CAAA,MAAA,CAAOuD,CAAE,CACtB,CAAA,SAAA,CACAsjB,EAAa7mB,CAAS,CAAA,GAAA,CAAI,OAAQ,CAAA,IAAI,CAAI,CAAA,MAC5C,CACF,CAAC,CACH,CACA,CAAA,SAAA,CAAW,KACb,CAAC,EAIUwV,EAMT,CAAA,CAAC,CAAE,MAAA,CAAArkB,CAAQ,CAAA,KAAA,CAAAskB,EAAO,MAAAnkB,CAAAA,CAAO,IAAM,CACjC,IAAMJ,EAASoB,CAAU,EAAA,CAEzB,GAAIE,CAAAA,CAAetB,CAAM,CAAA,CACvB,MAAM,IAAI,KAAA,CAAM,iEAA0D,CAAA,CAG5E,IAAM4S,CAAAA,CAAO2R,EAAMnkB,CAAO,CAAA,IAAI,CAE9BwS,CAAAA,CAAAA,CAAK,MAAO,CAAA,CACV,GAAGlD,CAAU,CAAA,mBAAA,CACb,OAAQH,CAAiB,CAAA,CAAE,OAAAvP,CAAQ,CAAA,YAAA,CAAcI,CAAO,CAAA,MAAO,CAAC,CAClE,CAAC,CAED,CAAA,IAAMu3B,CAAkB1oB,CAAAA,EAAAA,CAAmB,CACzC,YAAA,CAAcsV,EAAM,KAAO,CAAA,oBAAA,EAC3B,CAAA,YAAA,CAAcnkB,CAAO,CAAA,MACvB,CAAC,CAEK42B,CAAAA,CAAAA,CACJ52B,EAAO,IAAS,GAAA,sCAAA,EAChBA,EAAO,IAAS,GAAA,wBAAA,EAChBA,CAAO,CAAA,IAAA,GAAS,uBACZ,CAAA,iBAAA,CACA,qBAEF83B,CACAC,CAAAA,CAAAA,CAAkC,MAClCC,CAAkC,CAAA,KAAA,CAClCC,EAAqB,KACrBC,CAAAA,CAAAA,CAAe,KACfC,CAAAA,CAAAA,CAAa,KAEXC,CAAAA,CAAAA,CAAsB,IAAI,GAEhC,CAAA,IAAA,IAAWrL,KAAWltB,CAAO,CAAA,QAAA,CAC3B,QAAW4S,CAAasa,IAAAA,CAAAA,CAAQ,UAAY,CAAA,CAE1C,IAAMjU,CAAAA,CAAe6K,GAAgBlR,CAAS,CAAA,CAC9C,GAAI2lB,CAAAA,CAAoB,GAAItf,CAAAA,CAAY,EACtC,SAEFsf,CAAAA,CAAoB,GAAItf,CAAAA,CAAAA,CAAc,IAAI,CAAA,CAE1C,IAAMsd,CAAU,CAAA,CACdx2B,EAAO,OAAQ,CAAA,cAAc,GAAG,OAC9B4hB,EAAAA,EAAAA,CAAqB,CACnB,MAAA,CAAA5hB,CACA,CAAA,IAAA,CAAMmtB,EAAQ,IAChB,CAAC,CACHP,CAAAA,CAAAA,CAA0B,CACxB,MAAA,CAAA5sB,EACA,aAAe,CAAA,CAACA,CAAO,CAAA,OAAA,CAAQ,cAAc,CAAA,EAAG,QAChD,EAAI6S,CAAAA,CAAAA,CAAU,KACd,SAAAA,CAAAA,CACF,CAAC,CACH,CAAA,CACG,MAAO,CAAA,OAAO,CACd,CAAA,IAAA,CAAK,GAAG,CACP4lB,CAAAA,CAAAA,CAAiB,KAGrB,CAAA,GACEr4B,CAAO,CAAA,YAAA,EACN,CAAC,KAAO,CAAA,MAAM,CAA4B,CAAA,QAAA,CAASyS,CAAU,CAAA,MAAM,EACpE,CACK0lB,CAAAA,GACHA,EAAa,IAERH,CAAAA,CAAAA,GACHxC,GAAmB,CAAE,IAAA,CAAAhjB,CAAK,CAAC,CAC3B2iB,CAAAA,EAAAA,CAAuB,CAAE,IAAA3iB,CAAAA,CAAK,CAAC,CAC/BwlB,CAAAA,CAAAA,CAAkC,MAGpCxlB,CAAK,CAAA,MAAA,CAAO,CACV,MAAA,CAAQxS,CAAO,CAAA,IAAA,CACf,KAAM82B,EACR,CAAC,GAGHuB,CAAiB,CAAA,IAAA,CAEjB,GAAM,CAAE,QAAA,CAAAxC,CAAS,CAAA,CAAIyB,EAAe,CAAA,CAClC,OAAAz3B,CACA,CAAA,IAAA,CAAA2S,CACA,CAAA,SAAA,CAAAC,CACA,CAAA,eAAA,CAAA8kB,CACF,CAAC,CAAA,CAEKxP,EAAanE,CAAAA,EAAAA,CAA6BnR,CAAU,CAAA,UAAU,EAE9DkjB,CAAoBjnB,CAAAA,CAAAA,CAAS,cAAc,CAC/C,WAAA,CAAa,KACb,UAAYA,CAAAA,CAAAA,CAAS,aAAc,CAAA,CACjC,UAAY,CAAA,CACV,CACE,UAAAqZ,CAAAA,EAAAA,CACA,IAAM,CAAA,SAAA,CACN,IAAM8N,CAAAA,CACR,CACF,CACA,CAAA,UAAA,CAAYP,EAAsB,CAAA,CAChC,EAAI7iB,CAAAA,CAAAA,CAAU,IAChB,CAAC,CACH,CAAC,CACD,CAAA,IAAA,CAAM2kB,GAAe,CACnB,MAAA,CAAAx3B,CACA,CAAA,EAAA,CAAI6S,CAAU,CAAA,IAAA,CACd,UAAAA,CACF,CAAC,CACH,CAAC,CACDD,CAAAA,CAAAA,CAAK,IAAImjB,CAAiB,CAAA,CAE1B,IAAMrsB,EAAAA,CAAYoF,CAAS,CAAA,aAAA,CAAc,CAEvC,OAAS,CAAA,GACT,WAAa,CAAA,IAAA,CACb,WAAYA,CAAS,CAAA,aAAA,CAAc,CACjC,UAAA,CAAY,CACV,CACE,WAAAqZ,EACA,CAAA,IAAA,CAAM,UACN,IAAM8N,CAAAA,CACR,CACF,CACA,CAAA,UAAA,CAAY,CACVnnB,CAAAA,CAAS,kBAAmB,CAAA,CAC1B,KAAM,CACJA,CAAAA,CAAS,iBAAiB,CACxB,GAAA,CAAK,CACH,CACE,GAAA,CAAK,SACL,CAAA,KAAA,CAAOA,CAAS,CAAA,aAAA,CAAc,CAC5B,KAAO,CAAA,IAAA,CACP,SAAW,CAAA,IAAA,CACX,UAAY,CAAA,CACV,CACE,WAAa,CAAA,CACX,CACE,IAAA,CAAM,UACR,CAAA,CACA,CACE,IAAM,CAAA,QACR,CACF,CACF,CACF,EACA,UAAY,CAAA,CACVA,CAAS,CAAA,aAAA,CAAc,CACrB,WAAA,CAAa,KACb,UAAYA,CAAAA,CAAAA,CAAS,eAAgB,CAAA,CACnC,UAAYA,CAAAA,CAAAA,CAAS,eAAe,CAClC,YAAA,CAAc0nB,CACd,CAAA,UAAA,CAAY,CACV1nB,CAAAA,CAAS,iBAAiB,CACxB,SAAA,CAAW,KACX,GAAK,CAAA,CACH,CACE,MAAQ,CAAA,SACV,CACA,CAAA,CACE,MAAQ,CAAA,aACV,EACA,CACE,GAAA,CAAK,QACL,CAAA,SAAA,CAAW,IACX,CAAA,KAAA,CAAOA,EAAS,UAAW,CAAA,CACzB,IAAM,CAAA,QACR,CAAC,CACH,EACA,CACE,GAAA,CAAK,eACL,KAAO,CAAA,IACT,CACF,CACF,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACD,CAAA,IAAA,CAAM,MACR,CAAC,CAAA,CACDA,EAAS,cAAe,CAAA,CACtB,UAAY,CAAA,MACd,CAAC,CACH,CACF,CAAC,CACH,EACA,CACE,GAAA,CAAK,WACL,KAAOA,CAAAA,CAAAA,CAAS,cAAe,CAAA,CAC7B,YAAc0oB,CAAAA,EAAAA,CAAe,CAC3B,MAAAx3B,CAAAA,CAAAA,CACA,EAAI6S,CAAAA,CAAAA,CAAU,IACd,CAAA,SAAA,CAAAA,CACF,CAAC,CAAA,CACD,UAAY,CAAA,CAAC,SAAS,CACxB,CAAC,CACH,CACF,CACF,CAAC,CACH,EACA,IAAMqkB,CAAAA,EACR,CAAC,CACH,CACF,CAAC,EACD,IAAMK,CAAAA,EAAAA,CAAmB,CACvB,MAAA,CAAAv3B,CACA,CAAA,EAAA,CAAI6S,EAAU,IACd,CAAA,SAAA,CAAAA,CACF,CAAC,CAGH,CAAC,EACDD,CAAK,CAAA,GAAA,CAAIlJ,EAAS,EACpB,CAGA,GACEtJ,CAAO,CAAA,oBAAA,EACN,CAAC,KAAA,CAAO,MAAM,CAAA,CAA4B,SAASyS,CAAU,CAAA,MAAM,CACpE,CAAA,CAEA,IAAI6K,CAAAA,CAEEgb,GAAsB7lB,CAAU,CAAA,UAAA,CAAW,IAAMpN,CAAAA,CAAAA,EAAc,CAInE,GAHyBwU,EACvBja,CAAO,CAAA,KAAA,CAAM,UACf,CACqB,CAAA,IAAA,CAAKyF,EAAU,IAAI,CAAA,CACtC,OAAAiY,CAAAA,CAAkBjY,CACX,CAAA,IAAA,CAGT,GAAIA,CAAU,CAAA,EAAA,GAAO,OAIrB,CAAIA,GAAAA,CAAAA,CAAU,SAAW,WAAa,CAAA,CACpC,IAAM4W,EAAAA,CAAM5W,CAAU,CAAA,KAAA,CAAM,CAAC,CAI7B,CAAA,OAHiBxF,EAAO,MAAO,CAAA,IAAA,CAC5B+iB,IAAUA,EAAM,CAAA,IAAA,EAAM,IAAS3G,GAAAA,EAClC,CACiB,EAAA,UAAA,CAAW,KAAMpO,EAAa,EAAA,CAI7C,GAHyBgM,CAAAA,CACvBja,CAAO,CAAA,KAAA,CAAM,UACf,CACqB,CAAA,IAAA,CAAKiO,EAAS,CAAA,IAAI,CACrC,CAAA,OAAAyP,EAAkBzP,EACX,CAAA,IAEX,CAAC,CACH,CAEA,OAAOxI,CAAU,CAAA,UAAA,CAAW,IAAMwI,CAAAA,EAAAA,EAAa,CAI7C,GAHyBgM,EACvBja,CAAO,CAAA,KAAA,CAAM,UACf,CAAA,CACqB,IAAKiO,CAAAA,EAAAA,CAAS,IAAI,CACrC,CAAA,OAAAyP,CAAkBzP,CAAAA,EAAAA,CACX,IAEX,CAAC,EACH,CAAC,CAAA,CAED,GAAIyqB,EAAuBhb,EAAAA,CAAAA,CAAiB,CACrC2a,CACHA,GAAAA,CAAAA,CAAqB,IAEhBD,CAAAA,CAAAA,GACHxC,EAAmB,CAAA,CAAE,KAAAhjB,CAAK,CAAC,CAC3B2iB,CAAAA,EAAAA,CAAuB,CAAE,IAAA,CAAA3iB,CAAK,CAAC,CAAA,CAC/BwlB,CAAkC,CAAA,IAAA,CAAA,CAG/BD,CACH9B,GAAAA,EAAAA,CAA6B,CAAE,IAAAzjB,CAAAA,CAAK,CAAC,CACrCulB,CAAAA,CAAAA,CAAkC,MAGpCvlB,CAAK,CAAA,MAAA,CAAO,CACV,MAAA,CAAQxS,CAAO,CAAA,IAAA,CACf,KAAMg2B,EACR,CAAC,EAED8B,CAAmBtlB,CAAAA,CAAAA,CAAK,OAAO,CAC7B,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQxS,CAAO,CAAA,IAAA,CACf,KAAM,cACR,CAAC,GAGHq4B,CAAiB,CAAA,IAAA,CAEjB,GAAM,CAAE,QAAA,CAAAxC,CAAS,CAAA,CAAIyB,EAAe,CAAA,CAClC,OAAAz3B,CACA,CAAA,IAAA,CAAA2S,CACA,CAAA,SAAA,CAAAC,CACA,CAAA,eAAA,CAAA8kB,CACF,CAAC,CAAA,CACK,CAAE,SAAA,CAAA5C,EAAU,CAAA,CAAI8C,GAAgB,CACpC,MAAA,CAAA53B,EACA,IAAA2S,CAAAA,CAAAA,CACA,UAAAC,CACA,CAAA,UAAA,CAAYzS,CAAO,CAAA,IAAA,CACnB,eAAAu3B,CAAAA,CACF,CAAC,CACK,CAAA,CAAE,YAAAlB,CAAAA,EAAa,CAAIuB,CAAAA,EAAAA,CAAmB,CAC1C,MAAA/3B,CAAAA,CAAAA,CACA,IAAA2S,CAAAA,CAAAA,CACA,SAAAC,CAAAA,CAAAA,CACA,gBAAA8kB,CACF,CAAC,EAEKxP,EAAanE,CAAAA,EAAAA,CAA6BnR,EAAU,UAAU,CAAA,CAE9DmjB,EAAe,CAAA,CAAA,EAAGb,EAAY,CAAA,CAAA,EAAIc,CAAQ,CAC1CS,CAAAA,CAAAA,CAAAA,EAAAA,CAAsB,CAAQV,KAAAA,EAAAA,EAAY,CAC1CW,2CAAAA,CAAAA,CAAAA,EAAAA,CAAgB,GAAGjZ,CAAgB,CAAA,IAAI,CAAMgZ,GAAAA,EAAAA,EAAmB,CAEhEX,CAAAA,CAAAA,EAAAA,CAAoBjnB,EAAS,aAAc,CAAA,CAC/C,YAAa,IACb,CAAA,UAAA,CAAYA,EAAS,aAAc,CAAA,CACjC,UAAY,CAAA,CACV,CACE,UAAA,CAAAqZ,GACA,IAAM,CAAA,SAAA,CACN,KAAM8N,CACR,CACF,EACA,UAAYD,CAAAA,EAAAA,CACZ,UAAYN,CAAAA,EAAAA,CAAsB,CAChC,EAAA,CAAI7iB,EAAU,IACd,CAAA,UAAA,CAAY,IACd,CAAC,CACH,CAAC,CACD,CAAA,IAAA,CAAM2kB,EAAe,CAAA,CACnB,MAAAx3B,CAAAA,CAAAA,CACA,GAAI6S,CAAU,CAAA,IAAA,CACd,UAAY,CAAA,IAAA,CACZ,SAAAA,CAAAA,CACF,CAAC,CACH,CAAC,CACDD,CAAAA,CAAAA,CAAK,GAAImjB,CAAAA,EAAiB,EAE1B,IAAMrsB,EAAAA,CAAYoF,EAAS,aAAc,CAAA,CAEvC,QAAS,EAAC,CACV,WAAa,CAAA,IAAA,CACb,UAAYA,CAAAA,CAAAA,CAAS,cAAc,CACjC,UAAA,CAAY,CACV,CACE,UAAAqZ,CAAAA,EAAAA,CACA,KAAM,SACN,CAAA,IAAA,CAAM8N,CACR,CACF,CACA,CAAA,UAAA,CAAY,CACVnnB,CAAS,CAAA,kBAAA,CAAmB,CAC1B,IAAM,CAAA,CACJA,EAAS,gBAAiB,CAAA,CACxB,QAAU,CAAA,CACR,CACE,KAAA,CAAO,MACP,KAAO,CAAA,CAAC,YAAY,CACtB,CACF,CAAA,CACA,IAAK,CACH,CACE,GAAK,CAAA,SAAA,CACL,KAAOA,CAAAA,CAAAA,CAAS,cAAc,CAC5B,KAAA,CAAO,KACP,SAAW,CAAA,IAAA,CACX,WAAY,CACV,CACE,WAAa,CAAA,CACX,CACE,IAAA,CAAM,WACR,CACA,CAAA,CACE,KAAM,UACR,CAAA,CACA,CACE,IAAM,CAAA,QACR,CACF,CACF,CACF,CAAA,CACA,WAAY,CACVA,CAAAA,CAAS,cAAc,CACrB,OAAA,CAAS,CACP,CACE,KAAA,CAAO,KACP,CAAA,KAAA,CAAO,CAAC,YAAY,CACtB,CACF,CAAA,CACA,UAAYA,CAAAA,CAAAA,CAAS,qBAAsB,CAAA,CACzC,UAAWA,CAAS,CAAA,gBAAA,CAAiB,CACnC,IAAA,CAAMA,CAAS,CAAA,gBAAA,CAAiB,CAC9B,IAAM,CAAA,WACR,CAAC,CACD,CAAA,QAAA,CAAU,MACV,KAAOA,CAAAA,CAAAA,CAAS,GAAI,CAAA,MAAA,CAAO,QAAQ,CACrC,CAAC,CACD,CAAA,SAAA,CAAWA,CAAS,CAAA,gBAAA,CAAiB,CACnC,SAAA,CAAW,KACX,GAAK,CAAA,CACH,CACE,GAAA,CAAK2oB,EACHiB,CAAAA,EACF,EACA,KAAO5pB,CAAAA,CAAAA,CAAS,iBAAiB,CAC/B,SAAA,CAAW,KACX,GAAK,CAAA,CACH,CACE,GAAA,CAAK4O,CAAgB,CAAA,IAAA,CACrB,MAAO5O,CAAS,CAAA,UAAA,CAAW,CACzB,IAAA,CAAM,WACR,CAAC,CACH,CACF,CACF,CAAC,CACH,CACF,CACF,CAAC,CACD,CAAA,QAAA,CAAUA,EAAS,UAAW,CAAA,CAC5B,KAAM,WACR,CAAC,CACH,CAAC,CACD,CAAA,IAAA,CAAM,OACN,QAAU4nB,CAAAA,EACZ,CAAC,CACD5nB,CAAAA,CAAAA,CAAS,cAAc,CACrB,UAAA,CAAYA,CAAS,CAAA,cAAA,CAAe,CAClC,YAAA,CAAc,uBACd,UAAY,CAAA,CAAC,WAAY,MAAM,CACjC,CAAC,CACD,CAAA,IAAA,CAAM,QACR,CAAC,CACDA,CAAAA,CAAAA,CAAS,cAAc,CACrB,WAAA,CAAa,IACb,CAAA,UAAA,CAAYA,CAAS,CAAA,eAAA,CAAgB,CACnC,UAAYA,CAAAA,CAAAA,CAAS,cAAe,CAAA,CAClC,YAAc0nB,CAAAA,CAAAA,CACd,WAAY,CACV1nB,CAAAA,CAAS,iBAAiB,CACxB,SAAA,CAAW,KACX,GAAK,CAAA,CACH,CACE,MAAA,CAAQ,SACV,CAAA,CACA,CACE,MAAQ,CAAA,QACV,CACA,CAAA,CACE,GAAK,CAAA,QAAA,CACL,UAAW,IACX,CAAA,KAAA,CAAOA,CAAS,CAAA,UAAA,CAAW,CACzB,IAAA,CAAM,QACR,CAAC,CACH,EACA,CACE,GAAA,CAAK,eACL,KAAO,CAAA,IACT,CACF,CACF,CAAC,CACH,CACF,CAAC,CACH,CAAC,CAAA,CACD,IAAM,CAAA,MACR,CAAC,CACDA,CAAAA,CAAAA,CAAS,cAAe,CAAA,CACtB,UAAY,CAAA,MACd,CAAC,CACH,CACF,CAAC,CACH,CAAA,CACA,CACE,GAAK,CAAA,UAAA,CACL,KAAOA,CAAAA,CAAAA,CAAS,cAAe,CAAA,CAC7B,aAAc0oB,EAAe,CAAA,CAC3B,OAAAx3B,CACA,CAAA,EAAA,CAAI6S,EAAU,IACd,CAAA,UAAA,CAAY,IACZ,CAAA,SAAA,CAAAA,CACF,CAAC,EACD,UAAY,CAAA,CAAC,SAAS,CACxB,CAAC,CACH,CACF,CACF,CAAC,CACH,CACA,CAAA,IAAA,CAAMujB,GAEN,KAAO,CAAA,CACLK,EACA1B,CAAAA,EAAAA,CAAU,IACV,CAAA,CAAA,EAAG,OAAOmD,CAAqB,EAAA,QAAA,CAAWA,CAAmBA,CAAAA,CAAAA,CAAiB,IAAI,CAAA,CAAA,EAAIzB,EAAY,CAClGT,CAAAA,CAAAA,CAAAA,EAAAA,CACAW,EACF,CACF,CAAC,CACH,CACF,CAAC,CACD,CAAA,IAAA,CAAMU,EAA2BxkB,CAAAA,CAAS,CAC5C,CAAC,CAAA,CACDD,CAAK,CAAA,GAAA,CAAIlJ,EAAS,EACpB,CACF,CAGA,GACEtJ,CAAO,CAAA,eAAA,EACN,CAAC,QAAA,CAAU,QAAS,MAAQ,CAAA,KAAK,EAA4B,QAC5DyS,CAAAA,CAAAA,CAAU,MACZ,CACA,CAAA,CACKylB,CACHA,GAAAA,CAAAA,CAAe,IAEf1lB,CAAAA,CAAAA,CAAK,OAAO,CACV,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQxS,CAAO,CAAA,IAAA,CACf,KAAM42B,CACR,CAAC,CAGHyB,CAAAA,CAAAA,CAAAA,CAAiB,IAEjB,CAAA,GAAM,CAAE,QAAAxC,CAAAA,CAAS,EAAIyB,EAAe,CAAA,CAClC,OAAAz3B,CACA,CAAA,IAAA,CAAA2S,CACA,CAAA,SAAA,CAAAC,CACA,CAAA,eAAA,CAAA8kB,CACF,CAAC,CAAA,CACK,CAAE,SAAA5C,CAAAA,EAAU,EAAI8C,EAAgB,CAAA,CACpC,MAAA53B,CAAAA,CAAAA,CACA,IAAA2S,CAAAA,CAAAA,CACA,UAAAC,CACA,CAAA,UAAA,CAAYzS,EAAO,IACnB,CAAA,eAAA,CAAAu3B,CACF,CAAC,CAAA,CACK,CAAE,YAAA,CAAAlB,CAAa,CAAA,CAAIuB,GAAmB,CAC1C,MAAA,CAAA/3B,CACA,CAAA,IAAA,CAAA2S,CACA,CAAA,SAAA,CAAAC,EACA,eAAA8kB,CAAAA,CACF,CAAC,CAAA,CAEKrzB,EAAawK,CAAAA,CAAAA,CAAS,cAAc,CACxC,UAAA,CAAY,CACV,CACE,UAAA,CAAY,MACZ,IAAM,CAAA,SAAA,CACN,IAAM,CAAA,CAAA,QAAA,EAAWmnB,CAAQ,CAAA,CAAA,CAC3B,CACF,CACA,CAAA,UAAA,CAAY,CACVnnB,CAAAA,CAAS,aAAc,CAAA,CACrB,WAAYA,CAAS,CAAA,gBAAA,CAAiB,CACpC,GAAA,CAAK,CACH,CACE,IAAK,YACL,CAAA,KAAA,CAAOA,EAAS,aAAc,CAAA,CAC5B,MAAO,IACP,CAAA,SAAA,CAAW,IACX,CAAA,UAAA,CAAY,CACV,CACE,KAAM,cACR,CACF,CACA,CAAA,UAAA,CAAY,CACVA,CAAAA,CAAS,cAAc,CACrB,WAAA,CAAa,IACb,CAAA,UAAA,CAAYA,CAAS,CAAA,eAAA,CAAgB,CACnC,UAAYA,CAAAA,CAAAA,CAAS,eAAe,CAClC,YAAA,CAAc0nB,EACd,UAAY,CAAA,CACV1nB,CAAS,CAAA,gBAAA,CAAiB,CACxB,SAAA,CAAW,KACX,GAAK,CAAA,CACH,CACE,MAAQ,CAAA,SACV,EACA,CACE,MAAA,CAAQ,cACV,CAAA,CACA,CACE,GAAA,CAAK,eACL,KAAO,CAAA,IACT,CACF,CACF,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACD,CAAA,IAAA,CAAM,MACR,CAAC,CAAA,CACDA,CAAS,CAAA,cAAA,CAAe,CACtB,UAAA,CAAY,MACd,CAAC,CACH,CACF,CAAC,CACH,CACF,CACF,CAAC,CAAA,CACD,KAAM+nB,EAEN,CAAA,QAAA,CAAU,GAAGG,CAAa,CAAA,CAAA,EAAIP,CAAY,CAAA,EAAA,EAAK1B,EAAU,CAAA,IAAI,KAAKkB,CAAQ,CAAA,CAAA,CAC5E,CAAC,CAAA,CACDnnB,CAAS,CAAA,cAAA,CAAe,CACtB,UAAY+nB,CAAAA,EACd,CAAC,CACH,CACF,CAAC,EACKntB,EAAYoF,CAAAA,CAAAA,CAAS,cAAc,CAEvC,OAAA,CAAS,EACT,CAAA,WAAA,CAAa,IACb,CAAA,UAAA,CAAAxK,EACA,CAAA,IAAA,CAAMgzB,GAAsBzkB,CAAS,CACvC,CAAC,CAAA,CACDD,CAAK,CAAA,GAAA,CAAIlJ,EAAS,EACpB,CAAA,CAEI6uB,CAAcF,EAAAA,CAAAA,GAChBzlB,CAAK,CAAA,MAAA,CAAO,CACV,KAAO,CAAA,eAAA,CACP,OAAQ3D,EAAmB,CAAA,CACzB,aAAcsV,CAAM,CAAA,MAAA,CAAQ,oBAAqB,EAAA,CACjD,YAAcnkB,CAAAA,CAAAA,CAAO,MACvB,CAAC,CAAA,CACD,KAAM,QACR,CAAC,EAGCq4B,CACF7lB,EAAAA,CAAAA,CAAK,MAAO,CAAA,CACV,MAAQ3D,CAAAA,EAAAA,CAAmB,CACzB,YAAcsV,CAAAA,CAAAA,CAAM,IAAK,oBAAqB,EAAA,CAC9C,aAAcnkB,CAAO,CAAA,MACvB,CAAC,CAAA,CACD,IAAMo2B,CAAAA,CAAAA,CAAQ,MAAM,GAAG,CAAA,CAAE,CAAC,CAC5B,CAAC,EAEL,CAEJ,CCvyCO,CAAA,IAAMliB,EAAuC,CAAA,CAClD,aAAe,CAAA,CAAC,eAAgB,qBAAqB,CAAA,CACrD,SAAUgB,EACV,CAAA,cAAA,CAAgBgP,GAChB,eAAiB,CAAA,KAAA,CACjB,oBAAsB,CAAA,IAAA,CACtB,eAAiB,CAAA,IAAA,CACjB,KAAM,sCACN,CAAA,MAAA,CAAQ,sCACR,CAAA,YAAA,CAAc,IAChB,CAAA,CCVO,IAAMhQ,EAAuC,CAAA,CAClD,aAAe,CAAA,CAAC,cAAgB,CAAA,qBAAqB,EACrD,QAAUgB,CAAAA,EAAAA,CACV,eAAgBgP,EAChB,CAAA,eAAA,CAAiB,MACjB,oBAAsB,CAAA,IAAA,CACtB,eAAiB,CAAA,IAAA,CACjB,IAAM,CAAA,uBAAA,CACN,OAAQ,uBACR,CAAA,YAAA,CAAc,IAChB,CAAA,CCVO,IAAMhQ,EAAAA,CAAuC,CAClD,aAAe,CAAA,CAAC,cAAgB,CAAA,qBAAqB,CACrD,CAAA,QAAA,CAAUgB,GACV,cAAgBgP,CAAAA,EAAAA,CAChB,gBAAiB,KACjB,CAAA,oBAAA,CAAsB,KACtB,eAAiB,CAAA,IAAA,CACjB,IAAM,CAAA,uBAAA,CACN,MAAQ,CAAA,uBAAA,CACR,aAAc,IAChB,CAAA,CCVO,IAAMhQ,EAAuC,CAAA,CAClD,cAAe,CAAC,cAAA,CAAgB,qBAAqB,CAAA,CACrD,QAAUgB,CAAAA,EAAAA,CACV,eAAgBgP,EAChB,CAAA,eAAA,CAAiB,MACjB,oBAAsB,CAAA,IAAA,CACtB,gBAAiB,IACjB,CAAA,IAAA,CAAM,wBACN,CAAA,MAAA,CAAQ,wBACR,CAAA,YAAA,CAAc,IAChB,CCVO,CAAA,IAAMhQ,EAAuC,CAAA,CAClD,aAAe,CAAA,CAAC,eAAgB,qBAAqB,CAAA,CACrD,QAAUgB,CAAAA,EAAAA,CACV,cAAgBgP,CAAAA,EAAAA,CAChB,gBAAiB,KACjB,CAAA,oBAAA,CAAsB,KACtB,eAAiB,CAAA,IAAA,CACjB,KAAM,qBACN,CAAA,MAAA,CAAQ,qBACR,CAAA,YAAA,CAAc,IAChB,CAAA,CCJA,IAAMqU,EAAY,CAAA,SAAA,CAEZC,EAA0B,CAAA,CAAC,CAC/B,OAAA,CAAAjmB,EACA,SAAAE,CAAAA,CACF,CAG4B,GAAA,CAC1B,IAAMD,CAAAA,CAAOD,EAAQ,IAAK,CAAA,CAAE,GAAIgmB,EAAU,CAAC,EACrCE,CAAYlmB,CAAAA,CAAAA,CAAQ,IAAK,CAAA,CAAE,EAAIJ,CAAAA,CAAQ,CAAC,CAExC5K,CAAAA,CAAAA,CAA8B,EAAC,CAE/BmL,CAAiB+lB,CAAAA,CAAAA,CAAU,WAAW,CAC1C,IAAA,CAAMzmB,CAAe,CAAA,CAAE,EAAIS,CAAAA,CAAAA,CAAU,GAAI,IAAM,CAAA,MAAO,CAAC,CACvD,CAAA,SAAA,CAAW,MACb,CAAC,CAAA,CACGC,CAAe,CAAA,IAAA,GACbD,CAAU,CAAA,IAAA,GACZD,EAAK,MAAO,CAAA,CACV,OAAQ,IACR,CAAA,MAAA,CAAQA,EAAK,kBAAmB,CAAA,CAAE,OAAAD,CAAAA,CAAAA,CAAS,EAAIJ,CAAAA,CAAQ,CAAC,CACxD,CAAA,IAAA,CAAMO,EAAe,IACvB,CAAC,EACDnL,CAAW,CAAA,IAAA,CAAK,CACd,UAAA,CAAYkL,CAAU,CAAA,IAAA,CAAK,SAC3B,IAAM,CAAA,MAAA,CACN,IAAM,CAAA,CAAA,EAAGC,CAAe,CAAA,IAAI,UAC9B,CAAC,CAAA,CAAA,CAGCD,CAAU,CAAA,UAAA,GACRA,CAAU,CAAA,UAAA,CAAW,SACvBD,CAAK,CAAA,MAAA,CAAO,CACV,MAAQ,CAAA,IAAA,CACR,OAAQA,CAAK,CAAA,kBAAA,CAAmB,CAAE,OAAA,CAAAD,CAAS,CAAA,EAAA,CAAIJ,CAAQ,CAAC,CAAA,CACxD,IAAMO,CAAAA,CAAAA,CAAe,IACvB,CAAC,EACDnL,CAAW,CAAA,IAAA,CAAK,CACd,UAAA,CAAYgd,EACV9R,CAAAA,CAAAA,CAAU,WAAW,MACvB,CAAA,CACA,KAAM,SACN,CAAA,IAAA,CAAM,GAAGC,CAAe,CAAA,IAAI,CAC9B,WAAA,CAAA,CAAC,CAGCD,CAAAA,CAAAA,CAAAA,CAAU,WAAW,IACvBD,GAAAA,CAAAA,CAAK,MAAO,CAAA,CACV,MAAQ,CAAA,IAAA,CACR,OAAQA,CAAK,CAAA,kBAAA,CAAmB,CAAE,OAAA,CAAAD,CAAS,CAAA,EAAA,CAAIJ,CAAQ,CAAC,CAAA,CACxD,KAAMO,CAAe,CAAA,IACvB,CAAC,CACDnL,CAAAA,CAAAA,CAAW,IAAK,CAAA,CACd,UAAYgd,CAAAA,EAAAA,CACV9R,EAAU,UAAW,CAAA,IACvB,EACA,IAAM,CAAA,QAAA,CACN,KAAM,CAAGC,EAAAA,CAAAA,CAAe,IAAI,CAAA,QAAA,CAC9B,CAAC,CAAA,CAAA,CAGCD,EAAU,UAAW,CAAA,KAAA,GACvBD,EAAK,MAAO,CAAA,CACV,OAAQ,IACR,CAAA,MAAA,CAAQA,CAAK,CAAA,kBAAA,CAAmB,CAAE,OAAA,CAAAD,EAAS,EAAIJ,CAAAA,CAAQ,CAAC,CAAA,CACxD,IAAMO,CAAAA,CAAAA,CAAe,IACvB,CAAC,CAAA,CACDnL,CAAW,CAAA,IAAA,CAAK,CACd,UAAA,CAAYgd,GACV9R,CAAU,CAAA,UAAA,CAAW,KACvB,CACA,CAAA,IAAA,CAAM,cACN,IAAM,CAAA,CAAA,EAAGC,CAAe,CAAA,IAAI,CAC9B,SAAA,CAAA,CAAC,KAKP,GAAM,CAAE,MAAA8S,CAAAA,CAAAA,CAAQ,SAAAC,CAAAA,CAAU,EAAIF,EAAsB9S,CAAAA,CAAS,CAEzDimB,CAAAA,CAAAA,CACEvE,CAAmBsE,CAAAA,CAAAA,CAAU,WAAW,CAC5C,IAAA,CAAMzmB,EAAe,CAAE,EAAA,CAAIS,EAAU,EAAI,CAAA,IAAA,CAAM,QAAS,CAAC,CACzD,CAAA,SAAA,CAAW,MACb,CAAC,CAAA,CACD,GAAI0hB,CAAAA,CAAiB,IAAQ3O,EAAAA,CAAAA,EAAUA,EAAO,UAAY,CAAA,CACxD,IAAMnX,CAAAA,CAAO,MAAO,CAAA,IAAA,CAAKmX,EAAO,UAAU,CAAA,CAC1C,GAAInX,CAAK,CAAA,MAAA,CAAA,CAEP,GAAI,CADuBA,CAAAA,CAAK,QAAS,CAAA,SAAS,CAEhDmE,CAAAA,CAAAA,CAAK,OAAO,CACV,MAAA,CAAQ,KACR,MAAQA,CAAAA,CAAAA,CAAK,mBAAmB,CAAE,OAAA,CAAAD,CAAS,CAAA,EAAA,CAAIJ,CAAQ,CAAC,EACxD,IAAMgiB,CAAAA,CAAAA,CAAiB,IACzB,CAAC,CAAA,CACDuE,EAAsBhqB,CAAS,CAAA,iBAAA,CAAkB,CAC/C,QAAA,CAAUylB,CAAiB,CAAA,IAC7B,CAAC,CACQ9lB,CAAAA,KAAAA,GAAAA,CAAAA,CAAK,MAAS,CAAA,CAAA,CAAG,CAC1BmE,CAAAA,CAAK,OAAO,CACV,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQA,CAAK,CAAA,kBAAA,CAAmB,CAAE,OAAAD,CAAAA,CAAAA,CAAS,GAAIJ,CAAQ,CAAC,EACxD,IAAMgiB,CAAAA,CAAAA,CAAiB,IACzB,CAAC,CACD,CAAA,IAAMC,EAAa1lB,CAAS,CAAA,iBAAA,CAAkB,CAC5C,QAAA,CAAUylB,CAAiB,CAAA,IAC7B,CAAC,CACKjuB,CAAAA,CAAAA,CAAcwI,CAAS,CAAA,eAAA,CAAgB,CAC3C,OAAA,CAASA,EAAS,aAAc,CAAA,CAAE,KAAM,SAAU,CAAC,CACrD,CAAC,CAAA,CACDgqB,CAAsBhqB,CAAAA,CAAAA,CAAS,iBAAkB,CAAA,CAC/C,cAAe,CAAC0lB,CAAAA,CAAYluB,CAAW,CAAA,CACvC,QAAU,CAAA,MACZ,CAAC,EACH,CAAA,CAEJ,CAEA,IAAIyyB,CACErE,CAAAA,CAAAA,CAAsBmE,EAAU,UAAW,CAAA,CAC/C,KAAMzmB,CAAe,CAAA,CAAE,GAAIS,CAAU,CAAA,EAAA,CAAI,IAAM,CAAA,WAAY,CAAC,CAAA,CAC5D,UAAW,MACb,CAAC,EACD,GAAI6hB,CAAAA,CAAoB,MAAQ7O,CAAaA,EAAAA,CAAAA,CAAU,UAAY,CAAA,CACjE,IAAMpX,CAAAA,CAAO,OAAO,IAAKoX,CAAAA,CAAAA,CAAU,UAAU,CAC7C,CAAA,GAAIpX,EAAK,MAEP,CAAA,CAAA,GAAI,CADuBA,CAAAA,CAAK,QAAS,CAAA,SAAS,EAEhDmE,CAAK,CAAA,MAAA,CAAO,CACV,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQA,EAAK,kBAAmB,CAAA,CAAE,OAAAD,CAAAA,CAAAA,CAAS,EAAIJ,CAAAA,CAAQ,CAAC,CACxD,CAAA,IAAA,CAAMmiB,EAAoB,IAC5B,CAAC,EACDqE,CAAyBjqB,CAAAA,CAAAA,CAAS,iBAAkB,CAAA,CAClD,QAAU4lB,CAAAA,CAAAA,CAAoB,IAChC,CAAC,CAAA,CAAA,KAAA,GACQjmB,CAAK,CAAA,MAAA,CAAS,CAAG,CAAA,CAC1BmE,EAAK,MAAO,CAAA,CACV,MAAQ,CAAA,IAAA,CACR,MAAQA,CAAAA,CAAAA,CAAK,mBAAmB,CAAE,OAAA,CAAAD,EAAS,EAAIJ,CAAAA,CAAQ,CAAC,CACxD,CAAA,IAAA,CAAMmiB,CAAoB,CAAA,IAC5B,CAAC,CAAA,CACD,IAAMC,CAAgB7lB,CAAAA,CAAAA,CAAS,iBAAkB,CAAA,CAC/C,QAAU4lB,CAAAA,CAAAA,CAAoB,IAChC,CAAC,CAAA,CACKpuB,CAAcwI,CAAAA,CAAAA,CAAS,eAAgB,CAAA,CAC3C,QAASA,CAAS,CAAA,aAAA,CAAc,CAAE,IAAM,CAAA,SAAU,CAAC,CACrD,CAAC,CACDiqB,CAAAA,CAAAA,CAAyBjqB,CAAS,CAAA,iBAAA,CAAkB,CAClD,aAAe,CAAA,CAAC6lB,EAAeruB,CAAW,CAAA,CAC1C,SAAU,MACZ,CAAC,EACH,CAAA,CAEJ,CAEA,IAAM0yB,EAAa,CAACF,CAAAA,CAAqBC,CAAsB,CAAE,CAAA,MAAA,CAC/D,OACF,CAUA,CAAA,OATIC,CAAW,CAAA,MAAA,EACbrxB,CAAW,CAAA,IAAA,CAAK,CACd,IAAM,CAAA,OAAA,CACN,IAAMmH,CAAAA,CAAAA,CAAS,oBAAqB,CAAA,CAClC,MAAOkqB,CACT,CAAC,CACH,CAAC,CAGErxB,CAAAA,CAAAA,CAAW,OAIe,CAC7B,IAAA,CAAMkL,EAAU,EAChB,CAAA,IAAA,CAAM/D,EAAS,QAAS,CAAA,cAAA,CAAgB,CACtCA,CAAAA,CAAS,iBAAkB,CAAA,CACzB,WAAAnH,CACA,CAAA,mBAAA,CAAqB,KACvB,CAAC,CACH,CAAC,CACH,CAXE,CAAA,MAaJ,CAEa2N,CAAAA,EAAAA,CAAkC,CAAC,CAAE,QAAA3C,CAAS,CAAA,MAAA,CAAAvS,CAAO,CAAM,GAAA,CACtE,IAAMwS,CAAOD,CAAAA,CAAAA,CAAQ,UAAW,CAAA,CAC9B,eAAiBvS,CAAAA,CAAAA,CAAO,gBACxB,EAAIu4B,CAAAA,EAAAA,CACJ,IAAMv4B,CAAAA,CAAAA,CAAO,MACf,CAAC,EAEK64B,CAAiC,CAAA,EAEvCtmB,CAAAA,CAAAA,CAAQ,SAAU,CAAA,WAAA,CAAa,CAAC,CAAE,SAAA,CAAAE,CAAU,CAAM,GAAA,CAChD,IAAMqmB,CAAeN,CAAAA,EAAAA,CAAwB,CAAE,OAAA,CAAAjmB,CAAS,CAAA,SAAA,CAAAE,CAAU,CAAC,CAAA,CAC/DqmB,GACFD,CAAc,CAAA,IAAA,CAAKC,CAAY,EAEnC,CAAC,CAEDvmB,CAAAA,CAAAA,CAAQ,SAAU,CAAA,OAAA,CAAS,IAAM,CAC/B,IAAMT,EAAaU,CAAK,CAAA,UAAA,CAAW,CACjC,IAAM,CAAA,eAAA,CACN,MAAQ,CAAA,IAAA,CACR,SAAW,CAAA,MACb,CAAC,CAEIV,CAAAA,CAAAA,CAAW,IAIZ+mB,GAAAA,CAAAA,CAAc,MAChBrmB,EAAAA,CAAAA,CAAK,OAAO,CACV,MAAA,CAAQ,IACR,CAAA,MAAA,CAAQ,SACR,CAAA,IAAA,CAAM,cACR,CAAC,CAAA,CAGHA,EAAK,GACH9D,CAAAA,CAAAA,CAAS,qBAAqB,CAC5B,UAAA,CAAY,IACZ,CAAA,IAAA,CAAMoD,CAAW,CAAA,IAAA,CACjB,KAAMpD,CAAS,CAAA,iBAAA,CAAkB,CAC/B,UAAA,CAAYmqB,CACZ,CAAA,mBAAA,CAAqB,KACvB,CAAC,CACH,CAAC,CACH,CACF,EAAA,CAAC,EACH,CC/OO,CAAA,IAAM3kB,GAAuC,CAClD,aAAA,CAAe,CAAC,qBAAqB,CAAA,CACrC,QAAUgB,CAAAA,EAAAA,CACV,cAAgB,CAAA,IAAM,EACtB,CAAA,eAAA,CAAiB,KACjB,CAAA,IAAA,CAAM,SACN,CAAA,MAAA,CAAQ,SACV,CCPO,CAAA,IAAMhB,EAAuC,CAAA,CAClD,QAAUgB,CAAAA,EAAAA,CACV,eAAgB,IAAM,GACtB,KAAO,CAAA,CAAC,WAAW,CACnB,CAAA,eAAA,CAAiB,KACjB,CAAA,IAAA,CAAM,KACN,CAAA,MAAA,CAAQ,KACV,CCmHO,CAAA,IAAM6jB,GAA4D,CACvE,uBAAA,CAAyB7kB,GACzB,uBAAyBA,CAAAA,EAAAA,CACzB,sBAAwBA,CAAAA,EAAAA,CACxB,sBAAwBA,CAAAA,EAAAA,CACxB,mBAAoBA,EACpB,CAAA,cAAA,CAAgBA,GAChB,uBAAyBA,CAAAA,EAAAA,CACzB,sBAAuBA,EACvB,CAAA,sCAAA,CAAwCA,EACxC,CAAA,uBAAA,CAAyBA,EACzB,CAAA,uBAAA,CAAyBA,GACzB,wBAA0BA,CAAAA,EAAAA,CAC1B,qBAAuBA,CAAAA,EAAAA,CACvB,OAAAA,CAAAA,EAAAA,CACA,iBAAkBA,EAClB,CAAA,cAAA,CAAgBA,EAChB,CAAA,cAAA,CAAgBA,EAChB,CAAA,aAAA,CAAeA,GACf,YAAcA,CAAAA,EAAAA,CACd,IAAAA,EACF,CAAA,KChIa8kB,EAAiB,CAAA,CAC5B,qBACA,CAAA,cACF,CAEMC,CAAAA,EAAAA,CAAY15B,GAA4C,CAC5D,IAAI25B,CAAyB,CAAA,CAC3B,IAAM,CAAA,EACR,EACA,OAAI,OAAO35B,CAAW,CAAA,KAAA,EAAU,QAC9B25B,CAAAA,CAAAA,CAAM,KAAO35B,CAAW,CAAA,KAAA,CAExBA,EAAW,KACVA,GAAAA,CAAAA,CAAW,MAAM,IAAQA,EAAAA,CAAAA,CAAW,KAAM,CAAA,YAAA,CAAA,CAE3C25B,CAAQ,CAAA,CACN,GAAGA,CACH,CAAA,IAAA,CAAM,wBACN,CAAA,GAAG35B,CAAW,CAAA,KAChB,EAEA25B,CAAQ,CAAA,CACN,GAAGA,CAAAA,CACH,IAAM35B,CAAAA,CAAAA,CAAW,KACnB,CAEK25B,CAAAA,CACT,EAEMC,EAAmB,CAAA,CAAC,CACxB,aAAAC,CAAAA,CAAAA,CACA,WAAAC,CAAAA,CAAAA,CACA,iBAAAC,CAAAA,CACF,IAI+C,CAC7C,IAAMC,EAA2B,IAAI,GAAA,CAC/BC,EAAc,IAAI,GAAA,CAClBC,CAA6B,CAAA,EAE7BC,CAAAA,CAAAA,CAAO35B,GAAwB,CACnC,GAAIw5B,EAAyB,GAAIx5B,CAAAA,CAAI,EACnC,MAAM,IAAI,KAAM,CAAA,CAAA,gCAAA,EAAmCA,CAAI,CAAA,CAAA,CAAG,EAG5D,GAAI,CAACy5B,CAAY,CAAA,GAAA,CAAIz5B,CAAI,CAAA,CAAG,CAI1B,GAHAw5B,CAAAA,CAAyB,GAAIx5B,CAAAA,CAAI,CAG7B,CAAA,CADiBq5B,EAAcr5B,CAAmB,CAAA,CAEpD,MAAM,IAAI,KAAA,CACR,wCAAiCA,CAAI,CAAA,2DAAA,CACvC,CAGF,CAAA,IAAM45B,CAAiBZ,CAAAA,EAAAA,CAAqBh5B,CAAmB,CACzD65B,CAAAA,CAAAA,CAAcN,CAAkBv5B,CAAAA,CAAmB,CACzD,CAAA,GAAI65B,GAAeD,CAAgB,CAAA,CACjC,IAAME,CAAAA,CAAqB,MAAO,CAAA,IAAA,CAAKD,CAAW,CAAE,CAAA,IAAA,CAAM37B,GACxDA,CAAI,CAAA,UAAA,CAAW,GAAG,CACpB,CAAA,CACA,GAAI47B,CAAAA,CACF,MAAM,IAAI,MACR,CAA8B95B,kCAAAA,EAAAA,CAAI,CAAsD85B,mDAAAA,EAAAA,CAAkB,CAC5G,CAAA,CAAA,CAEJ,CAEA,IAAMj6B,CAAAA,CAAS,CACb,aAAA,CAAe,EAAC,CAChB,GAAG+5B,CACH,CAAA,GAAGC,CACL,CAEA,CAAA,GAAIh6B,EAAO,MAAQ,CAAA,CACjB,IAAM2S,CAAAA,CAAyB,CAC7B,gBAAA,CAAmBunB,GAAe,CAE9B,OAAOA,GAAe,QACtB,EAAA,CAACl6B,EAAO,aAAc,CAAA,QAAA,CAASk6B,CAAU,CAAA,GAEzCl6B,CAAO,CAAA,aAAA,CAAgB,CAAC,GAAGA,CAAAA,CAAO,cAAek6B,CAAU,CAAA,EAE/D,EACA,WAAa,CAAA,CAACjL,CAAKkL,CAAAA,CAAAA,GAAiB,CAClC,IAAA,IAAWC,KAAcX,CAAa,CAAA,CACpC,IAAMnlB,CAAAA,CACJ6kB,EAAqBiB,CAAAA,CAAyB,GAC9CZ,CAAcY,CAAAA,CAAyB,CACzC,CAAA,GACE9lB,CACAA,EAAAA,CAAAA,CAAc,OAAO,QAAS2a,CAAAA,CAAG,GACjCmL,CAAej6B,GAAAA,CAAAA,CAEf,OAAOi6B,CAEX,CAEA,MAAM,IAAI,KACRD,CAAAA,CAAAA,EACE,kDAA2ClL,CAAG,CAAA,OAAA,CAClD,CACF,CACF,CACAjvB,CAAAA,CAAAA,CAAO,OAAOA,CAAQ2S,CAAAA,CAAO,EAC/B,CAEA,IAAWunB,IAAAA,CAAAA,IAAcl6B,EAAO,aAC9B85B,CAAAA,CAAAA,CAAII,CAAU,CAGhBP,CAAAA,CAAAA,CAAyB,OAAOx5B,CAAI,CAAA,CACpCy5B,CAAY,CAAA,GAAA,CAAIz5B,CAAI,CAAA,CAGpB05B,EAAQ15B,CAAI,CAAA,CAAIH,EAClB,CACF,CAEA,CAAA,IAAA,IAAWG,KAAQs5B,CACjBK,CAAAA,CAAAA,CAAI35B,CAAI,CAAA,CAGV,OAAO,CACL,YAAa,KAAM,CAAA,IAAA,CAAKy5B,CAAW,CACnC,CAAA,OAAA,CAAAC,CACF,CACF,CAAA,CAEMQ,EAAa16B,CAAAA,CAAAA,EAA6C,CAC9D,IAAIkX,EAA2B,CAC7B,KAAA,CAAO,KACP,MAAQ,CAAA,KAAA,CACR,UAAW,IACX,CAAA,IAAA,CAAM,KACN,CAAA,IAAA,CAAM,EACR,CAAA,CACA,OAAI,OAAOlX,CAAAA,CAAW,QAAW,QAC/BkX,CAAAA,CAAAA,CAAO,KAAOlX,CAAW,CAAA,MAAA,CAEzBkX,CAAS,CAAA,CACP,GAAGA,CAAAA,CACH,GAAGlX,CAAW,CAAA,MAChB,CAEKkX,CAAAA,CACT,CAEMyjB,CAAAA,EAAAA,CAAkBl6B,GAClB,OAAOA,CAAAA,EAAW,QACbA,CAAAA,CAAAA,CAAO,UAAW,CAAA,iBAAiB,GAAKA,CAAO,CAAA,UAAA,CAAW,SAAS,CAI1EA,CAAAA,CAAAA,CAAO,KAAK,UAAW,CAAA,iBAAiB,CACxCA,EAAAA,CAAAA,CAAO,IAAK,CAAA,UAAA,CAAW,SAAS,CAE/BA,EAAAA,CAAAA,CAAO,KAASA,EAAAA,CAAAA,CAAO,KAAM,CAAA,QAAA,CAAS,QAAQ,CAI7Cm6B,CAAAA,EAAAA,CACJ56B,CAC4C,EAAA,CAC5C,IAAM+5B,CAAAA,CAAuC,EAEzCc,CAAAA,CAAAA,CAAwCpB,GACxCz5B,CAAW,CAAA,OAAA,GACbA,EAAW,OAAUA,CAAAA,CAAAA,CAAW,OAAQ,CAAA,MAAA,CACrCS,CACE,EAAA,OAAOA,GAAW,QAAYA,EAAAA,CAAAA,EAC9B,OAAOA,CAAAA,EAAW,QAAYA,EAAAA,CAAAA,CAAO,IAC1C,CAEET,CAAAA,CAAAA,CAAW,OAAQ,CAAA,MAAA,GAAW,CAC9B26B,EAAAA,EAAAA,CAAe36B,EAAW,OAAQ,CAAA,CAAC,CAAE,CAErC66B,CAAAA,CAAAA,CAAiB,CAAC,GAAGpB,EAAAA,CAAgB,GAAGz5B,CAAAA,CAAW,OAAO,CAAA,CAE1D66B,EAAiB76B,CAAW,CAAA,OAAA,CAAA,CAIhC,IAAM85B,CAAce,CAAAA,CAAAA,CACjB,IAAKp6B,CACA,EAAA,OAAOA,CAAW,EAAA,QAAA,CACbA,CAGLA,EAAAA,CAAAA,CAAO,OAETs5B,CAAkBt5B,CAAAA,CAAAA,CAAO,IAAI,CAAIA,CAAAA,CAAAA,CAAAA,CAG5BA,EAAO,IACf,CAAA,CAAA,CACA,MAAO,CAAA,OAAO,CAEjB,CAAA,OAAOm5B,GAAiB,CACtB,aAAA,CAAe,CACb,GAAGG,CACH,CAAA,GAAGP,EACL,CACA,CAAA,WAAA,CAAAM,CACA,CAAA,iBAAA,CAAAC,CACF,CAAC,CACH,CAEMe,CAAAA,EAAAA,CACJ96B,GACoB,CACpB,IAAIf,EAAyB,CAC3B,OAAA,CAAS,KACT,CAAA,QAAA,CAAU,GACV,CAAA,OAAA,CAAS,GACX,CAEA,CAAA,OAAI,OAAOe,CAAAA,CAAW,KAAM,CAAA,IAAA,EAAS,WAGjC,OAAOA,CAAAA,CAAW,KAAU,EAAA,SAAA,CAC9Bf,CAAM,CAAA,OAAA,CAAUe,EAAW,KAClB,CAAA,OAAOA,EAAW,KAAU,EAAA,QAAA,EACrCf,EAAM,OAAU,CAAA,IAAA,CAChBA,CAAM,CAAA,QAAA,CAAWe,CAAW,CAAA,KAAA,EACnBA,EAAW,KACpBf,GAAAA,CAAAA,CAAQ,CACN,GAAGA,CACH,CAAA,GAAGe,EAAW,KAChB,CAAA,CAAA,CAAA,CAEKf,CACT,CAAA,CAKa87B,EAAc,CAAA,MACzB/6B,GACsB,CACtB,IAAIg7B,EACJ,GAAIh7B,CAAAA,EAAY,WAAY,CAC1B,IAAMuF,CAAQvF,CAAAA,CAAAA,CAAW,UAAW,CAAA,KAAA,CAAM,GAAG,CAC7Cg7B,CAAAA,CAAAA,CAAoBz1B,EAAM,KAAM,CAAA,CAAA,CAAGA,EAAM,MAAS,CAAA,CAAC,CAAE,CAAA,IAAA,CAAK,GAAG,EAC/D,CAEA,GAAM,CAAE,OAAQ01B,CAAe,CAAA,CAAI,MAAMC,cAAuB,CAAA,CAC9D,UAAYF,CAAAA,CAAAA,CACZ,IAAM,CAAA,YACR,CAAC,CAWD,CAAA,OAAA,CATkC,KAAM,CAAA,OAAA,CAAQh7B,CAAU,CAAA,CACtDA,EACA,KAAM,CAAA,OAAA,CAAQi7B,CAAc,CAAA,CAC1BA,CAAe,CAAA,GAAA,CAAK56B,IAAY,CAC9B,GAAGA,EACH,GAAGL,CACL,EAAE,CACF,CAAA,CAAC,CAAE,GAAIi7B,CAAkB,EAAA,GAAK,GAAGj7B,CAAW,CAAC,CAAA,EAEhC,GAAKA,CAAAA,CAAAA,EAAe,CACrC,GAAM,CACJ,IAAAsE,CAAAA,CAAAA,CACA,UAAA62B,CAAAA,CAAAA,CAAa,GACb,MAAAC,CAAAA,CAAAA,CAAS,MACT,kBAAAC,CAAAA,CAAAA,CAAqB,KACrB,UAAAC,CAAAA,CAAAA,CAAa,IACb,CAAA,IAAA,CAAA96B,CACA,CAAA,OAAA,CAAAf,EACA,UAAA87B,CAAAA,CAAAA,CAAa,IACf,CAAA,CAAIv7B,CAEEC,CAAAA,CAAAA,CAAOF,GAAQC,CAAU,CAAA,CAE3BC,CAAK,CAAA,KAAA,GAAU,OACjB,EAAA,OAAA,CAAQ,KAAK,aAAeD,CAAAA,CAAU,EAGxC,IAAM25B,CAAAA,CAAQD,GAAS15B,CAAU,CAAA,CAC3BkX,CAASwjB,CAAAA,EAAAA,CAAU16B,CAAU,CAAA,CAEnC,GAAI,CAAC25B,CAAAA,CAAM,KACT,MAAM,IAAI,MACR,8FACF,CAAA,CAGF,GAAI,CAACziB,CAAO,CAAA,IAAA,CACV,MAAM,IAAI,KAAA,CACR,kEACF,CAGGqkB,CAAAA,CAAAA,EACH,QAAQ,IACN,CAAA,qMACF,CAGFrkB,CAAAA,CAAAA,CAAO,IAAOtK,CAAAA,mBAAAA,CAAK,QAAQ,OAAQ,CAAA,GAAA,EAAOsK,CAAAA,CAAAA,CAAO,IAAI,CAAA,CAErD,IAAM7W,CAASqB,CAAAA,EAAAA,CAAU,CACvB,GAAGk5B,EAAW56B,CAAAA,CAAU,EACxB,IAAAsE,CAAAA,CAAAA,CACA,WAAA62B,CACA,CAAA,MAAA,CAAAC,EACA,kBAAAC,CAAAA,CAAAA,CACA,UAAY,CAAA,KAAA,CACZ,KAAA1B,CAAAA,CAAAA,CACA,KAAA15B,CACA,CAAA,IAAA,CAAAO,CACA,CAAA,MAAA,CAAA0W,CACA,CAAA,OAAA,CAAAzX,EACA,UAAA87B,CAAAA,CAAAA,CACA,KAAOT,CAAAA,EAAAA,CAAS,CAAE,GAAG96B,EAAY,KAAA25B,CAAAA,CAAM,CAAC,CAC1C,CAAC,EACD,OAAAt5B,CAAAA,CAAO,UAAasB,CAAAA,CAAAA,CAAetB,CAAM,CAAA,CAAIi7B,EAAa,KAEtDr7B,CAAAA,CAAAA,CAAK,KAAU,GAAA,OAAA,EACjB,OAAQ,CAAA,IAAA,CAAK,UAAWI,CAAM,CAAA,CAGzBA,CACT,CAAC,CACH","file":"internal.cjs","sourcesContent":["// copy-pasted from @hey-api/client-fetch\nexport const mergeHeaders = (\n ...headers: Array<RequestInit['headers'] | undefined>\n): Headers => {\n const mergedHeaders = new Headers();\n for (const header of headers) {\n if (!header || typeof header !== 'object') {\n continue;\n }\n\n const iterator =\n header instanceof Headers ? header.entries() : Object.entries(header);\n\n for (const [key, value] of iterator) {\n if (value === null) {\n mergedHeaders.delete(key);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n mergedHeaders.append(key, v as string);\n }\n } else if (value !== undefined) {\n // assume object headers are meant to be JSON stringified, i.e. their\n // content value in OpenAPI specification is 'application/json'\n mergedHeaders.set(\n key,\n typeof value === 'object' ? JSON.stringify(value) : (value as string),\n );\n }\n }\n }\n return mergedHeaders;\n};\n","import {\n $RefParser,\n getResolvedInput,\n type JSONSchema,\n sendRequest,\n} from '@hey-api/json-schema-ref-parser';\n\nimport { mergeHeaders } from './mergeHeaders';\nimport type { Config } from './types/config';\nimport type { WatchValues } from './types/types';\n\ninterface SpecResponse {\n data: JSONSchema;\n error?: undefined;\n response?: undefined;\n}\n\ninterface SpecError {\n data?: undefined;\n error: 'not-modified' | 'not-ok';\n response: Response;\n}\n\n/**\n * @internal\n */\nexport const getSpec = async ({\n fetchOptions,\n inputPath,\n timeout,\n watch,\n}: {\n fetchOptions?: RequestInit;\n inputPath: Config['input']['path'];\n timeout: number;\n watch: WatchValues;\n}): Promise<SpecResponse | SpecError> => {\n const refParser = new $RefParser();\n const resolvedInput = getResolvedInput({ pathOrUrlOrSchema: inputPath });\n\n let arrayBuffer: ArrayBuffer | undefined;\n // boolean signals whether the file has **definitely** changed\n let hasChanged: boolean | undefined;\n let response: Response | undefined;\n\n if (resolvedInput.type === 'url') {\n // do NOT send HEAD request on first run or if unsupported\n if (watch.lastValue && watch.isHeadMethodSupported !== false) {\n try {\n const request = await sendRequest({\n fetchOptions: {\n method: 'HEAD',\n ...fetchOptions,\n headers: mergeHeaders(fetchOptions?.headers, watch.headers),\n },\n timeout,\n url: resolvedInput.path,\n });\n\n if (request.response.status >= 300) {\n return {\n error: 'not-ok',\n response: request.response,\n };\n }\n\n response = request.response;\n } catch (error) {\n return {\n error: 'not-ok',\n response: new Response(error.message),\n };\n }\n\n if (!response.ok && watch.isHeadMethodSupported) {\n // assume the server is no longer running\n // do nothing, it might be restarted later\n return {\n error: 'not-ok',\n response,\n };\n }\n\n if (watch.isHeadMethodSupported === undefined) {\n watch.isHeadMethodSupported = response.ok;\n }\n\n if (response.status === 304) {\n return {\n error: 'not-modified',\n response,\n };\n }\n\n if (hasChanged === undefined) {\n const eTag = response.headers.get('ETag');\n if (eTag) {\n hasChanged = eTag !== watch.headers.get('If-None-Match');\n\n if (hasChanged) {\n watch.headers.set('If-None-Match', eTag);\n }\n }\n }\n\n if (hasChanged === undefined) {\n const lastModified = response.headers.get('Last-Modified');\n if (lastModified) {\n hasChanged = lastModified !== watch.headers.get('If-Modified-Since');\n\n if (hasChanged) {\n watch.headers.set('If-Modified-Since', lastModified);\n }\n }\n }\n\n // we definitely know the input has not changed\n if (hasChanged === false) {\n return {\n error: 'not-modified',\n response,\n };\n }\n }\n\n try {\n const request = await sendRequest({\n fetchOptions: {\n method: 'GET',\n ...fetchOptions,\n },\n timeout,\n url: resolvedInput.path,\n });\n\n if (request.response.status >= 300) {\n return {\n error: 'not-ok',\n response: request.response,\n };\n }\n\n response = request.response;\n } catch (error) {\n return {\n error: 'not-ok',\n response: new Response(error.message),\n };\n }\n\n if (!response.ok) {\n // assume the server is no longer running\n // do nothing, it might be restarted later\n return {\n error: 'not-ok',\n response,\n };\n }\n\n arrayBuffer = response.body\n ? await response.arrayBuffer()\n : new ArrayBuffer(0);\n\n if (hasChanged === undefined) {\n const content = new TextDecoder().decode(arrayBuffer);\n hasChanged = content !== watch.lastValue;\n watch.lastValue = content;\n }\n } else {\n // we do not support watch mode for files or raw spec data\n if (!watch.lastValue) {\n watch.lastValue = resolvedInput.type;\n } else {\n hasChanged = false;\n }\n }\n\n if (hasChanged === false) {\n return {\n error: 'not-modified',\n response: response!,\n };\n }\n\n const data = await refParser.bundle({\n arrayBuffer,\n pathOrUrlOrSchema: undefined,\n resolvedInput,\n });\n\n return {\n data,\n };\n};\n","import type { Config, UserConfig } from './types/config';\n\nexport const getLogs = (userConfig: UserConfig | undefined): Config['logs'] => {\n let logs: Config['logs'] = {\n file: true,\n level: 'info',\n path: process.cwd(),\n };\n if (typeof userConfig?.logs === 'string') {\n logs.path = userConfig.logs;\n } else {\n logs = {\n ...logs,\n ...userConfig?.logs,\n };\n }\n return logs;\n};\n","export const clientDefaultConfig = {\n _dependencies: ['@hey-api/typescript'],\n _tags: ['client'],\n baseUrl: true,\n bundle: false,\n exportFromIndex: false,\n output: 'client',\n} as const;\n","import type { Config } from '../../../types/config';\nimport type { PluginClientNames } from '../../types';\n\nexport const clientId = 'client';\n\ntype Plugins = Required<Config>['plugins'];\n\nexport const getClientBaseUrlKey = (config: Config) => {\n const client = getClientPlugin(config);\n if (\n client.name === '@hey-api/client-axios' ||\n client.name === '@hey-api/client-nuxt'\n ) {\n return 'baseURL';\n }\n return 'baseUrl';\n};\n\nexport const getClientPlugin = (\n config: Config,\n): Required<Plugins>[PluginClientNames] => {\n for (const name of config.pluginOrder) {\n const plugin = config.plugins[name];\n if (plugin?._tags?.includes('client')) {\n return plugin as Required<Plugins>[PluginClientNames];\n }\n }\n\n return {\n // @ts-expect-error\n name: '',\n };\n};\n","import ts from 'typescript';\n\nimport { createCallExpression } from './module';\nimport {\n type AccessLevel,\n createBlock,\n createTypeNode,\n type FunctionParameter,\n type FunctionTypeParameter,\n toAccessLevelModifiers,\n toExpression,\n toParameterDeclarations,\n toTypeParameters,\n} from './types';\nimport type { Comments } from './utils';\nimport { addLeadingComments, createIdentifier, isType } from './utils';\n\n/**\n * Create a class constructor declaration.\n * @param accessLevel - the access level of the constructor.\n * @param comment - comment to add to function.\n * @param multiLine - if it should be multi line.\n * @param parameters - parameters for the constructor.\n * @param statements - statements to put in the constructor body.\n * @returns ts.ConstructorDeclaration\n */\nexport const createConstructorDeclaration = ({\n accessLevel,\n comment,\n multiLine = true,\n parameters = [],\n statements = [],\n}: {\n accessLevel?: AccessLevel;\n comment?: Comments;\n multiLine?: boolean;\n parameters?: FunctionParameter[];\n statements?: ts.Statement[];\n}) => {\n const node = ts.factory.createConstructorDeclaration(\n toAccessLevelModifiers(accessLevel),\n toParameterDeclarations(parameters),\n createBlock({ multiLine, statements }),\n );\n\n addLeadingComments({\n comments: comment,\n node,\n });\n\n return node;\n};\n\n/**\n * Create a class method declaration.\n * @param accessLevel - the access level of the method.\n * @param comment - comment to add to function.\n * @param isStatic - if the function is static.\n * @param multiLine - if it should be multi line.\n * @param name - name of the method.\n * @param parameters - parameters for the method.\n * @param returnType - the return type of the method.\n * @param statements - statements to put in the constructor body.\n * @returns ts.MethodDeclaration\n */\nexport const createMethodDeclaration = ({\n accessLevel,\n comment,\n isStatic = false,\n multiLine = true,\n name,\n parameters = [],\n returnType,\n statements = [],\n types = [],\n}: {\n accessLevel?: AccessLevel;\n comment?: Comments;\n isStatic?: boolean;\n multiLine?: boolean;\n name: string;\n parameters?: FunctionParameter[];\n returnType?: string | ts.TypeNode;\n statements?: ts.Statement[];\n types?: FunctionTypeParameter[];\n}) => {\n let modifiers = toAccessLevelModifiers(accessLevel);\n\n if (isStatic) {\n modifiers = [\n ...modifiers,\n ts.factory.createModifier(ts.SyntaxKind.StaticKeyword),\n ];\n }\n\n const node = ts.factory.createMethodDeclaration(\n modifiers,\n undefined,\n createIdentifier({ text: name }),\n undefined,\n types ? toTypeParameters(types) : undefined,\n toParameterDeclarations(parameters),\n returnType ? createTypeNode(returnType) : undefined,\n createBlock({ multiLine, statements }),\n );\n\n addLeadingComments({\n comments: comment,\n node,\n });\n\n return node;\n};\n\ntype ClassDecorator = {\n args: any[];\n name: string;\n};\n\n/**\n * Create a class declaration.\n * @param decorator - the class decorator\n * @param members - elements in the class.\n * @param name - name of the class.\n * @returns ts.ClassDeclaration\n */\nexport const createClassDeclaration = ({\n decorator,\n members = [],\n name,\n}: {\n decorator?: ClassDecorator;\n members?: ts.ClassElement[];\n name: string;\n}) => {\n let modifiers: ts.ModifierLike[] = [\n ts.factory.createModifier(ts.SyntaxKind.ExportKeyword),\n ];\n\n if (decorator) {\n modifiers = [\n ts.factory.createDecorator(\n createCallExpression({\n functionName: decorator.name,\n parameters: decorator.args\n .map((arg) => toExpression({ value: arg }))\n .filter(isType<ts.Expression>),\n }),\n ),\n ...modifiers,\n ];\n }\n\n // Add newline between each class member.\n let m: ts.ClassElement[] = [];\n members.forEach((member) => {\n // @ts-expect-error\n m = [...m, member, createIdentifier({ text: '\\n' })];\n });\n\n return ts.factory.createClassDeclaration(\n modifiers,\n createIdentifier({ text: name }),\n [],\n [],\n m,\n );\n};\n","/**\n * Matches characters from the start as long as they're not allowed.\n */\nexport const illegalStartCharactersRegExp = /^[^$_\\p{ID_Start}]+/u;\n\n/**\n * Matches string if it contains only digits and optionally decimal point or\n * leading minus sign.\n */\nexport const numberRegExp = /^-?\\d+(\\.\\d+)?$/;\n\nexport const reservedBrowserGlobalsRegExp =\n /^(document|history|location|navigator|window)$/g;\n\nexport const reservedJavaScriptGlobalsRegExp =\n /^(console|Array|Date|Error|Function|JSON|Map|Math|Object|Promise|RegExp|Set|WeakMap|WeakSet)$/g;\n\nexport const reservedJavaScriptKeywordsRegExp =\n /^(arguments|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|eval|export|extends|false|finally|for|from|function|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)$/g;\n\nexport const reservedNodeGlobalsRegExp = /^(global|process|Buffer)$/g;\n\nexport const reservedTypeScriptKeywordsRegExp =\n /^(any|as|bigint|boolean|namespace|never|null|number|string|symbol|type|undefined|unknown|void)$/g;\n\n/**\n * Javascript identifier regexp pattern retrieved from\n * {@link} https://developer.mozilla.org/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers\n */\nexport const validTypescriptIdentifierRegExp =\n /^[$_\\p{ID_Start}][$\\u200c\\u200d\\p{ID_Continue}]*$/u;\n","import { EOL } from 'os';\n\nimport { validTypescriptIdentifierRegExp } from './regexp';\n\nexport const escapeName = (value: string): string => {\n if (value || value === '') {\n validTypescriptIdentifierRegExp.lastIndex = 0;\n const validName = validTypescriptIdentifierRegExp.test(value);\n if (!validName) {\n return `'${value}'`;\n }\n }\n return value;\n};\n\nexport const unescapeName = (value: string): string => {\n if (value && value.startsWith(\"'\") && value.endsWith(\"'\")) {\n return value.slice(1, value.length - 1);\n }\n return value;\n};\n\nexport const escapeComment = (value: string) =>\n value\n .replace(/\\*\\//g, '*')\n .replace(/\\/\\*/g, '*')\n .replace(/\\r?\\n(.*)/g, (_l, w) => EOL + w.trim());\n","import ts from 'typescript';\n\nimport { getConfig } from '../utils/config';\nimport { unescapeName } from '../utils/escape';\nimport { createStringLiteral } from './types';\n\nexport interface ImportExportItemObject {\n alias?: string;\n asType?: boolean;\n name: string;\n}\n\nconst printer = ts.createPrinter({\n newLine: ts.NewLineKind.LineFeed,\n removeComments: false,\n});\n\nexport const createSourceFile = (sourceText: string) =>\n ts.createSourceFile(\n '',\n sourceText,\n ts.ScriptTarget.ESNext,\n false,\n ts.ScriptKind.TS,\n );\n\nconst blankSourceFile = createSourceFile('');\n\nconst unescapeUnicode = (value: string) =>\n value.replace(/\\\\u([0-9a-fA-F]{4})/g, (_, hex: string) =>\n String.fromCharCode(Number.parseInt(hex, 16)),\n );\n\n/**\n * Print a TypeScript node to a string.\n * @param node the node to print\n * @returns string\n */\nexport function tsNodeToString({\n node,\n unescape = false,\n}: {\n node: ts.Node;\n unescape?: boolean;\n}): string {\n const result = printer.printNode(\n ts.EmitHint.Unspecified,\n node,\n blankSourceFile,\n );\n\n if (!unescape) {\n return result;\n }\n\n try {\n /**\n * TypeScript Compiler API escapes unicode characters by default and there\n * is no way to disable this behavior\n * {@link https://github.com/microsoft/TypeScript/issues/36174}\n */\n return unescapeUnicode(result);\n } catch {\n if (getConfig().logs.level === 'debug') {\n console.warn('Could not decode value:', result);\n }\n return result;\n }\n}\n\n/**\n * Convert a string to a TypeScript Node\n * @param value the string to convert.\n * @returns ts.Node\n */\nexport function stringToTsNodes(value: string): ts.Node {\n const file = createSourceFile(value);\n return file.statements[0]!;\n}\n\nexport const createIdentifier = ({ text }: { text: string }) => {\n const identifier = ts.factory.createIdentifier(text);\n return identifier;\n};\n\n/**\n * ots for @hey-api/openapi-ts are helpers to reduce repetition of basic TypeScript\n * factory functions.\n */\nexport const ots = {\n /**\n * Create a boolean expression based on value.\n */\n boolean: (value: boolean) =>\n value ? ts.factory.createTrue() : ts.factory.createFalse(),\n export: ({ alias, asType = false, name }: ImportExportItemObject) => {\n const nameNode = createIdentifier({ text: name });\n if (alias) {\n const aliasNode = createIdentifier({ text: alias });\n return ts.factory.createExportSpecifier(asType, nameNode, aliasNode);\n }\n return ts.factory.createExportSpecifier(asType, undefined, nameNode);\n },\n import: ({ alias, asType = false, name }: ImportExportItemObject) => {\n const nameNode = createIdentifier({ text: name });\n if (alias) {\n const aliasNode = createIdentifier({ text: alias });\n return ts.factory.createImportSpecifier(asType, nameNode, aliasNode);\n }\n return ts.factory.createImportSpecifier(asType, undefined, nameNode);\n },\n /**\n * Create a numeric expression, handling negative numbers.\n */\n number: (value: number) => {\n if (value < 0) {\n return ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n );\n }\n return ts.factory.createNumericLiteral(value);\n },\n /**\n * Create a string literal. This handles strings that start with '`' or \"'\".\n */\n string: (value: string, unescape = false) => {\n let text = value;\n if (unescape) {\n text = unescapeName(text);\n }\n const hasBothQuotes = text.includes(\"'\") && text.includes('\"');\n const hasNewlines = text.includes('\\n');\n const hasUnescapedBackticks = text.startsWith('`');\n const isBacktickEscaped = text.startsWith('\\\\`') && text.endsWith('\\\\`');\n if (\n (hasNewlines || hasBothQuotes || hasUnescapedBackticks) &&\n !isBacktickEscaped\n ) {\n text = `\\`${text.replace(/(?<!\\\\)`/g, '\\\\`').replace(/\\${/g, '\\\\${')}\\``;\n }\n if (text.startsWith('`')) {\n return createIdentifier({ text });\n }\n return createStringLiteral({ text });\n },\n};\n\nexport const isTsNode = (node: any): node is ts.Expression =>\n node !== null &&\n typeof node === 'object' &&\n typeof node.kind === 'number' &&\n typeof node.flags === 'number' &&\n typeof node.pos === 'number' &&\n typeof node.end === 'number';\n\nexport const isType = <T>(value: T | undefined): value is T =>\n value !== undefined;\n\ntype CommentLines = Array<string | null | false | undefined>;\ntype CommentObject = {\n jsdoc?: boolean;\n lines: CommentLines;\n};\nexport type Comments = CommentLines | Array<CommentObject>;\n\nconst processCommentObject = ({\n commentObject,\n node,\n}: {\n commentObject: CommentObject;\n node: ts.Node;\n}) => {\n const lines = commentObject.lines.filter(\n (line) => Boolean(line) || line === '',\n ) as string[];\n if (!lines.length) {\n return;\n }\n\n if (!commentObject.jsdoc) {\n for (const line of lines) {\n ts.addSyntheticLeadingComment(\n node,\n ts.SyntaxKind.SingleLineCommentTrivia,\n ` ${line}`,\n true,\n );\n }\n return;\n }\n\n const jsdocTexts = lines.map((line, index) => {\n let text = line;\n if (index !== lines.length) {\n text = `${text}\\n`;\n }\n const jsdocText = ts.factory.createJSDocText(text);\n return jsdocText;\n });\n\n const jsdoc = ts.factory.createJSDocComment(\n ts.factory.createNodeArray(jsdocTexts),\n undefined,\n );\n\n const cleanedJsdoc = tsNodeToString({ node: jsdoc, unescape: true })\n .replace('/*', '')\n .replace('* */', '');\n\n ts.addSyntheticLeadingComment(\n node,\n ts.SyntaxKind.MultiLineCommentTrivia,\n cleanedJsdoc,\n true,\n );\n};\n\nexport const addLeadingComments = ({\n comments = [],\n node,\n}: {\n comments?: Comments;\n node: ts.Node;\n}) => {\n const isObjectStyle = Boolean(\n comments.find((comment) => typeof comment === 'object' && comment),\n );\n\n let commentObjects = comments as Array<CommentObject>;\n if (!isObjectStyle) {\n commentObjects = [\n {\n jsdoc: true,\n lines: comments as CommentLines,\n },\n ];\n }\n\n for (const commentObject of commentObjects) {\n processCommentObject({\n commentObject,\n node,\n });\n }\n};\n","import { getClientPlugin } from '../plugins/@hey-api/client-core/utils';\nimport type { Config } from '../types/config';\n\nlet _config: Config;\n\nexport const getConfig = () => {\n const config = _config;\n const plugin = getClientPlugin(config);\n // patch legacy config to avoid breaking handlebars\n // @ts-expect-error\n config.client = plugin;\n return config;\n};\n\nexport const setConfig = (config: Config) => {\n _config = config;\n return getConfig();\n};\n\nexport const isLegacyClient = (config: Config) => {\n const plugin = getClientPlugin(config);\n return plugin.name.startsWith('legacy/');\n};\n\n/**\n * Wrap legacy `name` option so we don't use it when not using legacy clients.\n */\nexport const legacyNameFromConfig = (config: Config) => {\n if (!isLegacyClient(config)) {\n return;\n }\n\n return config.name;\n};\n","import ts from 'typescript';\n\nimport { escapeName } from '../utils/escape';\nimport { validTypescriptIdentifierRegExp } from '../utils/regexp';\nimport {\n addLeadingComments,\n type Comments,\n createIdentifier,\n isTsNode,\n isType,\n ots,\n} from './utils';\n\nexport type AccessLevel = 'public' | 'protected' | 'private';\n\nexport type FunctionParameter =\n | {\n accessLevel?: AccessLevel;\n default?: any;\n isReadOnly?: boolean;\n isRequired?: boolean;\n name: string;\n type?: any | ts.TypeNode;\n }\n | {\n destructure: FunctionParameter[];\n };\n\nexport interface FunctionTypeParameter {\n default?: any;\n extends?: string | ts.TypeNode;\n name: string | ts.Identifier;\n}\n\nexport const createTypeNode = (\n base: any | ts.TypeNode,\n args?: (any | ts.TypeNode)[],\n): ts.TypeNode => {\n if (ts.isTypeNode(base)) {\n return base;\n }\n\n if (typeof base === 'number') {\n return ts.factory.createLiteralTypeNode(ots.number(base));\n }\n\n return createTypeReferenceNode({\n typeArguments: args?.map((arg) => createTypeNode(arg)),\n typeName: base,\n });\n};\n\nexport const createPropertyAccessChain = ({\n expression,\n name,\n}: {\n expression: ts.Expression;\n name: string | ts.MemberName;\n}) => {\n const node = ts.factory.createPropertyAccessChain(\n expression,\n ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),\n name,\n );\n return node;\n};\n\nexport const createPropertyAccessExpression = ({\n expression,\n isOptional,\n name,\n}: {\n expression: string | ts.Expression;\n isOptional?: boolean;\n name: string | ts.MemberName;\n}):\n | ts.PropertyAccessChain\n | ts.PropertyAccessExpression\n | ts.ElementAccessExpression => {\n const nodeExpression =\n typeof expression === 'string'\n ? createIdentifier({ text: expression })\n : expression;\n\n if (isOptional) {\n return createPropertyAccessChain({\n expression: nodeExpression,\n name,\n });\n }\n\n if (typeof name === 'string') {\n validTypescriptIdentifierRegExp.lastIndex = 0;\n if (!validTypescriptIdentifierRegExp.test(name)) {\n // TODO: parser - this should escape name only for new parser\n if (!name.startsWith(\"'\") && !name.endsWith(\"'\")) {\n // eslint-disable-next-line no-useless-escape\n name = `\\'${name}\\'`;\n }\n const nodeName = createIdentifier({ text: name });\n return ts.factory.createElementAccessExpression(nodeExpression, nodeName);\n }\n }\n\n const nodeName =\n typeof name === 'string' ? createIdentifier({ text: name }) : name;\n\n return ts.factory.createPropertyAccessExpression(nodeExpression, nodeName);\n};\n\nexport const createNull = (): ts.NullLiteral => ts.factory.createNull();\n\n/**\n * Convert an unknown value to an expression.\n * @param identifiers - list of keys that are treated as identifiers.\n * @param shorthand - if shorthand syntax is allowed.\n * @param unescape - if string should be unescaped.\n * @param value - the unknown value.\n * @returns ts.Expression\n */\nexport const toExpression = <T = unknown>({\n identifiers = [],\n isValueAccess,\n shorthand,\n unescape,\n value,\n}: {\n identifiers?: string[];\n isValueAccess?: boolean;\n shorthand?: boolean;\n unescape?: boolean;\n value: T;\n}): ts.Expression | undefined => {\n if (value === null) {\n return createNull();\n }\n\n if (Array.isArray(value)) {\n return createArrayLiteralExpression({ elements: value });\n }\n\n if (typeof value === 'object') {\n return createObjectType({\n identifiers,\n obj: value,\n shorthand,\n });\n }\n\n if (typeof value === 'number') {\n return ots.number(value);\n }\n\n if (typeof value === 'boolean') {\n return ots.boolean(value);\n }\n\n if (typeof value === 'string') {\n if (isValueAccess) {\n // TODO; handle more than single nested level, i.e. foo.bar.baz\n const parts = value.split('.');\n return createPropertyAccessExpression({\n expression: parts[0]!,\n name: parts[1]!,\n });\n }\n return ots.string(value, unescape);\n }\n};\n\n/**\n * Convert AccessLevel to proper TypeScript compiler API modifier.\n * @param access - the access level.\n * @returns ts.ModifierLike[]\n */\nexport const toAccessLevelModifiers = (\n access?: AccessLevel,\n): ts.ModifierLike[] => {\n const keyword =\n access === 'public'\n ? ts.SyntaxKind.PublicKeyword\n : access === 'protected'\n ? ts.SyntaxKind.ProtectedKeyword\n : access === 'private'\n ? ts.SyntaxKind.PrivateKeyword\n : undefined;\n const modifiers: ts.ModifierLike[] = [];\n if (keyword) {\n modifiers.push(ts.factory.createModifier(keyword));\n }\n return modifiers;\n};\n\n/**\n * Convert parameters to the declaration array expected by compiler API.\n * @param parameters - the parameters to convert to declarations\n * @returns ts.ParameterDeclaration[]\n */\nexport const toParameterDeclarations = (parameters: FunctionParameter[]) =>\n parameters.map((parameter) => {\n if ('destructure' in parameter) {\n return createParameterDeclaration({\n name: ts.factory.createObjectBindingPattern(\n parameter.destructure\n .map((param) => {\n // TODO: add support for nested destructuring, not needed at the moment\n if ('destructure' in param) {\n return;\n }\n\n const result = ts.factory.createBindingElement(\n undefined,\n undefined,\n createIdentifier({ text: param.name }),\n undefined,\n );\n return result;\n })\n .filter(Boolean) as ts.BindingElement[],\n ),\n });\n }\n\n let modifiers = toAccessLevelModifiers(parameter.accessLevel);\n\n if (parameter.isReadOnly) {\n modifiers = [\n ...modifiers,\n ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword),\n ];\n }\n\n return createParameterDeclaration({\n initializer:\n parameter.default !== undefined\n ? toExpression({ value: parameter.default })\n : undefined,\n modifiers,\n name: createIdentifier({ text: parameter.name }),\n required: parameter.isRequired !== false,\n type:\n parameter.type !== undefined\n ? createTypeNode(parameter.type)\n : undefined,\n });\n });\n\nexport const createKeywordTypeNode = ({\n keyword,\n}: {\n keyword:\n | 'any'\n | 'boolean'\n | 'never'\n | 'number'\n | 'string'\n | 'undefined'\n | 'unknown'\n | 'void';\n}) => {\n let kind: ts.KeywordTypeSyntaxKind = ts.SyntaxKind.AnyKeyword;\n switch (keyword) {\n case 'boolean':\n kind = ts.SyntaxKind.BooleanKeyword;\n break;\n case 'never':\n kind = ts.SyntaxKind.NeverKeyword;\n break;\n case 'number':\n kind = ts.SyntaxKind.NumberKeyword;\n break;\n case 'string':\n kind = ts.SyntaxKind.StringKeyword;\n break;\n case 'undefined':\n kind = ts.SyntaxKind.UndefinedKeyword;\n break;\n case 'unknown':\n kind = ts.SyntaxKind.UnknownKeyword;\n break;\n case 'void':\n kind = ts.SyntaxKind.VoidKeyword;\n break;\n }\n return ts.factory.createKeywordTypeNode(kind);\n};\n\nexport const toTypeParameters = (\n types: (FunctionTypeParameter | ts.TypeParameterDeclaration)[],\n) =>\n types.map((node) => {\n // @ts-expect-error\n if (ts.isTypeParameterDeclaration(node)) {\n return node;\n }\n\n return createTypeParameterDeclaration({\n // TODO: support other extends values\n constraint: node.extends\n ? typeof node.extends === 'string'\n ? createKeywordTypeNode({ keyword: 'boolean' })\n : node.extends\n : undefined,\n // TODO: support other default types\n defaultType:\n node.default !== undefined\n ? isTsNode(node.default)\n ? (node.default as unknown as ts.TypeNode)\n : ts.factory.createLiteralTypeNode(\n node.default\n ? ts.factory.createTrue()\n : ts.factory.createFalse(),\n )\n : undefined,\n name: node.name,\n });\n });\n\nexport const createTypeOperatorNode = ({\n operator,\n type,\n}: {\n operator: 'keyof' | 'readonly' | 'unique';\n type: ts.TypeNode;\n}) => {\n const operatorKeyword =\n operator === 'keyof'\n ? ts.SyntaxKind.KeyOfKeyword\n : operator === 'readonly'\n ? ts.SyntaxKind.ReadonlyKeyword\n : ts.SyntaxKind.UniqueKeyword;\n return ts.factory.createTypeOperatorNode(operatorKeyword, type);\n};\n\nexport const createTypeParameterDeclaration = ({\n constraint,\n defaultType,\n modifiers,\n name,\n}: {\n constraint?: ts.TypeNode;\n defaultType?: ts.TypeNode;\n modifiers?: Array<ts.Modifier>;\n name: string | ts.Identifier;\n}) =>\n ts.factory.createTypeParameterDeclaration(\n modifiers,\n name,\n constraint,\n defaultType,\n );\n\nexport const createMappedTypeNode = ({\n members,\n nameType,\n questionToken,\n readonlyToken,\n type,\n typeParameter,\n}: {\n members?: ts.NodeArray<ts.TypeElement>;\n nameType?: ts.TypeNode;\n questionToken?: ts.QuestionToken | ts.PlusToken | ts.MinusToken;\n readonlyToken?: ts.ReadonlyKeyword | ts.PlusToken | ts.MinusToken;\n type?: ts.TypeNode;\n typeParameter: ts.TypeParameterDeclaration;\n}) =>\n ts.factory.createMappedTypeNode(\n readonlyToken,\n typeParameter,\n nameType,\n questionToken,\n type,\n members,\n );\n\nexport const createLiteralTypeNode = ({\n literal,\n}: {\n literal: ts.LiteralTypeNode['literal'];\n}) => {\n const node = ts.factory.createLiteralTypeNode(literal);\n return node;\n};\n\n/**\n * Create arrow function type expression.\n */\nexport const createArrowFunction = ({\n async,\n comment,\n multiLine,\n parameters = [],\n returnType,\n statements = [],\n types = [],\n}: {\n async?: boolean;\n comment?: Comments;\n multiLine?: boolean;\n parameters?: FunctionParameter[];\n returnType?: string | ts.TypeNode;\n statements?: ts.Statement[] | ts.Expression;\n types?: FunctionTypeParameter[];\n}) => {\n const expression = ts.factory.createArrowFunction(\n async ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)] : undefined,\n types ? toTypeParameters(types) : undefined,\n toParameterDeclarations(parameters),\n returnType ? createTypeNode(returnType) : undefined,\n undefined,\n Array.isArray(statements)\n ? createBlock({ multiLine, statements })\n : statements,\n );\n\n addLeadingComments({\n comments: comment,\n node: expression,\n });\n\n return expression;\n};\n\n/**\n * Create anonymous function type expression.\n */\nexport const createAnonymousFunction = ({\n async,\n comment,\n multiLine,\n parameters = [],\n returnType,\n statements = [],\n types = [],\n}: {\n async?: boolean;\n comment?: Comments;\n multiLine?: boolean;\n parameters?: FunctionParameter[];\n returnType?: string | ts.TypeNode;\n statements?: ts.Statement[];\n types?: FunctionTypeParameter[];\n}) => {\n const expression = ts.factory.createFunctionExpression(\n async ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)] : undefined,\n undefined,\n undefined,\n types ? toTypeParameters(types) : undefined,\n toParameterDeclarations(parameters),\n returnType ? createTypeNode(returnType) : undefined,\n createBlock({ multiLine, statements }),\n );\n\n addLeadingComments({\n comments: comment,\n node: expression,\n });\n\n return expression;\n};\n\n/**\n * Create Array type expression.\n */\nexport const createArrayLiteralExpression = <T>({\n elements,\n multiLine = false,\n}: {\n /**\n * The array to create.\n */\n elements: T[];\n /**\n * Should the array be multi line?\n *\n * @default false\n */\n multiLine?: boolean;\n}): ts.ArrayLiteralExpression => {\n const expression = ts.factory.createArrayLiteralExpression(\n elements\n .map((value) => (isTsNode(value) ? value : toExpression({ value })))\n .filter(isType<ts.Expression>),\n // multiline if array contains objects\n multiLine ||\n (!Array.isArray(elements[0]) && typeof elements[0] === 'object'),\n );\n return expression;\n};\n\nexport const createAwaitExpression = ({\n expression,\n}: {\n expression: ts.Expression;\n}) => ts.factory.createAwaitExpression(expression);\n\nexport const createFunctionTypeNode = ({\n parameters = [],\n returnType,\n typeParameters,\n}: {\n parameters?: ts.ParameterDeclaration[];\n returnType: ts.TypeNode;\n typeParameters?: ts.TypeParameterDeclaration[];\n}) => {\n const node = ts.factory.createFunctionTypeNode(\n typeParameters,\n parameters,\n returnType,\n );\n return node;\n};\n\nexport type ObjectValue =\n | {\n assertion?: 'any' | ts.TypeNode;\n comments?: Comments;\n spread: string;\n }\n | {\n comments?: Comments;\n isValueAccess?: boolean;\n key: string;\n shorthand?: boolean;\n value: any;\n };\n\ntype ObjectAssignment =\n | ts.PropertyAssignment\n | ts.ShorthandPropertyAssignment\n | ts.SpreadAssignment;\n\n/**\n * Create Object type expression.\n * @param comments - comments to add to each property.\n * @param identifier - keys that should be treated as identifiers.\n * @param multiLine - if the object should be multiline.\n * @param obj - the object to create expression with.\n * @param shorthand - if shorthand syntax should be used.\n * @param unescape - if properties strings should be unescaped.\n * @returns ts.ObjectLiteralExpression\n */\nexport const createObjectType = <\n T extends Record<string, any> | Array<ObjectValue>,\n>({\n comments,\n identifiers = [],\n multiLine = true,\n obj,\n shorthand,\n unescape = false,\n}: {\n comments?: Comments;\n identifiers?: string[];\n multiLine?: boolean;\n obj: T;\n shorthand?: boolean;\n unescape?: boolean;\n}): ts.ObjectLiteralExpression => {\n const properties = Array.isArray(obj)\n ? obj\n .map((value: ObjectValue) => {\n // Check key value equality before possibly modifying it\n let canShorthand = false;\n if ('key' in value) {\n const { key } = value;\n canShorthand = key === value.value;\n const firstDigitAndNonDigits =\n key.match(/^[0-9]/) && key.match(/\\D+/g);\n if (\n (firstDigitAndNonDigits || key.match(/\\W/g) || key === '') &&\n !key.startsWith(\"'\") &&\n !key.endsWith(\"'\")\n ) {\n value.key = `'${key}'`;\n }\n }\n let assignment: ObjectAssignment;\n if ('spread' in value) {\n const nameIdentifier = isTsNode(value.spread)\n ? value.spread\n : createIdentifier({ text: value.spread });\n assignment = ts.factory.createSpreadAssignment(\n value.assertion\n ? createAsExpression({\n expression: nameIdentifier,\n type:\n typeof value.assertion === 'string'\n ? createKeywordTypeNode({ keyword: value.assertion })\n : value.assertion,\n })\n : nameIdentifier,\n );\n } else if (value.shorthand || (shorthand && canShorthand)) {\n assignment = ts.factory.createShorthandPropertyAssignment(\n value.value,\n );\n } else {\n let initializer: ts.Expression | undefined = isTsNode(value.value)\n ? value.value\n : Array.isArray(value.value)\n ? createObjectType({\n multiLine,\n obj: value.value,\n shorthand,\n unescape,\n })\n : toExpression({\n identifiers: identifiers.includes(value.key)\n ? Object.keys(value.value)\n : [],\n isValueAccess: value.isValueAccess,\n shorthand,\n unescape,\n value: value.value,\n });\n if (!initializer) {\n return undefined;\n }\n // Create a identifier if the current key is one and it is not an object\n if (\n identifiers.includes(value.key) &&\n !ts.isObjectLiteralExpression(initializer)\n ) {\n initializer = createIdentifier({ text: value.value as string });\n }\n assignment = createPropertyAssignment({\n initializer,\n name: value.key,\n });\n }\n\n addLeadingComments({\n comments: value.comments,\n node: assignment,\n });\n\n return assignment;\n })\n .filter(isType<ObjectAssignment>)\n : Object.entries(obj)\n .map(([key, value]) => {\n // Pass all object properties as identifiers if the whole object is an identifier\n let initializer: ts.Expression | undefined = toExpression({\n identifiers: identifiers.includes(key) ? Object.keys(value) : [],\n shorthand,\n unescape,\n value,\n });\n if (!initializer) {\n return undefined;\n }\n // Create a identifier if the current key is one and it is not an object\n if (\n identifiers.includes(key) &&\n !ts.isObjectLiteralExpression(initializer)\n ) {\n initializer = createIdentifier({ text: value as string });\n }\n // Check key value equality before possibly modifying it\n const canShorthand = key === value;\n if (\n key.match(/^[0-9]/) &&\n key.match(/\\D+/g) &&\n !key.startsWith(\"'\") &&\n !key.endsWith(\"'\")\n ) {\n key = `'${key}'`;\n }\n if (key.match(/\\W/g) && !key.startsWith(\"'\") && !key.endsWith(\"'\")) {\n key = `'${key}'`;\n }\n const assignment =\n shorthand && canShorthand\n ? ts.factory.createShorthandPropertyAssignment(value)\n : createPropertyAssignment({ initializer, name: key });\n\n return assignment;\n })\n .filter(isType<ObjectAssignment>);\n\n const node = ts.factory.createObjectLiteralExpression(\n properties as any[],\n multiLine,\n );\n\n addLeadingComments({\n comments,\n node,\n });\n\n return node;\n};\n\n/**\n * Create enum declaration. Example `export enum T = { X, Y };`\n * @param comments - comments to add to each property.\n * @param leadingComment - leading comment to add to enum.\n * @param name - the name of the enum.\n * @param obj - the object representing the enum.\n * @returns ts.EnumDeclaration\n */\nexport const createEnumDeclaration = <\n T extends Record<string, any> | Array<ObjectValue>,\n>({\n comments: enumMemberComments = {},\n leadingComment: comments,\n name,\n obj,\n}: {\n comments?: Record<string | number, Comments>;\n leadingComment?: Comments;\n name: string;\n obj: T;\n}): ts.EnumDeclaration => {\n const members: Array<ts.EnumMember> = Array.isArray(obj)\n ? obj.map((value) => {\n const enumMember = createEnumMember({\n initializer: toExpression({\n value: value.value,\n }),\n name: value.key,\n });\n\n addLeadingComments({\n comments: value.comments,\n node: enumMember,\n });\n\n return enumMember;\n })\n : // TODO: parser - deprecate object syntax\n Object.entries(obj).map(([key, value]) => {\n const enumMember = ts.factory.createEnumMember(\n key,\n toExpression({\n unescape: true,\n value,\n }),\n );\n\n addLeadingComments({\n comments: enumMemberComments[key],\n node: enumMember,\n });\n\n return enumMember;\n });\n\n const node = ts.factory.createEnumDeclaration(\n [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n createIdentifier({ text: name }),\n members,\n );\n\n addLeadingComments({\n comments,\n node,\n });\n\n return node;\n};\n\nconst createEnumMember = ({\n initializer,\n name,\n}: {\n initializer?: ts.Expression;\n name: string | ts.PropertyName;\n}) => {\n let key = name;\n if (typeof key === 'string') {\n if (key.startsWith(\"'\") && key.endsWith(\"'\")) {\n key = createStringLiteral({\n isSingleQuote: false,\n text: key,\n });\n } else {\n key = escapeName(key);\n }\n }\n return ts.factory.createEnumMember(key, initializer);\n};\n\n/**\n * Create namespace declaration. Example `export namespace MyNamespace { ... }`\n * @param name - the name of the namespace.\n * @param nodes - the nodes in the namespace.\n * @returns\n */\nexport const createNamespaceDeclaration = ({\n name,\n statements,\n}: {\n name: string;\n statements: Array<ts.Statement>;\n}) =>\n ts.factory.createModuleDeclaration(\n [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n createIdentifier({ text: name }),\n ts.factory.createModuleBlock(statements),\n ts.NodeFlags.Namespace,\n );\n\nexport const createIndexedAccessTypeNode = ({\n indexType,\n objectType,\n}: {\n indexType: ts.TypeNode;\n objectType: ts.TypeNode;\n}) => {\n const node = ts.factory.createIndexedAccessTypeNode(objectType, indexType);\n return node;\n};\n\nexport const createStringLiteral = ({\n isSingleQuote,\n text,\n}: {\n isSingleQuote?: boolean;\n text: string;\n}) => {\n if (isSingleQuote === undefined) {\n isSingleQuote = !text.includes(\"'\");\n }\n const node = ts.factory.createStringLiteral(text, isSingleQuote);\n return node;\n};\n\nexport const createConditionalExpression = ({\n condition,\n whenFalse,\n whenTrue,\n}: {\n condition: ts.Expression;\n whenFalse: ts.Expression;\n whenTrue: ts.Expression;\n}) => {\n const expression = ts.factory.createConditionalExpression(\n condition,\n ts.factory.createToken(ts.SyntaxKind.QuestionToken),\n whenTrue,\n ts.factory.createToken(ts.SyntaxKind.ColonToken),\n whenFalse,\n );\n return expression;\n};\n\nexport const createTypeOfExpression = ({ text }: { text: string }) => {\n const expression = ts.factory.createTypeOfExpression(\n createIdentifier({ text }),\n );\n return expression;\n};\n\n/**\n * Create a type alias declaration. Example `export type X = Y;`.\n * @param comment (optional) comments to add\n * @param name the name of the type\n * @param type the type\n * @returns ts.TypeAliasDeclaration\n */\nexport const createTypeAliasDeclaration = ({\n comment,\n exportType,\n name,\n type,\n typeParameters = [],\n}: {\n comment?: Comments;\n exportType?: boolean;\n name: string;\n type: string | ts.TypeNode;\n typeParameters?: FunctionTypeParameter[];\n}): ts.TypeAliasDeclaration => {\n const node = ts.factory.createTypeAliasDeclaration(\n exportType\n ? [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)]\n : undefined,\n createIdentifier({ text: name }),\n toTypeParameters(typeParameters),\n createTypeNode(type),\n );\n\n addLeadingComments({\n comments: comment,\n node,\n });\n\n return node;\n};\n\nexport const createTypeReferenceNode = ({\n typeArguments,\n typeName,\n}: {\n typeArguments?: ts.TypeNode[];\n typeName: string | ts.EntityName;\n}) => {\n const node = ts.factory.createTypeReferenceNode(typeName, typeArguments);\n return node;\n};\n\nexport const createTypeParenthesizedNode = ({\n type,\n}: {\n type: ts.TypeNode;\n}) => {\n const node = ts.factory.createParenthesizedType(type);\n return node;\n};\n\nexport const createParameterDeclaration = ({\n initializer,\n modifiers,\n name,\n required = true,\n type,\n}: {\n initializer?: ts.Expression;\n modifiers?: ts.ModifierLike[];\n name: string | ts.BindingName;\n required?: boolean;\n type?: ts.TypeNode;\n}) => {\n const node = ts.factory.createParameterDeclaration(\n modifiers,\n undefined,\n name,\n required ? undefined : ts.factory.createToken(ts.SyntaxKind.QuestionToken),\n type,\n initializer,\n );\n return node;\n};\n\nexport const createNewExpression = ({\n argumentsArray,\n expression,\n typeArguments,\n}: {\n argumentsArray?: Array<ts.Expression>;\n expression: ts.Expression;\n typeArguments?: Array<ts.TypeNode>;\n}) => {\n const node = ts.factory.createNewExpression(\n expression,\n typeArguments,\n argumentsArray,\n );\n return node;\n};\n\nexport const createForOfStatement = ({\n awaitModifier,\n expression,\n initializer,\n statement,\n}: {\n // TODO: parser - simplify this to be await?: boolean\n awaitModifier?: ts.AwaitKeyword;\n expression: ts.Expression;\n initializer: ts.ForInitializer;\n statement: ts.Statement;\n}) => {\n const node = ts.factory.createForOfStatement(\n awaitModifier,\n initializer,\n expression,\n statement,\n );\n return node;\n};\n\nexport const createAssignment = ({\n left,\n right,\n}: {\n left: ts.Expression;\n right: ts.Expression;\n}) => ts.factory.createAssignment(left, right);\n\nexport const createBlock = ({\n multiLine = true,\n statements,\n}: {\n multiLine?: boolean;\n statements: Array<ts.Statement>;\n}) => ts.factory.createBlock(statements, multiLine);\n\nexport const createPropertyAssignment = ({\n initializer,\n name,\n}: {\n initializer: ts.Expression;\n name: string | ts.PropertyName;\n}) => ts.factory.createPropertyAssignment(name, initializer);\n\nexport const createRegularExpressionLiteral = ({\n flags = [],\n text,\n}: {\n flags?: ReadonlyArray<'g' | 'i' | 'm' | 's' | 'u' | 'y'>;\n text: string;\n}) => ts.factory.createRegularExpressionLiteral(`/${text}/${flags.join('')}`);\n\nexport const createAsExpression = ({\n expression,\n type,\n}: {\n expression: ts.Expression;\n type: ts.TypeNode;\n}) => ts.factory.createAsExpression(expression, type);\n\nexport const createTemplateLiteralType = ({\n value,\n}: {\n value: ReadonlyArray<string | ts.TypeNode>;\n}) => {\n const spans: Array<ts.TemplateLiteralTypeSpan> = [];\n let spanText = '';\n\n for (const item of value.slice(0).reverse()) {\n if (typeof item === 'string') {\n spanText = `${item}${spanText}`;\n } else {\n const literal = spans.length\n ? ts.factory.createTemplateMiddle(spanText)\n : ts.factory.createTemplateTail(spanText);\n const span = ts.factory.createTemplateLiteralTypeSpan(item, literal);\n spans.push(span);\n spanText = '';\n }\n }\n\n const templateLiteralType = ts.factory.createTemplateLiteralType(\n ts.factory.createTemplateHead(spanText),\n spans.reverse(),\n );\n return templateLiteralType;\n};\n","import ts from 'typescript';\n\nimport { createAsExpression, createTypeReferenceNode } from './types';\nimport {\n addLeadingComments,\n type Comments,\n createIdentifier,\n type ImportExportItemObject,\n ots,\n} from './utils';\n\n/**\n * Create export all declaration. Example: `export * from './y'`.\n * @param module - module containing exports\n * @returns ts.ExportDeclaration\n */\nexport const createExportAllDeclaration = ({\n module,\n}: {\n module: string;\n}): ts.ExportDeclaration => {\n const statement = ts.factory.createExportDeclaration(\n undefined,\n false,\n undefined,\n ots.string(module),\n );\n return statement;\n};\n\nexport type ImportExportItem = ImportExportItemObject | string;\n\nexport const createCallExpression = ({\n functionName,\n parameters = [],\n types,\n}: {\n functionName:\n | string\n | ts.PropertyAccessExpression\n | ts.PropertyAccessChain\n | ts.ElementAccessExpression\n | ts.Expression;\n parameters?: Array<string | ts.Expression | undefined>;\n types?: ReadonlyArray<ts.TypeNode>;\n}) => {\n const expression =\n typeof functionName === 'string'\n ? createIdentifier({ text: functionName })\n : functionName;\n const argumentsArray = parameters\n .filter((parameter) => parameter !== undefined)\n .map((parameter) =>\n typeof parameter === 'string'\n ? createIdentifier({ text: parameter })\n : parameter,\n );\n const callExpression = ts.factory.createCallExpression(\n expression,\n types,\n argumentsArray,\n );\n return callExpression;\n};\n\n/**\n * Create a named export declaration. Example: `export { X } from './y'`.\n * @param exports - named imports to export\n * @param module - module containing exports\n * @returns ts.ExportDeclaration\n */\nexport const createNamedExportDeclarations = ({\n exports,\n module,\n}: {\n exports: Array<ImportExportItem> | ImportExportItem;\n module: string;\n}): ts.ExportDeclaration => {\n const exportedTypes = Array.isArray(exports) ? exports : [exports];\n const hasNonTypeExport = exportedTypes.some(\n (item) => typeof item !== 'object' || !item.asType,\n );\n const elements = exportedTypes.map((name) => {\n const item = typeof name === 'string' ? { name } : name;\n return ots.export({\n alias: item.alias,\n asType: hasNonTypeExport && item.asType,\n name: item.name,\n });\n });\n const exportClause = ts.factory.createNamedExports(elements);\n const moduleSpecifier = ots.string(module);\n const statement = ts.factory.createExportDeclaration(\n undefined,\n !hasNonTypeExport,\n exportClause,\n moduleSpecifier,\n );\n return statement;\n};\n\n/**\n * Create a const variable. Optionally, it can use const assertion or export\n * statement. Example: `export x = {} as const`.\n * @param assertion use const assertion?\n * @param exportConst export created variable?\n * @param expression expression for the variable.\n * @param name name of the variable.\n * @returns ts.VariableStatement\n */\nexport const createConstVariable = ({\n assertion,\n comment,\n destructure,\n exportConst,\n expression,\n name,\n typeName,\n}: {\n assertion?: 'const' | ts.TypeNode;\n comment?: Comments;\n destructure?: boolean;\n exportConst?: boolean;\n expression: ts.Expression;\n name: string;\n // TODO: support a more intuitive definition of generics for example\n typeName?: string | ts.IndexedAccessTypeNode | ts.TypeNode;\n}): ts.VariableStatement => {\n const initializer = assertion\n ? createAsExpression({\n expression,\n type:\n typeof assertion === 'string'\n ? createTypeReferenceNode({ typeName: assertion })\n : assertion,\n })\n : expression;\n const nameIdentifier = createIdentifier({ text: name });\n const declaration = ts.factory.createVariableDeclaration(\n destructure\n ? ts.factory.createObjectBindingPattern([\n ts.factory.createBindingElement(\n undefined,\n undefined,\n nameIdentifier,\n undefined,\n ),\n ])\n : nameIdentifier,\n undefined,\n typeName\n ? typeof typeName === 'string'\n ? createTypeReferenceNode({ typeName })\n : typeName\n : undefined,\n initializer,\n );\n const statement = ts.factory.createVariableStatement(\n exportConst\n ? [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)]\n : undefined,\n ts.factory.createVariableDeclarationList([declaration], ts.NodeFlags.Const),\n );\n\n addLeadingComments({\n comments: comment,\n node: statement,\n });\n\n return statement;\n};\n\n/**\n * Create a named import declaration. Example: `import { X } from './y'`.\n * @param imports - named exports to import\n * @param module - module containing imports\n * @returns ts.ImportDeclaration\n */\nexport const createNamedImportDeclarations = ({\n imports,\n module,\n}: {\n imports: Array<ImportExportItem> | ImportExportItem;\n module: string;\n}): ts.ImportDeclaration => {\n const importedTypes = Array.isArray(imports) ? imports : [imports];\n const hasNonTypeImport = importedTypes.some(\n (item) => typeof item !== 'object' || !item.asType,\n );\n const elements = importedTypes.map((name) => {\n const item = typeof name === 'string' ? { name } : name;\n return ots.import({\n alias: item.alias,\n asType: hasNonTypeImport && item.asType,\n name: item.name,\n });\n });\n const namedBindings = ts.factory.createNamedImports(elements);\n const importClause = ts.factory.createImportClause(\n !hasNonTypeImport,\n undefined,\n namedBindings,\n );\n const moduleSpecifier = ots.string(module);\n const statement = ts.factory.createImportDeclaration(\n undefined,\n importClause,\n moduleSpecifier,\n );\n return statement;\n};\n","import ts from 'typescript';\n\nexport const expressionToStatement = ({\n expression,\n}: {\n expression: ts.Expression;\n}) => {\n const statement = ts.factory.createExpressionStatement(expression);\n return statement;\n};\n","import ts from 'typescript';\n\nimport { createCallExpression } from './module';\nimport { createTypeReferenceNode } from './types';\nimport { createIdentifier, isType } from './utils';\n\nexport const createReturnStatement = ({\n expression,\n}: {\n expression?: ts.Expression;\n}) => ts.factory.createReturnStatement(expression);\n\n/**\n * Create a return function call statement.\n *\n * @example `return fn<string>(params)`\n *\n * @returns ts.ReturnStatement\n */\nexport const createReturnFunctionCall = ({\n args = [],\n name,\n types = [],\n}: {\n /**\n * Arguments to pass to the function.\n */\n args: any[];\n /**\n * Name of the function to call or expression.\n */\n name: string | ts.Expression;\n /**\n * List of function types.\n */\n types?: string[];\n}) => {\n const typeArguments = types.map((type) =>\n createTypeReferenceNode({ typeName: type }),\n );\n const argumentsArray = args\n .map((arg) =>\n ts.isExpression(arg) ? arg : createIdentifier({ text: arg }),\n )\n .filter(isType<ts.Identifier | ts.Expression>);\n const expression = createCallExpression({\n functionName: name,\n parameters: argumentsArray,\n types: typeArguments,\n });\n const statement = createReturnStatement({ expression });\n return statement;\n};\n\nexport const createReturnVariable = ({\n expression,\n}: {\n expression: string | ts.Expression;\n}) => {\n const statement = createReturnStatement({\n expression:\n typeof expression === 'string'\n ? createIdentifier({ text: expression })\n : expression,\n });\n return statement;\n};\n","import ts from 'typescript';\n\nimport { validTypescriptIdentifierRegExp } from '../utils/regexp';\nimport { expressionToStatement } from './convert';\nimport { createCallExpression } from './module';\nimport {\n createArrowFunction,\n createBlock,\n createNewExpression,\n createPropertyAccessChain,\n createPropertyAccessExpression,\n} from './types';\nimport { createIdentifier } from './utils';\n\nexport const createSafeAccessExpression = (path: string[]) =>\n path.slice(1).reduce<ts.Expression>(\n (expression, element) => {\n validTypescriptIdentifierRegExp.lastIndex = 0;\n if (validTypescriptIdentifierRegExp.test(element)) {\n return createPropertyAccessChain({\n expression,\n name: element,\n });\n }\n\n return ts.factory.createElementAccessChain(\n expression,\n ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),\n createIdentifier({ text: element }),\n );\n },\n createIdentifier({ text: path[0]! }),\n );\n\nexport const createAccessExpression = (path: string[]) =>\n path.slice(1).reduce<ts.Expression>(\n (expression, element) =>\n createPropertyAccessExpression({\n expression,\n name: element,\n }),\n createIdentifier({ text: path[0]! }),\n );\n\n/**\n * Handles an array of access expressions instead of nesting them (default TypeScript syntax)\n */\nexport const createPropertyAccessExpressions = ({\n expressions,\n}: {\n expressions: Array<string | ts.Expression | ts.MemberName>;\n}): ts.PropertyAccessExpression => {\n const expression = expressions.reduce((expression, name) => {\n const node = createPropertyAccessExpression({\n expression,\n // @ts-expect-error\n name,\n });\n return node;\n });\n return expression as ts.PropertyAccessExpression;\n};\n\nexport const createBinaryExpression = ({\n left,\n operator = '=',\n right,\n}: {\n left: ts.Expression;\n operator?: '=' | '===' | 'in' | '??';\n right: ts.Expression | string;\n}) => {\n const expression = ts.factory.createBinaryExpression(\n left,\n // TODO: add support for other tokens\n operator === '='\n ? ts.SyntaxKind.EqualsToken\n : operator === '==='\n ? ts.SyntaxKind.EqualsEqualsEqualsToken\n : operator === '??'\n ? ts.SyntaxKind.QuestionQuestionToken\n : ts.SyntaxKind.InKeyword,\n typeof right === 'string' ? createIdentifier({ text: right }) : right,\n );\n return expression;\n};\n\nexport const createIfStatement = ({\n elseStatement,\n expression,\n thenStatement,\n}: {\n elseStatement?: ts.Statement;\n expression: ts.Expression;\n thenStatement: ts.Statement;\n}) => ts.factory.createIfStatement(expression, thenStatement, elseStatement);\n\nexport const createDateTransformMutation = ({\n path,\n}: {\n path: string[];\n}): ts.Statement => {\n const safeAccessExpression = createSafeAccessExpression(path);\n const accessExpression = createAccessExpression(path);\n\n const thenStatement = createBlock({\n statements: [\n expressionToStatement({\n expression: createBinaryExpression({\n left: accessExpression,\n right: createNewExpression({\n argumentsArray: [accessExpression],\n expression: createIdentifier({ text: 'Date' }),\n }),\n }),\n }),\n ],\n });\n\n const statement = createIfStatement({\n expression: safeAccessExpression,\n thenStatement,\n });\n\n return statement;\n};\n\nexport const createFunctionTransformMutation = ({\n path,\n transformerName,\n}: {\n path: string[];\n transformerName: string;\n}) => {\n const safeAccessExpression = createSafeAccessExpression(path);\n const accessExpression = createAccessExpression(path);\n\n const thenStatement = createBlock({\n statements: [\n expressionToStatement({\n expression: createCallExpression({\n functionName: transformerName,\n parameters: [accessExpression],\n }),\n }),\n ],\n });\n\n const statement = [\n createIfStatement({\n expression: safeAccessExpression,\n thenStatement,\n }),\n ];\n\n return statement;\n};\n\nexport const createArrayTransformMutation = ({\n path,\n transformerName,\n}: {\n path: string[];\n transformerName: string;\n}): ts.Statement => {\n const safeAccessExpression = createSafeAccessExpression(path);\n const accessExpression = createAccessExpression(path);\n\n const statement = createIfStatement({\n expression: createCallExpression({\n functionName: createPropertyAccessExpression({\n expression: 'Array',\n name: 'isArray',\n }),\n parameters: [safeAccessExpression],\n }),\n thenStatement: createBlock({\n statements: [\n expressionToStatement({\n expression: ts.factory.createCallChain(\n createPropertyAccessExpression({\n expression: accessExpression,\n name: 'forEach',\n }),\n undefined,\n undefined,\n [createIdentifier({ text: transformerName })],\n ),\n }),\n ],\n }),\n });\n\n return statement;\n};\n\nexport const createDateTransformerExpression = ({\n parameterName,\n}: {\n parameterName: string;\n}) => {\n const expression = createIdentifier({ text: 'Date' });\n const newExpression = createNewExpression({\n argumentsArray: [createIdentifier({ text: parameterName })],\n expression,\n });\n return newExpression;\n};\n\nexport const createArrayMapTransform = ({\n path,\n transformExpression,\n}: {\n path: string[];\n transformExpression: ts.Expression;\n}) => {\n const safeAccessExpression = createSafeAccessExpression(path);\n const accessExpression = createAccessExpression(path);\n\n const statement = createIfStatement({\n expression: createCallExpression({\n functionName: createPropertyAccessExpression({\n expression: 'Array',\n name: 'isArray',\n }),\n parameters: [safeAccessExpression],\n }),\n thenStatement: createBlock({\n statements: [\n expressionToStatement({\n expression: createBinaryExpression({\n left: accessExpression,\n right: ts.factory.createCallChain(\n createPropertyAccessExpression({\n expression: accessExpression,\n name: 'map',\n }),\n undefined,\n undefined,\n [\n createArrowFunction({\n parameters: [\n {\n name: 'item',\n },\n ],\n statements: transformExpression,\n }),\n ],\n ),\n }),\n }),\n ],\n }),\n });\n\n return statement;\n};\n","import ts from 'typescript';\n\nimport { validTypescriptIdentifierRegExp } from '../utils/regexp';\nimport {\n createKeywordTypeNode,\n createParameterDeclaration,\n createStringLiteral,\n createTypeNode,\n createTypeReferenceNode,\n} from './types';\nimport {\n addLeadingComments,\n type Comments,\n createIdentifier,\n tsNodeToString,\n} from './utils';\n\nconst nullNode = createTypeReferenceNode({ typeName: 'null' });\n\n// Property of a interface type node.\nexport type Property = {\n comment?: Comments;\n isReadOnly?: boolean;\n isRequired?: boolean;\n name: string | ts.PropertyName;\n type: any | ts.TypeNode;\n};\n\n/**\n * Returns a union of provided node with null if marked as nullable,\n * otherwise returns the provided node unmodified.\n */\nconst maybeNullable = ({\n isNullable,\n node,\n}: {\n isNullable?: boolean;\n node: ts.TypeNode;\n}) => {\n if (!isNullable) {\n return node;\n }\n return ts.factory.createUnionTypeNode([node, nullNode]);\n};\n\n/**\n * Create a interface type node. Example `{ readonly x: string, y?: number }`\n * @param properties - the properties of the interface.\n * @param isNullable - if the whole interface can be nullable\n * @returns ts.TypeLiteralNode | ts.TypeUnionNode\n */\nexport const createTypeInterfaceNode = ({\n indexProperty,\n isNullable,\n properties,\n useLegacyResolution,\n}: {\n /**\n * Adds an index signature if defined.\n * @example\n * ```ts\n * type IndexProperty = {\n * [key: string]: string\n * }\n * ```\n */\n indexProperty?: Property;\n isNullable?: boolean;\n properties: Property[];\n useLegacyResolution: boolean;\n}) => {\n const propertyTypes: Array<ts.TypeNode> = [];\n\n const members: Array<ts.TypeElement> = properties.map((property) => {\n const modifiers: readonly ts.Modifier[] | undefined = property.isReadOnly\n ? [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)]\n : undefined;\n\n const questionToken: ts.QuestionToken | undefined =\n property.isRequired !== false\n ? undefined\n : ts.factory.createToken(ts.SyntaxKind.QuestionToken);\n\n const type: ts.TypeNode | undefined = createTypeNode(property.type);\n propertyTypes.push(type);\n\n const signature = ts.factory.createPropertySignature(\n modifiers,\n useLegacyResolution ||\n (typeof property.name === 'string' &&\n property.name.match(validTypescriptIdentifierRegExp)) ||\n (typeof property.name !== 'string' && ts.isPropertyName(property.name))\n ? property.name\n : createStringLiteral({ text: property.name }),\n questionToken,\n type,\n );\n\n addLeadingComments({\n comments: property.comment,\n node: signature,\n });\n\n return signature;\n });\n\n if (indexProperty) {\n const modifiers: readonly ts.Modifier[] | undefined =\n indexProperty.isReadOnly\n ? [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)]\n : undefined;\n const indexSignature = ts.factory.createIndexSignature(\n modifiers,\n [\n createParameterDeclaration({\n name: createIdentifier({ text: String(indexProperty.name) }),\n type: createKeywordTypeNode({ keyword: 'string' }),\n }),\n ],\n createTypeNode(indexProperty.type),\n );\n members.push(indexSignature);\n }\n\n const node = ts.factory.createTypeLiteralNode(members);\n return maybeNullable({ isNullable, node });\n};\n\n/**\n * Create type union node. Example `string | number | boolean`\n * @param types - the types in the union\n * @param isNullable - if the whole type can be null\n * @returns ts.UnionTypeNode\n */\nexport const createTypeUnionNode = ({\n isNullable,\n types,\n}: {\n isNullable?: boolean;\n types: (any | ts.TypeNode)[];\n}) => {\n const nodes = types.map((type) => createTypeNode(type));\n const node = ts.factory.createUnionTypeNode(nodes);\n return maybeNullable({ isNullable, node });\n};\n\n/**\n * Create type intersection node. Example `string & number & boolean`\n * @param types - the types in the union\n * @param isNullable - if the whole type can be null\n * @returns ts.IntersectionTypeNode | ts.UnionTypeNode\n */\nexport const createTypeIntersectionNode = ({\n isNullable,\n types,\n}: {\n isNullable?: boolean;\n types: (any | ts.TypeNode)[];\n}) => {\n const nodes = types.map((type) => createTypeNode(type));\n const node = ts.factory.createIntersectionTypeNode(nodes);\n return maybeNullable({ isNullable, node });\n};\n\n/**\n * Create type tuple node. Example `string, number, boolean`\n * @param isNullable if the whole type can be null\n * @param types the types in the union\n * @returns ts.UnionTypeNode\n */\nexport const createTypeTupleNode = ({\n isNullable = false,\n types,\n}: {\n isNullable?: boolean;\n types: Array<any | ts.TypeNode>;\n}) => {\n const nodes = types.map((type) => createTypeNode(type));\n const node = ts.factory.createTupleTypeNode(nodes);\n return maybeNullable({ isNullable, node });\n};\n\n/**\n * Create type record node. Example `{ [key: string]: string }`\n * @param keys - key types.\n * @param values - value types.\n * @param isNullable - if the whole type can be null\n * @returns ts.TypeReferenceNode | ts.UnionTypeNode\n */\nexport const createTypeRecordNode = (\n keys: (any | ts.TypeNode)[],\n values: (any | ts.TypeNode)[],\n isNullable: boolean = false,\n useLegacyResolution: boolean = true,\n) => {\n const keyNode = createTypeUnionNode({\n types: keys,\n });\n const valueNode = createTypeUnionNode({\n types: values,\n });\n // NOTE: We use the syntax `{ [key: string]: string }` because using a Record causes\n // invalid types with circular dependencies. This is functionally the same.\n // Ref: https://github.com/hey-api/openapi-ts/issues/370\n const node = createTypeInterfaceNode({\n properties: [\n {\n name: `[key: ${tsNodeToString({ node: keyNode, unescape: true })}]`,\n type: valueNode,\n },\n ],\n useLegacyResolution,\n });\n return maybeNullable({ isNullable, node });\n};\n\n/**\n * Create type array node. Example `Array<string | number>`\n * @param types - the types\n * @param isNullable - if the whole type can be null\n * @returns ts.TypeReferenceNode | ts.UnionTypeNode\n */\nexport const createTypeArrayNode = (\n types: (any | ts.TypeNode)[] | ts.TypeNode | string,\n isNullable: boolean = false,\n) => {\n const node = createTypeReferenceNode({\n typeArguments: [\n // @ts-expect-error\n Array.isArray(types) ? createTypeUnionNode({ types }) : types,\n ],\n typeName: 'Array',\n });\n return maybeNullable({ isNullable, node });\n};\n","import * as classes from './classes';\nimport * as convert from './convert';\nimport * as module from './module';\nimport * as _return from './return';\nimport * as transform from './transform';\nimport * as typedef from './typedef';\nimport * as types from './types';\nimport * as utils from './utils';\n\nexport type { Property } from './typedef';\nexport type { FunctionParameter } from './types';\nexport type { Comments } from './utils';\nexport type { ClassElement, Node, TypeNode } from 'typescript';\n\nexport const compiler = {\n anonymousFunction: types.createAnonymousFunction,\n arrayLiteralExpression: types.createArrayLiteralExpression,\n arrowFunction: types.createArrowFunction,\n asExpression: types.createAsExpression,\n assignment: types.createAssignment,\n awaitExpression: types.createAwaitExpression,\n binaryExpression: transform.createBinaryExpression,\n block: types.createBlock,\n callExpression: module.createCallExpression,\n classDeclaration: classes.createClassDeclaration,\n conditionalExpression: types.createConditionalExpression,\n constVariable: module.createConstVariable,\n constructorDeclaration: classes.createConstructorDeclaration,\n enumDeclaration: types.createEnumDeclaration,\n exportAllDeclaration: module.createExportAllDeclaration,\n exportNamedDeclaration: module.createNamedExportDeclarations,\n expressionToStatement: convert.expressionToStatement,\n forOfStatement: types.createForOfStatement,\n functionTypeNode: types.createFunctionTypeNode,\n identifier: utils.createIdentifier,\n ifStatement: transform.createIfStatement,\n indexedAccessTypeNode: types.createIndexedAccessTypeNode,\n isTsNode: utils.isTsNode,\n keywordTypeNode: types.createKeywordTypeNode,\n literalTypeNode: types.createLiteralTypeNode,\n mappedTypeNode: types.createMappedTypeNode,\n methodDeclaration: classes.createMethodDeclaration,\n namedImportDeclarations: module.createNamedImportDeclarations,\n namespaceDeclaration: types.createNamespaceDeclaration,\n newExpression: types.createNewExpression,\n nodeToString: utils.tsNodeToString,\n null: types.createNull,\n objectExpression: types.createObjectType,\n ots: utils.ots,\n parameterDeclaration: types.createParameterDeclaration,\n propertyAccessExpression: types.createPropertyAccessExpression,\n propertyAccessExpressions: transform.createPropertyAccessExpressions,\n propertyAssignment: types.createPropertyAssignment,\n regularExpressionLiteral: types.createRegularExpressionLiteral,\n returnFunctionCall: _return.createReturnFunctionCall,\n returnStatement: _return.createReturnStatement,\n returnVariable: _return.createReturnVariable,\n safeAccessExpression: transform.createSafeAccessExpression,\n stringLiteral: types.createStringLiteral,\n stringToTsNodes: utils.stringToTsNodes,\n templateLiteralType: types.createTemplateLiteralType,\n transformArrayMap: transform.createArrayMapTransform,\n transformArrayMutation: transform.createArrayTransformMutation,\n transformDateMutation: transform.createDateTransformMutation,\n transformFunctionMutation: transform.createFunctionTransformMutation,\n transformNewDate: transform.createDateTransformerExpression,\n typeAliasDeclaration: types.createTypeAliasDeclaration,\n typeArrayNode: typedef.createTypeArrayNode,\n typeInterfaceNode: typedef.createTypeInterfaceNode,\n typeIntersectionNode: typedef.createTypeIntersectionNode,\n typeNode: types.createTypeNode,\n typeOfExpression: types.createTypeOfExpression,\n typeOperatorNode: types.createTypeOperatorNode,\n typeParameterDeclaration: types.createTypeParameterDeclaration,\n typeParenthesizedNode: types.createTypeParenthesizedNode,\n typeRecordNode: typedef.createTypeRecordNode,\n typeReferenceNode: types.createTypeReferenceNode,\n typeTupleNode: typedef.createTypeTupleNode,\n typeUnionNode: typedef.createTypeUnionNode,\n valueToExpression: types.toExpression,\n};\n","import type { PathLike } from 'node:fs';\nimport fs from 'node:fs';\n\nexport const ensureDirSync = (path: PathLike) => {\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path, { recursive: true });\n }\n};\n\nexport const removeDirSync = (path: PathLike) => {\n if (fs.existsSync(path)) {\n fs.rmSync(path, { force: true, recursive: true });\n }\n};\n\n/**\n * Construct a relative import path to modules. This is used for example\n * in plugins to import types or SDK module.\n */\nexport const relativeModulePath = ({\n moduleOutput,\n sourceOutput,\n}: {\n /**\n * Output path to the imported module.\n * @example\n * 'types'\n */\n moduleOutput: string;\n /**\n * Output path to the source module.\n * @example\n * '@tanstack/react-query'\n */\n sourceOutput: string;\n}): string => {\n const outputParts = sourceOutput.split('/');\n const relativePath =\n Array.from({ length: outputParts.length }).fill('').join('../') || './';\n return `${relativePath}${moduleOutput}`;\n};\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { ImportExportItemObject } from '../compiler/utils';\nimport type { Client } from '../plugins/@hey-api/client-core/types';\nimport { getClientPlugin } from '../plugins/@hey-api/client-core/utils';\nimport type { Plugin } from '../plugins/types';\nimport type { Config } from '../types/config';\nimport { ensureDirSync, relativeModulePath } from './utils';\n\nconst getClientSrcPath = (name: string) => {\n const pluginFilePathComponents = name.split(path.sep);\n const clientSrcPath = pluginFilePathComponents\n .slice(0, pluginFilePathComponents.length - 1)\n .join(path.sep);\n return clientSrcPath;\n};\n\n/**\n * Returns path to the client module. When using client packages, this will be\n * simply the name of the package. When bundling a client, this will be a\n * relative path to the bundled client folder.\n */\nexport const clientModulePath = ({\n config,\n sourceOutput,\n}: {\n config: Config;\n sourceOutput: string;\n}): string => {\n const client = getClientPlugin(config);\n\n if ('bundle' in client && client.bundle) {\n return relativeModulePath({\n moduleOutput: 'client',\n sourceOutput,\n });\n }\n\n if (path.isAbsolute(client.name)) {\n const clientSrcPath = getClientSrcPath(client.name);\n const outputPath = path.resolve(config.output.path);\n return path.relative(outputPath, clientSrcPath).replace(/\\\\/g, '/');\n }\n\n return client.name;\n};\n\nexport const clientApi = {\n Options: {\n asType: true,\n name: 'Options',\n },\n OptionsLegacyParser: {\n asType: true,\n name: 'OptionsLegacyParser',\n },\n} satisfies Record<string, ImportExportItemObject>;\n\n/**\n * Creates a `client` folder containing the same modules as the client package.\n */\nexport const generateClientBundle = ({\n outputPath,\n plugin,\n}: {\n outputPath: string;\n plugin: Plugin.Config<Client.Config & { name: any }>;\n}): void => {\n // create folder for client modules\n const dirPath = path.resolve(outputPath, 'client');\n ensureDirSync(dirPath);\n\n let clientSrcPath = '';\n if (path.isAbsolute(plugin.name)) {\n clientSrcPath = getClientSrcPath(plugin.name);\n }\n\n if (plugin.bundleSource_EXPERIMENTAL && !clientSrcPath) {\n const clientModulePath = path.normalize(require.resolve(plugin.name));\n const clientModulePathComponents = clientModulePath.split(path.sep);\n clientSrcPath = [\n ...clientModulePathComponents.slice(\n 0,\n clientModulePathComponents.indexOf('dist'),\n ),\n 'src',\n ].join(path.sep);\n }\n\n if (clientSrcPath) {\n fs.cpSync(clientSrcPath, dirPath, {\n recursive: true,\n });\n return;\n }\n\n const clientModulePath = path.normalize(require.resolve(plugin.name));\n const clientModulePathComponents = clientModulePath.split(path.sep);\n const clientDistPath = clientModulePathComponents\n .slice(0, clientModulePathComponents.indexOf('dist') + 1)\n .join(path.sep);\n\n const indexJsFile =\n clientModulePathComponents[clientModulePathComponents.length - 1];\n const distFiles = [indexJsFile!, 'index.d.ts'];\n if (plugin.name !== '@hey-api/client-nuxt') {\n distFiles.push('index.d.cts');\n }\n for (const file of distFiles) {\n fs.copyFileSync(\n path.resolve(clientDistPath, file),\n path.resolve(dirPath, file),\n );\n }\n};\n","const parseUrlRegExp =\n /^(([^:/?#]+):)?((\\/\\/)?([^:/?#]*)(:?([^/?#]*)))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n\ninterface Url {\n host: string;\n path: string;\n port: string;\n protocol: string;\n}\n\nexport const parseUrl = (value: string): Url => {\n const errorResponse: Url = {\n host: '',\n path: '',\n port: '',\n protocol: '',\n };\n\n parseUrlRegExp.lastIndex = 0;\n const match = value.match(parseUrlRegExp);\n\n if (!match) {\n return errorResponse;\n }\n\n const host = match[5] || '';\n\n // value is a relative file system path\n if (host === '.' || host === '..') {\n return errorResponse;\n }\n\n const path = match[8] || '';\n const protocol = match[2] || '';\n\n // value is probably a Windows file system path\n if (protocol.length === 1) {\n return errorResponse;\n }\n\n return {\n host,\n path: path === '/' ? '' : path,\n port: match[7] || '',\n protocol,\n };\n};\n","export const irRef = '#/ir/';\n\nexport const isRefOpenApiComponent = ($ref: string): boolean => {\n const parts = refToParts($ref);\n // reusable components are nested within components/<namespace>/<name>\n return parts.length === 3 && parts[0] === 'components';\n};\n\n/**\n * Returns the reusable component name from `$ref`.\n */\nexport const refToName = ($ref: string): string => {\n const parts = refToParts($ref);\n const name = parts[parts.length - 1]!;\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n return decodeURI(name);\n};\n\nconst refToParts = ($ref: string): string[] => {\n // Remove the leading `#` and split by `/` to traverse the object\n const parts = $ref.replace(/^#\\//, '').split('/');\n return parts;\n};\n\nexport const resolveRef = <T>({\n $ref,\n spec,\n}: {\n $ref: string;\n spec: Record<string, any>;\n}): T => {\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n const parts = refToParts(decodeURI($ref));\n\n let current = spec;\n\n for (const part of parts) {\n const p = part as keyof typeof current;\n if (current[p] === undefined) {\n throw new Error(`Reference not found: ${$ref}`);\n }\n current = current[p];\n }\n\n return current as T;\n};\n","import type { StringCase } from '../types/config';\n\nconst uppercaseRegExp = /[\\p{Lu}]/u;\nconst lowercaseRegExp = /[\\p{Ll}]/u;\nconst identifierRegExp = /([\\p{Alpha}\\p{N}_]|$)/u;\nconst separatorsRegExp = /[_.\\- `\\\\[\\]{}\\\\/]+/;\n\nconst leadingSeparatorsRegExp = new RegExp(`^${separatorsRegExp.source}`);\nconst separatorsAndIdentifierRegExp = new RegExp(\n `${separatorsRegExp.source}${identifierRegExp.source}`,\n 'gu',\n);\nconst numbersAndIdentifierRegExp = new RegExp(\n `\\\\d+${identifierRegExp.source}`,\n 'gu',\n);\n\nconst preserveCase = ({\n case: _case,\n string,\n}: {\n readonly case: StringCase;\n string: string;\n}) => {\n let isLastCharLower = false;\n let isLastCharUpper = false;\n let isLastLastCharUpper = false;\n let isLastLastCharPreserved = false;\n\n const separator =\n _case === 'snake_case' || _case === 'SCREAMING_SNAKE_CASE' ? '_' : '-';\n\n for (let index = 0; index < string.length; index++) {\n const character = string[index]!;\n isLastLastCharPreserved =\n index > 2 ? string[index - 3] === separator : true;\n\n let nextIndex = index + 1;\n let nextCharacter = string[nextIndex];\n separatorsRegExp.lastIndex = 0;\n while (nextCharacter && separatorsRegExp.test(nextCharacter)) {\n nextIndex += 1;\n nextCharacter = string[nextIndex];\n }\n const isSeparatorBeforeNextCharacter = nextIndex !== index + 1;\n\n lowercaseRegExp.lastIndex = 0;\n uppercaseRegExp.lastIndex = 0;\n if (\n uppercaseRegExp.test(character) &&\n (isLastCharLower ||\n (nextCharacter &&\n !isSeparatorBeforeNextCharacter &&\n nextCharacter !== 's' &&\n lowercaseRegExp.test(nextCharacter)))\n ) {\n // insert separator behind character\n string = `${string.slice(0, index)}${separator}${string.slice(index)}`;\n index++;\n isLastLastCharUpper = isLastCharUpper;\n isLastCharLower = false;\n isLastCharUpper = true;\n } else if (\n isLastCharUpper &&\n isLastLastCharUpper &&\n lowercaseRegExp.test(character) &&\n !isLastLastCharPreserved &&\n // naive detection of plurals\n !(\n character === 's' &&\n (!nextCharacter || nextCharacter.toLocaleLowerCase() !== nextCharacter)\n )\n ) {\n // insert separator 2 characters behind\n string = `${string.slice(0, index - 1)}${separator}${string.slice(index - 1)}`;\n isLastLastCharUpper = isLastCharUpper;\n isLastCharLower = true;\n isLastCharUpper = false;\n } else {\n const characterLower = character.toLocaleLowerCase();\n const characterUpper = character.toLocaleUpperCase();\n isLastLastCharUpper = isLastCharUpper;\n isLastCharLower =\n characterLower === character && characterUpper !== character;\n isLastCharUpper =\n characterUpper === character && characterLower !== character;\n }\n }\n\n return string;\n};\n\nexport const stringCase = ({\n case: _case,\n stripLeadingSeparators = true,\n value,\n}: {\n readonly case: StringCase | undefined;\n /**\n * If leading separators have a semantic meaning, we might not want to\n * remove them.\n */\n stripLeadingSeparators?: boolean;\n value: string;\n}): string => {\n let result = value.trim();\n\n if (!result.length) {\n return '';\n }\n\n if (!_case || _case === 'preserve') {\n return result;\n }\n\n if (result.length === 1) {\n separatorsRegExp.lastIndex = 0;\n if (separatorsRegExp.test(result)) {\n return '';\n }\n\n return _case === 'PascalCase' || _case === 'SCREAMING_SNAKE_CASE'\n ? result.toLocaleUpperCase()\n : result.toLocaleLowerCase();\n }\n\n const hasUpperCase = result !== result.toLocaleLowerCase();\n\n if (hasUpperCase) {\n result = preserveCase({ case: _case, string: result });\n }\n\n if (stripLeadingSeparators || result[0] !== value[0]) {\n result = result.replace(leadingSeparatorsRegExp, '');\n }\n\n result =\n _case === 'SCREAMING_SNAKE_CASE'\n ? result.toLocaleUpperCase()\n : result.toLocaleLowerCase();\n\n if (_case === 'PascalCase') {\n result = `${result.charAt(0).toLocaleUpperCase()}${result.slice(1)}`;\n }\n\n if (_case === 'snake_case' || _case === 'SCREAMING_SNAKE_CASE') {\n result = result.replaceAll(\n separatorsAndIdentifierRegExp,\n (match, identifier, offset) => {\n if (offset === 0 && !stripLeadingSeparators) {\n return match;\n }\n return `_${identifier}`;\n },\n );\n\n if (result[result.length - 1] === '_') {\n // strip trailing underscore\n result = result.slice(0, result.length - 1);\n }\n } else {\n separatorsAndIdentifierRegExp.lastIndex = 0;\n numbersAndIdentifierRegExp.lastIndex = 0;\n\n result = result.replaceAll(\n numbersAndIdentifierRegExp,\n (match, _, offset) => {\n if (['_', '-', '.'].includes(result.charAt(offset + match.length))) {\n return match;\n }\n\n return match.toLocaleUpperCase();\n },\n );\n\n result = result.replaceAll(\n separatorsAndIdentifierRegExp,\n (match, identifier, offset) => {\n if (\n offset === 0 &&\n !stripLeadingSeparators &&\n match[0] &&\n value.startsWith(match[0])\n ) {\n return match;\n }\n return identifier.toLocaleUpperCase();\n },\n );\n }\n\n return result;\n};\n","import type { StringCase } from '../../../types/config';\nimport { irRef } from '../../../utils/ref';\nimport { stringCase } from '../../../utils/stringCase';\n\ninterface OperationIRRef {\n /**\n * Operation ID\n */\n id: string;\n}\n\nexport const operationIrRef = ({\n case: _case = 'PascalCase',\n id,\n type,\n}: OperationIRRef & {\n readonly case?: StringCase;\n type: 'data' | 'error' | 'errors' | 'response' | 'responses';\n}): string => {\n let affix = '';\n switch (type) {\n case 'data':\n affix = 'Data';\n break;\n case 'error':\n // error union\n affix = 'Error';\n break;\n case 'errors':\n // errors map\n affix = 'Errors';\n break;\n case 'response':\n // response union\n affix = 'Response';\n break;\n case 'responses':\n // responses map\n affix = 'Responses';\n break;\n }\n return `${irRef}${stringCase({\n case: _case,\n value: id,\n })}-${affix}`;\n};\n","import type { Identifier, TypeScriptFile } from '../../../generate/files';\nimport type { IR } from '../../../ir/types';\nimport { operationIrRef } from '../../shared/utils/ref';\n\nexport const typesId = 'types';\n\nfunction refIdentifier<T extends Identifier>(\n identifier: T,\n onGet?: (identifier: T) => void,\n): T {\n return {\n ...identifier,\n get name() {\n onGet?.(identifier);\n return identifier.name;\n },\n };\n}\n\nexport const importIdentifierData = ({\n context,\n file,\n operation,\n}: {\n context: IR.Context;\n file: TypeScriptFile;\n operation: IR.OperationObject;\n}): Identifier => {\n const identifierData = context.file({ id: typesId })!.identifier({\n $ref: operationIrRef({ id: operation.id, type: 'data' }),\n namespace: 'type',\n });\n return refIdentifier(identifierData, (identifier) => {\n if (identifier.name) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifier.name,\n });\n }\n });\n};\n\nexport const importIdentifierError = ({\n context,\n file,\n operation,\n}: {\n context: IR.Context;\n file: TypeScriptFile;\n operation: IR.OperationObject;\n}): Identifier => {\n const identifierError = context.file({ id: typesId })!.identifier({\n $ref: operationIrRef({ id: operation.id, type: 'error' }),\n namespace: 'type',\n });\n return refIdentifier(identifierError, (identifier) => {\n if (identifier.name) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifier.name,\n });\n }\n });\n};\n\nexport const importIdentifierResponse = ({\n context,\n file,\n operation,\n}: {\n context: IR.Context;\n file: TypeScriptFile;\n operation: IR.OperationObject;\n}): Identifier => {\n const identifierResponse = context.file({ id: typesId })!.identifier({\n $ref: operationIrRef({ id: operation.id, type: 'response' }),\n namespace: 'type',\n });\n return refIdentifier(identifierResponse, (identifier) => {\n if (identifier.name) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifier.name,\n });\n }\n });\n};\n","import { compiler } from '../../../compiler';\nimport { clientModulePath } from '../../../generate/client';\nimport { parseUrl } from '../../../utils/url';\nimport { clientId, getClientBaseUrlKey } from '../client-core/utils';\nimport { typesId } from '../typescript/ref';\nimport type { PluginHandler } from './types';\n\nconst resolveBaseUrlString: PluginHandler<string | undefined> = ({\n context,\n plugin,\n}) => {\n const { baseUrl } = plugin;\n\n if (baseUrl === false) {\n return;\n }\n\n if (typeof baseUrl === 'string') {\n return baseUrl;\n }\n\n const { servers } = context.ir;\n\n if (!servers) {\n return;\n }\n\n return servers[typeof baseUrl === 'number' ? baseUrl : 0]?.url;\n};\n\nexport const createClient: PluginHandler = ({ context, plugin }) => {\n const file = context.file({ id: clientId })!;\n\n const clientModule = clientModulePath({\n config: context.config,\n sourceOutput: file.nameWithoutExtension(),\n });\n const createClient = file.import({\n module: clientModule,\n name: 'createClient',\n });\n const createConfig = file.import({\n module: clientModule,\n name: 'createConfig',\n });\n const clientOptions = file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: 'ClientOptions',\n });\n\n const createClientConfig = plugin.runtimeConfigPath\n ? file.import({\n module: file.relativePathToFile({\n context,\n id: plugin.runtimeConfigPath,\n }),\n name: 'createClientConfig',\n })\n : undefined;\n\n const defaultValues: Array<unknown> = [];\n\n const resolvedBaseUrl = resolveBaseUrlString({ context, plugin });\n if (resolvedBaseUrl) {\n const url = parseUrl(resolvedBaseUrl);\n if (url.protocol && url.host && !resolvedBaseUrl.includes('{')) {\n defaultValues.push({\n key: getClientBaseUrlKey(context.config),\n value: resolvedBaseUrl,\n });\n }\n }\n\n if ('throwOnError' in plugin && plugin.throwOnError) {\n defaultValues.push({\n key: 'throwOnError',\n value: true,\n });\n }\n\n const createConfigParameters = [\n compiler.callExpression({\n functionName: createConfig.name,\n parameters: defaultValues.length\n ? [compiler.objectExpression({ obj: defaultValues })]\n : undefined,\n types: [compiler.typeReferenceNode({ typeName: clientOptions.name })],\n }),\n ];\n\n const statement = compiler.constVariable({\n exportConst: true,\n expression: compiler.callExpression({\n functionName: createClient.name,\n parameters: createClientConfig\n ? [\n compiler.callExpression({\n functionName: createClientConfig.name,\n parameters: createConfigParameters,\n }),\n ]\n : createConfigParameters,\n }),\n name: 'client',\n });\n file.add(statement);\n};\n","import { compiler } from '../../../compiler';\nimport { clientModulePath } from '../../../generate/client';\nimport { clientId } from '../client-core/utils';\nimport { typesId } from '../typescript/ref';\nimport type { PluginHandler } from './types';\n\nexport const createClientConfigType: PluginHandler = ({ context }) => {\n const file = context.file({ id: clientId })!;\n\n const clientModule = clientModulePath({\n config: context.config,\n sourceOutput: file.nameWithoutExtension(),\n });\n const clientOptions = file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: 'ClientOptions',\n });\n const configType = file.import({\n asType: true,\n module: clientModule,\n name: 'Config',\n });\n const defaultClientOptions = file.import({\n alias: 'DefaultClientOptions',\n asType: true,\n module: clientModule,\n name: 'ClientOptions',\n });\n\n const defaultClientOptionsType = compiler.typeReferenceNode({\n typeName: defaultClientOptions.name,\n });\n const tType = compiler.typeReferenceNode({ typeName: 'T' });\n\n const typeCreateClientConfig = compiler.typeAliasDeclaration({\n comment: [\n 'The `createClientConfig()` function will be called on client initialization',\n \"and the returned object will become the client's initial configuration.\",\n '',\n 'You may want to initialize your client this way instead of calling',\n \"`setConfig()`. This is useful for example if you're using Next.js\",\n 'to ensure your client always has the correct values.',\n ],\n exportType: true,\n name: 'CreateClientConfig',\n type: compiler.functionTypeNode({\n parameters: [\n compiler.parameterDeclaration({\n name: 'override',\n required: false,\n type: compiler.typeReferenceNode({\n typeArguments: [\n compiler.typeIntersectionNode({\n types: [defaultClientOptionsType, tType],\n }),\n ],\n typeName: configType.name,\n }),\n }),\n ],\n returnType: compiler.typeReferenceNode({\n typeArguments: [\n compiler.typeIntersectionNode({\n types: [\n compiler.typeReferenceNode({\n typeArguments: [defaultClientOptionsType],\n typeName: 'Required',\n }),\n tType,\n ],\n }),\n ],\n typeName: configType.name,\n }),\n }),\n typeParameters: [\n {\n default: compiler.typeReferenceNode({ typeName: clientOptions.name }),\n extends: defaultClientOptionsType,\n name: 'T',\n },\n ],\n });\n\n file.add(typeCreateClientConfig);\n};\n","import { clientId } from '../client-core/utils';\nimport { createClient } from './client';\nimport { createClientConfigType } from './createClientConfig';\nimport type { PluginHandler } from './types';\n\nexport const clientPluginHandler: PluginHandler = ({ context, plugin }) => {\n context.createFile({\n exportFromIndex: plugin.exportFromIndex,\n id: clientId,\n path: plugin.output,\n });\n\n createClientConfigType({ context, plugin });\n createClient({ context, plugin });\n};\n","import type { Plugin } from '../../types';\nimport { clientDefaultConfig } from '../client-core/config';\nimport { clientPluginHandler } from '../client-core/plugin';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n ...clientDefaultConfig,\n _handler: clientPluginHandler,\n _handlerLegacy: () => {},\n name: '@hey-api/client-axios',\n throwOnError: false,\n};\n\n/**\n * Type helper for `@hey-api/client-axios` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../../types';\nimport { clientDefaultConfig } from '../client-core/config';\nimport { clientPluginHandler } from '../client-core/plugin';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n ...clientDefaultConfig,\n _handler: clientPluginHandler,\n _handlerLegacy: () => {},\n name: '@hey-api/client-fetch',\n throwOnError: false,\n};\n\n/**\n * Type helper for `@hey-api/client-fetch` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../../types';\nimport { clientDefaultConfig } from '../client-core/config';\nimport { clientPluginHandler } from '../client-core/plugin';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n ...clientDefaultConfig,\n _handler: clientPluginHandler,\n _handlerLegacy: () => {},\n name: '@hey-api/client-next',\n throwOnError: false,\n};\n\n/**\n * Type helper for `@hey-api/client-next` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../../types';\nimport { clientDefaultConfig } from '../client-core/config';\nimport { clientPluginHandler } from '../client-core/plugin';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n ...clientDefaultConfig,\n _handler: clientPluginHandler,\n _handlerLegacy: () => {},\n name: '@hey-api/client-nuxt',\n};\n\n/**\n * Type helper for `@hey-api/client-nuxt` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../../types';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _handler: () => {},\n _handlerLegacy: () => {},\n _tags: ['client'],\n name: 'legacy/angular',\n output: 'client',\n};\n\n/**\n * Type helper for `legacy/angular` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../../types';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _handler: () => {},\n _handlerLegacy: () => {},\n _tags: ['client'],\n name: 'legacy/axios',\n output: 'client',\n};\n\n/**\n * Type helper for `legacy/axios` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../../types';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _handler: () => {},\n _handlerLegacy: () => {},\n _tags: ['client'],\n name: 'legacy/fetch',\n output: 'client',\n};\n\n/**\n * Type helper for `legacy/fetch` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../../types';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _handler: () => {},\n _handlerLegacy: () => {},\n _tags: ['client'],\n name: 'legacy/node',\n output: 'client',\n};\n\n/**\n * Type helper for `legacy/node` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../../types';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _handler: () => {},\n _handlerLegacy: () => {},\n _tags: ['client'],\n name: 'legacy/xhr',\n output: 'client',\n};\n\n/**\n * Type helper for `legacy/xhr` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import {\n illegalStartCharactersRegExp,\n reservedBrowserGlobalsRegExp,\n reservedJavaScriptGlobalsRegExp,\n reservedJavaScriptKeywordsRegExp,\n reservedNodeGlobalsRegExp,\n reservedTypeScriptKeywordsRegExp,\n} from '../../../utils/regexp';\n\nconst regexps = [\n reservedJavaScriptKeywordsRegExp,\n reservedTypeScriptKeywordsRegExp,\n reservedJavaScriptGlobalsRegExp,\n reservedNodeGlobalsRegExp,\n reservedBrowserGlobalsRegExp,\n];\n\nexport const ensureValidIdentifier = (name: string): string => {\n let identifier = name.replace(/[^$\\u200c\\u200d\\p{ID_Continue}]/gu, '_');\n\n illegalStartCharactersRegExp.lastIndex = 0;\n if (illegalStartCharactersRegExp.test(identifier)) {\n return `_${identifier}`;\n }\n\n for (const regexp of regexps) {\n if (identifier.startsWith('_')) {\n return identifier;\n }\n\n identifier = identifier.replace(regexp, '_$1');\n }\n\n return identifier;\n};\n","import { compiler } from '../../../compiler';\nimport type { IR } from '../../../ir/types';\nimport type { SchemaObject as OpenApiV2_0_XSchemaObject } from '../../../openApi/2.0.x/types/spec';\nimport type {\n ReferenceObject as OpenApiV3_0_XReferenceObject,\n SchemaObject as OpenApiV3_0_XSchemaObject,\n} from '../../../openApi/3.0.x/types/spec';\nimport type { SchemaObject as OpenApiV3_1_XSchemaObject } from '../../../openApi/3.1.x/types/spec';\nimport { ensureValidIdentifier } from '../../../openApi/shared/utils/identifier';\nimport type { OpenApi } from '../../../openApi/types';\nimport type { Plugin } from '../../types';\nimport type { Config } from './types';\n\nconst schemasId = 'schemas';\n\nconst stripSchema = ({\n plugin,\n schema,\n}: {\n plugin: Plugin.Instance<Config>;\n schema:\n | OpenApiV2_0_XSchemaObject\n | OpenApiV3_0_XSchemaObject\n | OpenApiV3_1_XSchemaObject;\n}) => {\n if (plugin.type === 'form') {\n if (schema.description) {\n delete schema.description;\n }\n\n if (schema['x-enum-descriptions']) {\n delete schema['x-enum-descriptions'];\n }\n\n if (schema['x-enum-varnames']) {\n delete schema['x-enum-varnames'];\n }\n\n if (schema['x-enumNames']) {\n delete schema['x-enumNames'];\n }\n\n if (schema.title) {\n delete schema.title;\n }\n }\n};\n\nconst schemaToJsonSchemaDraft_04 = ({\n context,\n plugin,\n schema: _schema,\n}: {\n context: IR.Context;\n plugin: Plugin.Instance<Config>;\n schema: OpenApiV2_0_XSchemaObject;\n}): OpenApiV2_0_XSchemaObject => {\n if (Array.isArray(_schema)) {\n return _schema.map((item) =>\n schemaToJsonSchemaDraft_04({\n context,\n plugin,\n schema: item,\n }),\n ) as unknown as OpenApiV2_0_XSchemaObject;\n }\n\n const schema = structuredClone(_schema);\n\n if (schema.$ref) {\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n schema.$ref = decodeURI(schema.$ref);\n return schema;\n }\n\n stripSchema({ plugin, schema });\n\n if (\n schema.additionalProperties &&\n typeof schema.additionalProperties !== 'boolean'\n ) {\n schema.additionalProperties = schemaToJsonSchemaDraft_04({\n context,\n plugin,\n schema: schema.additionalProperties,\n });\n }\n\n if (schema.allOf) {\n schema.allOf = schema.allOf.map((item) =>\n schemaToJsonSchemaDraft_04({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.items) {\n schema.items = schemaToJsonSchemaDraft_04({\n context,\n plugin,\n schema: schema.items as OpenApiV2_0_XSchemaObject,\n });\n }\n\n if (schema.properties) {\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n\n if (typeof property !== 'boolean') {\n schema.properties[name] = schemaToJsonSchemaDraft_04({\n context,\n plugin,\n schema: property,\n });\n }\n }\n }\n\n return schema;\n};\n\nconst schemaToJsonSchemaDraft_05 = ({\n context,\n plugin,\n schema: _schema,\n}: {\n context: IR.Context;\n plugin: Plugin.Instance<Config>;\n schema: OpenApiV3_0_XSchemaObject | OpenApiV3_0_XReferenceObject;\n}): OpenApiV3_0_XSchemaObject | OpenApiV3_0_XReferenceObject => {\n if (Array.isArray(_schema)) {\n return _schema.map((item) =>\n schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: item,\n }),\n ) as OpenApiV3_0_XSchemaObject | OpenApiV3_0_XReferenceObject;\n }\n\n const schema = structuredClone(_schema);\n\n if ('$ref' in schema) {\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n schema.$ref = decodeURI(schema.$ref);\n return schema;\n }\n\n stripSchema({ plugin, schema });\n\n if (\n schema.additionalProperties &&\n typeof schema.additionalProperties !== 'boolean'\n ) {\n schema.additionalProperties = schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: schema.additionalProperties,\n });\n }\n\n if (schema.allOf) {\n schema.allOf = schema.allOf.map((item) =>\n schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.anyOf) {\n schema.anyOf = schema.anyOf.map((item) =>\n schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.items) {\n schema.items = schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: schema.items,\n });\n }\n\n if (schema.oneOf) {\n schema.oneOf = schema.oneOf.map((item) =>\n schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.properties) {\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n\n if (typeof property !== 'boolean') {\n schema.properties[name] = schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema: property,\n });\n }\n }\n }\n\n return schema;\n};\n\nconst schemaToJsonSchema2020_12 = ({\n context,\n plugin,\n schema: _schema,\n}: {\n context: IR.Context;\n plugin: Plugin.Instance<Config>;\n schema: OpenApiV3_1_XSchemaObject;\n}): OpenApiV3_1_XSchemaObject => {\n if (Array.isArray(_schema)) {\n return _schema.map((item) =>\n schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: item,\n }),\n ) as OpenApiV3_1_XSchemaObject;\n }\n\n const schema = structuredClone(_schema);\n\n stripSchema({ plugin, schema });\n\n if (schema.$ref) {\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n schema.$ref = decodeURI(schema.$ref);\n }\n\n if (\n schema.additionalProperties &&\n typeof schema.additionalProperties !== 'boolean'\n ) {\n schema.additionalProperties = schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: schema.additionalProperties,\n });\n }\n\n if (schema.allOf) {\n schema.allOf = schema.allOf.map((item) =>\n schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.anyOf) {\n schema.anyOf = schema.anyOf.map((item) =>\n schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.items) {\n schema.items = schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: schema.items,\n });\n }\n\n if (schema.oneOf) {\n schema.oneOf = schema.oneOf.map((item) =>\n schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.prefixItems) {\n schema.prefixItems = schema.prefixItems.map((item) =>\n schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: item,\n }),\n );\n }\n\n if (schema.properties) {\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n\n if (typeof property !== 'boolean') {\n schema.properties[name] = schemaToJsonSchema2020_12({\n context,\n plugin,\n schema: property,\n });\n }\n }\n }\n\n return schema;\n};\n\nconst schemaName = ({\n name,\n plugin,\n schema,\n}: {\n name: string;\n plugin: Plugin.Instance<Config>;\n schema:\n | OpenApiV2_0_XSchemaObject\n | OpenApiV3_0_XReferenceObject\n | OpenApiV3_0_XSchemaObject\n | OpenApiV3_1_XSchemaObject;\n}): string => {\n const customName = plugin.nameBuilder?.(name, schema) ?? `${name}Schema`;\n return ensureValidIdentifier(customName);\n};\n\nconst schemasV2_0_X = ({\n context,\n plugin,\n}: {\n context: IR.Context<OpenApi.V2_0_X>;\n plugin: Plugin.Instance<Config>;\n}) => {\n if (!context.spec.definitions) {\n return;\n }\n\n for (const name in context.spec.definitions) {\n const schema = context.spec.definitions[name]!;\n const obj = schemaToJsonSchemaDraft_04({\n context,\n plugin,\n schema,\n });\n const statement = compiler.constVariable({\n assertion: 'const',\n exportConst: true,\n expression: compiler.objectExpression({ obj }),\n name: schemaName({ name, plugin, schema }),\n });\n context.file({ id: schemasId })!.add(statement);\n }\n};\n\nconst schemasV3_0_X = ({\n context,\n plugin,\n}: {\n context: IR.Context<OpenApi.V3_0_X>;\n plugin: Plugin.Instance<Config>;\n}) => {\n if (!context.spec.components) {\n return;\n }\n\n for (const name in context.spec.components.schemas) {\n const schema = context.spec.components.schemas[name]!;\n const obj = schemaToJsonSchemaDraft_05({\n context,\n plugin,\n schema,\n });\n const statement = compiler.constVariable({\n assertion: 'const',\n exportConst: true,\n expression: compiler.objectExpression({ obj }),\n name: schemaName({ name, plugin, schema }),\n });\n context.file({ id: schemasId })!.add(statement);\n }\n};\n\nconst schemasV3_1_X = ({\n context,\n plugin,\n}: {\n context: IR.Context<OpenApi.V3_1_X>;\n plugin: Plugin.Instance<Config>;\n}) => {\n if (!context.spec.components) {\n return;\n }\n\n for (const name in context.spec.components.schemas) {\n const schema = context.spec.components.schemas[name]!;\n const obj = schemaToJsonSchema2020_12({\n context,\n plugin,\n schema,\n });\n const statement = compiler.constVariable({\n assertion: 'const',\n exportConst: true,\n expression: compiler.objectExpression({ obj }),\n name: schemaName({ name, plugin, schema }),\n });\n context.file({ id: schemasId })!.add(statement);\n }\n};\n\nexport const handler: Plugin.Handler<Config> = ({ context, plugin }) => {\n context.createFile({\n exportFromIndex: plugin.exportFromIndex,\n id: schemasId,\n path: plugin.output,\n });\n\n if ('swagger' in context.spec) {\n schemasV2_0_X({\n context: context as IR.Context<OpenApi.V2_0_X>,\n plugin,\n });\n return;\n }\n\n switch (context.spec.openapi) {\n case '3.0.0':\n case '3.0.1':\n case '3.0.2':\n case '3.0.3':\n case '3.0.4':\n schemasV3_0_X({\n context: context as IR.Context<OpenApi.V3_0_X>,\n plugin,\n });\n break;\n case '3.1.0':\n case '3.1.1':\n schemasV3_1_X({\n context: context as IR.Context<OpenApi.V3_1_X>,\n plugin,\n });\n break;\n default:\n break;\n }\n};\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type ts from 'typescript';\n\nimport { compiler } from '../compiler';\nimport { type ImportExportItemObject, tsNodeToString } from '../compiler/utils';\nimport type { IR } from '../ir/types';\nimport { ensureValidIdentifier } from '../openApi/shared/utils/identifier';\nimport type { StringCase } from '../types/config';\nimport { stringCase } from '../utils/stringCase';\nimport { ensureDirSync } from './utils';\n\nexport interface Identifier {\n /**\n * Did this function add a new property to the file's `identifiers` map?\n */\n created: boolean;\n /**\n * The resolved identifier name. False means the identifier has been blacklisted.\n */\n name: string | false;\n}\n\ntype Namespace = Record<\n string,\n Pick<Identifier, 'name'> & {\n /**\n * Ref to the type in OpenAPI specification.\n */\n $ref: string;\n }\n>;\n\ninterface Namespaces {\n /**\n * Type namespace. Types, interfaces, and type aliases exist here.\n * @example\n * ```ts\n * export type Foo = string;\n * ```\n */\n type: Namespace;\n /**\n * Value namespace. Variables, functions, classes, and constants exist here.\n * @example\n * ```js\n * export const foo = '';\n * ```\n */\n value: Namespace;\n}\n\nexport type FileImportResult = Pick<ImportExportItemObject, 'asType' | 'name'>;\n\nexport class TypeScriptFile {\n /**\n * Should the exports from this file be re-exported in the index barrel file?\n */\n private _exportFromIndex: boolean;\n private _headers: Array<string> = [];\n private _identifierCase: StringCase | undefined;\n private _imports = new Map<string, Map<string, ImportExportItemObject>>();\n private _items: Array<ts.Node | string> = [];\n private _name: string;\n private _path: string;\n\n public namespaces: Namespaces = {\n type: {},\n value: {},\n };\n /**\n * Path relative to the client output root.\n */\n // TODO: parser - add relative path property for quick access, currently\n // everything is resolved into an absolute path with cwd\n // public relativePath: string;\n\n public constructor({\n dir,\n exportFromIndex = false,\n header = true,\n identifierCase,\n name,\n }: {\n dir: string;\n /**\n * Should the exports from this file be re-exported in the index barrel file?\n */\n exportFromIndex?: boolean;\n header?: boolean;\n identifierCase?: StringCase;\n name: string;\n }) {\n this._exportFromIndex = exportFromIndex;\n this._identifierCase = identifierCase;\n this._name = this._setName(name);\n this._path = path.resolve(dir, this._name);\n\n if (header) {\n this._headers.push(\n '// This file is auto-generated by @hey-api/openapi-ts',\n );\n }\n }\n\n public add(...nodes: Array<ts.Node | string>) {\n this._items = this._items.concat(nodes);\n }\n\n /**\n * Prevents a specific identifier from being created. This is useful for\n * transformers where we know a certain transformer won't be needed, and\n * we want to avoid attempting to create since we know it won't happen.\n */\n public blockIdentifier({\n $ref,\n namespace,\n }: Pick<EnsureUniqueIdentifierData, '$ref'> & {\n namespace: keyof Namespaces;\n }): Identifier {\n const refValue = this.namespaces[namespace][$ref];\n if (!refValue) {\n throw new Error(\n `Identifier for $ref ${$ref} in namespace ${namespace} not found`,\n );\n }\n\n refValue.name = false;\n\n return {\n created: false,\n name: refValue.name,\n };\n }\n\n public get exportFromIndex(): boolean {\n return this._exportFromIndex;\n }\n\n public identifier({\n namespace,\n ...args\n }: Omit<EnsureUniqueIdentifierData, 'case' | 'namespace'> & {\n namespace: keyof Namespaces;\n }): Identifier {\n return ensureUniqueIdentifier({\n case: this._identifierCase,\n namespace: this.namespaces[namespace],\n ...args,\n });\n }\n\n /**\n * Adds an import to the provided module. Handles duplication, returns added\n * import. Returns the imported name. If we import an aliased export, `name`\n * will be equal to the specified `alias`.\n */\n public import({\n module,\n ...importedItem\n }: ImportExportItemObject & {\n module: string;\n }): FileImportResult {\n let moduleMap = this._imports.get(module);\n\n if (!moduleMap) {\n moduleMap = new Map<string, ImportExportItemObject>();\n this._imports.set(module, moduleMap);\n }\n\n const match = moduleMap.get(importedItem.name);\n if (match) {\n return {\n ...match,\n name: match.alias || match.name,\n };\n }\n\n moduleMap.set(importedItem.name, importedItem);\n return {\n ...importedItem,\n name: importedItem.alias || importedItem.name,\n };\n }\n\n public isEmpty() {\n return !this._items.length;\n }\n\n public nameWithoutExtension() {\n const { name } = splitNameAndExtension(this._name);\n return name;\n }\n\n public relativePathToFile({\n context,\n id,\n }: {\n context: IR.Context;\n id: string;\n }): string {\n let filePath = '';\n\n // relative file path\n if (id.startsWith('.')) {\n let configFileParts: Array<string> = [];\n // if providing a custom configuration file, relative paths must resolve\n // relative to the configuration file.\n if (context.config.configFile) {\n const cfgParts = context.config.configFile.split('/');\n configFileParts = cfgParts.slice(0, cfgParts.length - 1);\n }\n filePath = path.resolve(process.cwd(), ...configFileParts, id);\n } else {\n const file = context.file({ id });\n if (!file) {\n throw new Error(`File with id ${id} does not exist`);\n }\n filePath = file._path;\n }\n\n const thisPathParts = this._path.split(path.sep);\n const filePathParts = filePath.split(path.sep);\n\n let index = -1;\n let relativePath = '';\n for (const part of thisPathParts) {\n index += 1;\n if (filePathParts[index] !== part) {\n const pathArray = Array.from({\n length: thisPathParts.length - index,\n }).fill('');\n const relativePathToFile = filePathParts.slice(index);\n const relativeFolder = relativePathToFile.slice(\n 0,\n relativePathToFile.length - 1,\n );\n if (relativeFolder.length) {\n relativeFolder.push('');\n }\n relativePath =\n (pathArray.join('../') || './') + relativeFolder.join('/');\n break;\n }\n }\n\n const fileName = filePathParts[filePathParts.length - 1]!;\n // TODO: parser - cache responses\n return `${relativePath}${splitNameAndExtension(fileName).name}`;\n }\n\n public remove(options?: Parameters<typeof fs.rmSync>[1]) {\n fs.rmSync(this._path, options);\n }\n\n /**\n * Removes last node form the stack. Works as undo.\n */\n public removeNode() {\n this._items = this._items.slice(0, this._items.length - 1);\n }\n\n private _setName(fileName: string) {\n if (fileName.includes('index')) {\n return fileName;\n }\n\n const { extension, name } = splitNameAndExtension(fileName);\n return [name, 'gen', extension].filter(Boolean).join('.');\n }\n\n public toString(separator: string = '\\n') {\n let output: string[] = [];\n if (this._headers.length) {\n output.push(this._headers.join('\\n'));\n }\n const importsStringArray: string[] = [];\n for (const [_module, moduleMap] of this._imports.entries()) {\n const imports = Array.from(moduleMap.values());\n const node = compiler.namedImportDeclarations({\n imports,\n module: _module,\n });\n importsStringArray.push(tsNodeToString({ node }));\n }\n if (importsStringArray.length) {\n output.push(importsStringArray.join('\\n'));\n }\n output = output.concat(\n this._items.map((node) =>\n typeof node === 'string'\n ? node\n : tsNodeToString({ node, unescape: true }),\n ),\n );\n return output.join(separator);\n }\n\n public write(separator = '\\n') {\n if (this.isEmpty()) {\n this.remove({ force: true });\n return;\n }\n\n let dir = this._path;\n if (typeof this._path === 'string') {\n const parts = this._path.split(path.sep);\n dir = parts.slice(0, parts.length - 1).join(path.sep);\n }\n ensureDirSync(dir);\n fs.writeFileSync(this._path, this.toString(separator));\n }\n}\n\ninterface EnsureUniqueIdentifierData {\n $ref: string;\n case: StringCase | undefined;\n count?: number;\n create?: boolean;\n /**\n * Transforms name obtained from `$ref` before it's passed to `stringCase()`.\n */\n nameTransformer?: (name: string) => string;\n namespace: Namespace;\n}\n\nconst ensureUniqueIdentifier = ({\n $ref,\n case: identifierCase,\n count = 1,\n create = false,\n nameTransformer,\n namespace,\n}: EnsureUniqueIdentifierData): Identifier => {\n const parts = $ref.split('/');\n const name = parts[parts.length - 1] || '';\n\n if (!name) {\n return {\n created: false,\n name: '',\n };\n }\n\n const refValue = namespace[$ref];\n if (refValue) {\n return {\n created: false,\n name: refValue.name,\n };\n }\n\n const nameWithTransform = nameTransformer?.(name) ?? name;\n let nameWithCasing = stringCase({\n case: identifierCase,\n value: nameWithTransform,\n });\n\n if (count > 1) {\n nameWithCasing = `${nameWithCasing}${count}`;\n }\n\n let nameValue = namespace[nameWithCasing];\n if (nameValue) {\n if (nameValue.$ref === $ref) {\n return {\n created: false,\n name: nameValue.name,\n };\n }\n\n return ensureUniqueIdentifier({\n $ref,\n case: identifierCase,\n count: count + 1,\n create,\n nameTransformer,\n namespace,\n });\n }\n\n if (!create) {\n return {\n created: false,\n name: '',\n };\n }\n\n nameValue = {\n $ref,\n name: ensureValidIdentifier(nameWithCasing),\n };\n namespace[nameWithCasing] = nameValue;\n namespace[nameValue.$ref] = nameValue;\n\n return {\n created: true,\n name: nameValue.name,\n };\n};\n\nconst splitNameAndExtension = (fileName: string) => {\n const match = fileName.match(/\\.[0-9a-z]+$/i);\n const extension = match ? match[0].slice(1) : '';\n const name = fileName.slice(\n 0,\n fileName.length - (extension ? extension.length + 1 : 0),\n );\n return { extension, name };\n};\n","import path from 'node:path';\n\nimport { TypeScriptFile } from '../generate/files';\nimport type { Config, StringCase } from '../types/config';\nimport type { Files } from '../types/utils';\nimport { resolveRef } from '../utils/ref';\nimport type { IR } from './types';\n\ninterface ContextFile {\n /**\n * Should the exports from this file be re-exported in the index barrel file?\n */\n exportFromIndex?: boolean;\n /**\n * Unique file identifier.\n */\n id: string;\n /**\n * Define casing for identifiers in this file.\n */\n identifierCase?: StringCase;\n /**\n * Relative file path to the output path.\n * @example\n * 'bar/foo.ts'\n */\n path: string;\n}\n\ninterface Events {\n /**\n * Called after parsing.\n */\n after: () => void;\n /**\n * Called before parsing.\n */\n before: () => void;\n operation: (args: {\n method: keyof IR.PathItemObject;\n operation: IR.OperationObject;\n path: string;\n }) => void;\n parameter: (args: {\n $ref: string;\n name: string;\n parameter: IR.ParameterObject;\n }) => void;\n requestBody: (args: {\n $ref: string;\n name: string;\n requestBody: IR.RequestBodyObject;\n }) => void;\n schema: (args: {\n $ref: string;\n name: string;\n schema: IR.SchemaObject;\n }) => void;\n server: (args: { server: IR.ServerObject }) => void;\n}\n\ntype Listeners = {\n [T in keyof Events]?: Array<Events[T]>;\n};\n\nexport class IRContext<Spec extends Record<string, any> = any> {\n /**\n * Configuration for parsing and generating the output. This\n * is a mix of user-provided and default values.\n */\n public config: Config;\n /**\n * A map of files that will be generated from `spec`.\n */\n public files: Files;\n /**\n * Intermediate representation model obtained from `spec`.\n */\n public ir: IR.Model;\n /**\n * Resolved specification from `input`.\n */\n public spec: Spec;\n\n /**\n * A map of event listeners.\n */\n private listeners: Listeners;\n\n constructor({ config, spec }: { config: Config; spec: Spec }) {\n this.config = config;\n this.files = {};\n this.ir = {};\n this.listeners = {};\n this.spec = spec;\n }\n\n /**\n * Notify all event listeners about `event`.\n */\n public async broadcast<T extends keyof Events>(\n event: T,\n ...args: Parameters<Events[T]>\n ): Promise<void> {\n if (!this.listeners[event]) {\n return;\n }\n\n await Promise.all(\n this.listeners[event].map((callbackFn, index) => {\n try {\n // @ts-expect-error\n const response = callbackFn(...args);\n return Promise.resolve(response);\n } catch (error) {\n console.error(\n `🔥 Event broadcast: \"${event}\"\\nindex: ${index}\\narguments: ${JSON.stringify(args, null, 2)}`,\n );\n throw error;\n }\n }),\n );\n }\n\n /**\n * Create and return a new TypeScript file. Also set the current file context\n * to the newly created file.\n */\n public createFile(file: ContextFile): TypeScriptFile {\n // TODO: parser - handle attempt to create duplicate\n const outputParts = file.path.split('/');\n const outputDir = path.resolve(\n this.config.output.path,\n ...outputParts.slice(0, outputParts.length - 1),\n );\n const createdFile = new TypeScriptFile({\n dir: outputDir,\n exportFromIndex: file.exportFromIndex,\n identifierCase: file.identifierCase,\n name: `${outputParts[outputParts.length - 1]}.ts`,\n });\n this.files[file.id] = createdFile;\n return createdFile;\n }\n\n /**\n * Returns a specific file by ID from `files`.\n */\n public file({ id }: Pick<ContextFile, 'id'>): TypeScriptFile | undefined {\n return this.files[id];\n }\n\n // TODO: parser - works the same as resolveRef, but for IR schemas.\n // for now, they map 1:1, but if they diverge (like with OpenAPI 2.0),\n // we will want to rewrite $refs at parse time, so they continue pointing\n // to the correct IR location\n public resolveIrRef<T>($ref: string) {\n return resolveRef<T>({\n $ref,\n spec: this.ir,\n });\n }\n\n /**\n * Returns a resolved reference from `spec`.\n */\n public resolveRef<T>($ref: string) {\n return resolveRef<T>({\n $ref,\n spec: this.spec,\n });\n }\n\n /**\n * Register a new `event` listener.\n */\n public subscribe<T extends keyof Events>(\n event: T,\n callbackFn: Events[T],\n ): void {\n if (!this.listeners[event]) {\n this.listeners[event] = [];\n }\n this.listeners[event].push(callbackFn);\n }\n}\n","type Filter = RegExp | ReadonlyArray<string>;\ntype Filters = ReadonlyArray<Filter> | undefined;\n\nconst isFiltersMatch = ({\n $ref,\n filters,\n schema,\n}: {\n $ref: string;\n filters: NonNullable<Filters>;\n schema: Record<string, unknown>;\n}): boolean => {\n for (const filter of filters) {\n if (filter instanceof RegExp) {\n filter.lastIndex = 0;\n if (filter.test($ref)) {\n return true;\n }\n } else {\n const field = filter[0] || '';\n const value = filter[1];\n if (value === undefined) {\n if (schema[field]) {\n return true;\n }\n } else if (schema[field] === value) {\n return true;\n }\n }\n }\n\n return false;\n};\n\n/**\n * Exclude takes precedence over include.\n */\nexport const canProcessRef = ({\n excludeFilters,\n includeFilters,\n ...state\n}: {\n $ref: string;\n excludeFilters: Filters;\n includeFilters: Filters;\n schema: Record<string, unknown>;\n}): boolean => {\n if (!excludeFilters && !includeFilters) {\n return true;\n }\n\n if (excludeFilters) {\n if (isFiltersMatch({ ...state, filters: excludeFilters })) {\n return false;\n }\n }\n\n if (includeFilters) {\n return isFiltersMatch({ ...state, filters: includeFilters });\n }\n\n return true;\n};\n\nconst createFilter = (matcher: string): Filter => {\n if (matcher.startsWith('@')) {\n return matcher.slice(1).split(':');\n }\n\n return new RegExp(matcher);\n};\n\nexport const createFilters = (\n matchers: ReadonlyArray<string> | string | undefined,\n): Filters => {\n if (!matchers) {\n return;\n }\n\n if (typeof matchers === 'string') {\n return [createFilter(matchers)];\n }\n\n return matchers.map((matcher) => createFilter(matcher));\n};\n","import type { IR } from '../../../ir/types';\n\nexport const mergeParametersObjects = ({\n source,\n target,\n}: {\n source: IR.ParametersObject | undefined;\n target: IR.ParametersObject | undefined;\n}): IR.ParametersObject | undefined => {\n const result = { ...target };\n\n if (source) {\n if (source.cookie) {\n if (result.cookie) {\n result.cookie = {\n ...result.cookie,\n ...source.cookie,\n };\n } else {\n result.cookie = source.cookie;\n }\n }\n\n if (source.header) {\n if (result.header) {\n result.header = {\n ...result.header,\n ...source.header,\n };\n } else {\n result.header = source.header;\n }\n }\n\n if (source.path) {\n if (result.path) {\n result.path = {\n ...result.path,\n ...source.path,\n };\n } else {\n result.path = source.path;\n }\n }\n\n if (source.query) {\n if (result.query) {\n result.query = {\n ...result.query,\n ...source.query,\n };\n } else {\n result.query = source.query;\n }\n }\n }\n\n if (!Object.keys(result).length) {\n return;\n }\n\n return result;\n};\n","import { illegalStartCharactersRegExp } from '../../../utils/regexp';\n\nexport const ensureValidTypeScriptJavaScriptIdentifier = (name: string) => {\n const replaced = name.replace(/[^$\\u200c\\u200d\\p{ID_Continue}]/gu, '_');\n illegalStartCharactersRegExp.lastIndex = 0;\n const startsWithIllegalCharacter =\n illegalStartCharactersRegExp.test(replaced);\n const valid = startsWithIllegalCharacter ? `_${replaced}` : replaced;\n return valid;\n};\n\n/**\n * Sanitizes namespace identifiers so they are valid TypeScript identifiers of a certain form.\n *\n * 1: Remove any leading characters that are illegal as starting character of a typescript identifier.\n * 2: Replace illegal characters in remaining part of type name with hyphen (-).\n *\n * Step 1 should perhaps instead also replace illegal characters with underscore, or prefix with it, like sanitizeEnumName\n * does. The way this is now one could perhaps end up removing all characters, if all are illegal start characters. It\n * would be sort of a breaking change to do so, though, previously generated code might change then.\n *\n * JavaScript identifier regexp pattern retrieved from https://developer.mozilla.org/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers\n *\n * The output of this is expected to be converted to PascalCase\n */\nexport const sanitizeNamespaceIdentifier = (name: string) =>\n name\n .replace(/^[^\\p{ID_Start}]+/u, '')\n .replace(/[^$\\u200c\\u200d\\p{ID_Continue}]/gu, '-')\n .replace(/[$+]/g, '-');\n\nexport const sanitizeOperationParameterName = (name: string) => {\n const withoutBrackets = name.replace('[]', 'Array');\n return sanitizeNamespaceIdentifier(withoutBrackets);\n};\n","import type { IR } from '../../../ir/types';\nimport { stringCase } from '../../../utils/stringCase';\nimport { sanitizeNamespaceIdentifier } from '../../common/parser/sanitize';\n\n/**\n * Verifies that operation ID is unique. For now, we only warn when this isn't\n * true as people like to not follow this part of the specification. In the\n * future, we should add a strict check and throw on duplicate identifiers.\n */\nexport const ensureUniqueOperationId = ({\n context,\n id,\n method,\n operationIds,\n path,\n}: {\n context: IR.Context;\n id: string | undefined;\n method: IR.OperationObject['method'];\n operationIds: Map<string, string>;\n path: keyof IR.PathsObject;\n}) => {\n if (!id) {\n return;\n }\n\n const operationKey = `${method.toUpperCase()} ${path}`;\n\n if (operationIds.has(id)) {\n if (context.config.logs.level !== 'silent') {\n // TODO: parser - support throw on duplicate\n console.warn(\n `❗️ Duplicate operationId: ${id} in ${operationKey}. Please ensure your operation IDs are unique. This behavior is not supported and will likely lead to unexpected results.`,\n );\n }\n } else {\n operationIds.set(id, operationKey);\n }\n};\n\n/**\n * Returns an operation ID to use across the application. By default, we try\n * to use the provided ID. If it's not provided or the SDK is configured\n * to exclude it, we generate operation ID from its location.\n */\nexport const operationToId = ({\n context,\n id,\n method,\n path,\n}: {\n context: IR.Context;\n id: string | undefined;\n method: string;\n path: string;\n}): string => {\n if (\n id &&\n (!context.config.plugins['@hey-api/sdk'] ||\n context.config.plugins['@hey-api/sdk'].operationId)\n ) {\n return stringCase({\n case: 'camelCase',\n value: sanitizeNamespaceIdentifier(id),\n });\n }\n\n const urlWithoutPlaceholders = path\n .replace(/{(.*?)}/g, 'by-$1')\n // replace slashes with hyphens for camelcase method at the end\n .replace(/[/:+]/g, '-');\n\n return stringCase({\n case: 'camelCase',\n value: `${method}-${urlWithoutPlaceholders}`,\n });\n};\n","const fileLikeRegExp =\n /^(application\\/(pdf|rtf|msword|vnd\\.(ms-|openxmlformats-officedocument\\.)|zip|x-(7z|tar|rar|zip|iso)|octet-stream|gzip|x-msdownload|json\\+download|xml|x-yaml|x-7z-compressed|x-tar)|text\\/(yaml|css|javascript)|audio\\/(mpeg|wav)|video\\/(mp4|x-matroska)|image\\/(vnd\\.adobe\\.photoshop|svg\\+xml))(; ?charset=[^;]+)?$/i;\nconst jsonMimeRegExp = /^application\\/(.*\\+)?json(;.*)?$/i;\nconst multipartFormDataMimeRegExp = /^multipart\\/form-data(;.*)?$/i;\nconst textMimeRegExp = /^text\\/[a-z0-9.+-]+(;.*)?$/i;\nconst xWwwFormUrlEncodedMimeRegExp =\n /^application\\/x-www-form-urlencoded(;.*)?$/i;\n\nexport type IRMediaType = 'form-data' | 'json' | 'text' | 'url-search-params';\n\nexport const isMediaTypeFileLike = ({\n mediaType,\n}: {\n mediaType: string;\n}): boolean => {\n fileLikeRegExp.lastIndex = 0;\n return fileLikeRegExp.test(mediaType);\n};\n\nexport const mediaTypeToIrMediaType = ({\n mediaType,\n}: {\n mediaType: string;\n}): IRMediaType | undefined => {\n jsonMimeRegExp.lastIndex = 0;\n if (jsonMimeRegExp.test(mediaType)) {\n return 'json';\n }\n\n multipartFormDataMimeRegExp.lastIndex = 0;\n if (multipartFormDataMimeRegExp.test(mediaType)) {\n return 'form-data';\n }\n\n textMimeRegExp.lastIndex = 0;\n if (textMimeRegExp.test(mediaType)) {\n return 'text';\n }\n\n xWwwFormUrlEncodedMimeRegExp.lastIndex = 0;\n if (xWwwFormUrlEncodedMimeRegExp.test(mediaType)) {\n return 'url-search-params';\n }\n};\n","import type { IRMediaType } from '../../../ir/mediaType';\nimport {\n isMediaTypeFileLike,\n mediaTypeToIrMediaType,\n} from '../../../ir/mediaType';\nimport type {\n ReferenceObject,\n ResponseObject,\n SchemaObject,\n} from '../types/spec';\n\ninterface Content {\n mediaType: string;\n schema: SchemaObject | ReferenceObject | undefined;\n type: IRMediaType | undefined;\n}\n\nexport const contentToSchema = ({\n content,\n}: {\n content: Content;\n}): SchemaObject | undefined => {\n const { mediaType, schema } = content;\n\n if (schema && '$ref' in schema) {\n return {\n allOf: [{ ...schema }],\n };\n }\n\n if (!schema) {\n if (isMediaTypeFileLike({ mediaType })) {\n return {\n format: 'binary',\n type: 'string',\n };\n }\n return;\n }\n\n if (\n schema.type === 'string' &&\n !schema.format &&\n isMediaTypeFileLike({ mediaType })\n ) {\n return {\n ...schema,\n format: 'binary',\n };\n }\n\n return schema;\n};\n\nexport const mediaTypeObject = ({\n mimeTypes,\n response,\n}: {\n mimeTypes: ReadonlyArray<string> | undefined;\n response: Pick<ResponseObject, 'schema'>;\n}): Content | undefined => {\n // return the first supported MIME type\n for (const mediaType of mimeTypes ?? []) {\n return {\n mediaType,\n schema: response.schema,\n type: mediaTypeToIrMediaType({ mediaType }),\n };\n }\n};\n","import type { Config } from '../types/config';\nimport type { IR } from './types';\n\nexport const DEFAULT_PAGINATION_KEYWORDS = [\n 'after',\n 'before',\n 'cursor',\n 'offset',\n 'page',\n 'start',\n] as const;\n\nexport function getPaginationKeywordsRegExp({\n keywords = DEFAULT_PAGINATION_KEYWORDS,\n}: Config['input']['pagination'] = {}): RegExp {\n if (keywords.length === 0) {\n keywords = DEFAULT_PAGINATION_KEYWORDS;\n }\n const pattern = `^(${keywords.join('|')})$`;\n return new RegExp(pattern);\n}\n\nexport interface Pagination {\n in: string;\n name: string;\n schema: IR.SchemaObject;\n}\n","import type { IR } from './types';\n\n/**\n * Simply adds `items` to the schema. Also handles setting the logical operator\n * and avoids setting it for a single item or tuples.\n */\nexport const addItemsToSchema = ({\n items,\n logicalOperator = 'or',\n mutateSchemaOneItem = false,\n schema,\n}: {\n items: Array<IR.SchemaObject>;\n logicalOperator?: IR.SchemaObject['logicalOperator'];\n mutateSchemaOneItem?: boolean;\n schema: IR.SchemaObject;\n}) => {\n if (!items.length) {\n return schema;\n }\n\n if (schema.type === 'tuple') {\n schema.items = items;\n return schema;\n }\n\n if (items.length !== 1) {\n schema.items = items;\n schema.logicalOperator = logicalOperator;\n return schema;\n }\n\n if (mutateSchemaOneItem) {\n // bring composition up to avoid extraneous brackets\n schema = {\n ...schema,\n ...items[0],\n };\n return schema;\n }\n\n schema.items = items;\n return schema;\n};\n","import { refToName } from '../../../utils/ref';\n\nexport const discriminatorValue = (\n $ref: string,\n mapping?: Record<string, string>,\n) => {\n for (const name in mapping) {\n const refMapped = mapping[name];\n if (refMapped === $ref) {\n return name;\n }\n }\n return refToName($ref);\n};\n","/**\n * Accepts `accessScopes` from two schemas and returns a merged and\n * deduplicated value.\n */\nexport const mergeSchemaAccessScopes = (\n a: ReadonlyArray<'read' | 'write'> | undefined,\n b: ReadonlyArray<'read' | 'write'> | undefined,\n): ReadonlyArray<'read' | 'write'> | undefined => {\n if (!a?.length) {\n return b?.length ? b : undefined;\n }\n\n if (!b?.length) {\n return a;\n }\n\n const mergedScopes = new Set(a);\n\n for (const scope of b) {\n mergedScopes.add(scope);\n }\n\n return mergedScopes.size > a.length ? Array.from(mergedScopes) : a;\n};\n","import type { IR } from '../../../ir/types';\nimport { addItemsToSchema } from '../../../ir/utils';\nimport { refToName } from '../../../utils/ref';\nimport type {\n SchemaState,\n SchemaType,\n SchemaWithRequired,\n} from '../../shared/types/schema';\nimport { discriminatorValue } from '../../shared/utils/discriminator';\nimport { mergeSchemaAccessScopes } from '../../shared/utils/schema';\nimport type { SchemaObject } from '../types/spec';\n\nexport const getSchemaType = ({\n schema,\n}: {\n schema: SchemaObject;\n}): SchemaType<SchemaObject> | undefined => {\n if (schema.type) {\n return schema.type;\n }\n\n // infer object based on the presence of properties\n if (schema.properties) {\n return 'object';\n }\n};\n\nconst parseSchemaJsDoc = ({\n irSchema,\n schema,\n}: {\n irSchema: IR.SchemaObject;\n schema: SchemaObject;\n}) => {\n if (schema.description) {\n irSchema.description = schema.description;\n }\n\n if (schema.title) {\n irSchema.title = schema.title;\n }\n};\n\nconst parseSchemaMeta = ({\n irSchema,\n schema,\n}: {\n irSchema: IR.SchemaObject;\n schema: SchemaObject;\n}) => {\n if (schema.default !== undefined) {\n irSchema.default = schema.default;\n }\n\n if (schema.exclusiveMaximum) {\n if (schema.maximum !== undefined) {\n irSchema.exclusiveMaximum = schema.maximum;\n }\n } else if (schema.maximum !== undefined) {\n irSchema.maximum = schema.maximum;\n }\n\n if (schema.exclusiveMinimum) {\n if (schema.minimum !== undefined) {\n irSchema.exclusiveMinimum = schema.minimum;\n }\n } else if (schema.minimum !== undefined) {\n irSchema.minimum = schema.minimum;\n }\n\n if (schema.format) {\n irSchema.format = schema.format;\n }\n\n if (schema.maxItems !== undefined) {\n irSchema.maxItems = schema.maxItems;\n }\n\n if (schema.maxLength !== undefined) {\n irSchema.maxLength = schema.maxLength;\n }\n\n if (schema.minItems !== undefined) {\n irSchema.minItems = schema.minItems;\n }\n\n if (schema.minLength !== undefined) {\n irSchema.minLength = schema.minLength;\n }\n\n if (schema.pattern) {\n irSchema.pattern = schema.pattern;\n }\n\n if (schema.readOnly) {\n irSchema.accessScope = 'read';\n irSchema.accessScopes = mergeSchemaAccessScopes(irSchema.accessScopes, [\n 'read',\n ]);\n }\n};\n\nconst parseArray = ({\n context,\n irSchema = {},\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (schema.maxItems && schema.maxItems === schema.minItems) {\n irSchema.type = 'tuple';\n } else {\n irSchema.type = 'array';\n }\n\n let schemaItems: Array<IR.SchemaObject> = [];\n\n if (schema.items) {\n const irItemsSchema = schemaToIrSchema({\n context,\n schema: schema.items,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irItemsSchema.accessScopes,\n );\n\n if (\n !schemaItems.length &&\n schema.maxItems &&\n schema.maxItems === schema.minItems\n ) {\n schemaItems = Array(schema.maxItems).fill(irItemsSchema);\n } else {\n if ('$ref' in schema.items) {\n schemaItems.push(irItemsSchema);\n } else {\n const ofArray = schema.items.allOf;\n if (ofArray && ofArray.length > 1 && !schema.items['x-nullable']) {\n // bring composition up to avoid incorrectly nested arrays\n irSchema = {\n ...irSchema,\n ...irItemsSchema,\n };\n } else {\n schemaItems.push(irItemsSchema);\n }\n }\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseBoolean = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'boolean';\n\n return irSchema;\n};\n\nconst parseNumber = ({\n irSchema = {},\n schema,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = schema.type;\n\n return irSchema;\n};\n\nconst parseObject = ({\n context,\n irSchema = {},\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'object';\n\n const schemaProperties: Record<string, IR.SchemaObject> = {};\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n if (typeof property === 'boolean') {\n // TODO: parser - handle boolean properties\n } else {\n const irPropertySchema = schemaToIrSchema({\n context,\n schema: property,\n state,\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irPropertySchema.accessScopes,\n );\n schemaProperties[name] = irPropertySchema;\n }\n }\n\n if (Object.keys(schemaProperties).length) {\n irSchema.properties = schemaProperties;\n }\n\n if (schema.additionalProperties === undefined) {\n if (!irSchema.properties) {\n irSchema.additionalProperties = {\n type: 'unknown',\n };\n }\n } else if (typeof schema.additionalProperties === 'boolean') {\n irSchema.additionalProperties = {\n type: schema.additionalProperties ? 'unknown' : 'never',\n };\n } else {\n const irAdditionalPropertiesSchema = schemaToIrSchema({\n context,\n schema: schema.additionalProperties,\n state,\n });\n // no need to add \"any\" additional properties if there are no defined properties\n if (\n irSchema.properties ||\n irAdditionalPropertiesSchema.type !== 'unknown'\n ) {\n irSchema.additionalProperties = irAdditionalPropertiesSchema;\n }\n }\n\n if (schema.required) {\n irSchema.required = schema.required;\n }\n\n return irSchema;\n};\n\nconst parseString = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'string';\n\n return irSchema;\n};\n\nconst initIrSchema = ({\n schema,\n}: {\n schema: SchemaObject;\n}): IR.SchemaObject => {\n const irSchema: IR.SchemaObject = {};\n\n parseSchemaJsDoc({\n irSchema,\n schema,\n });\n\n return irSchema;\n};\n\nconst parseAllOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'allOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n const schemaItems: Array<IR.SchemaObject> = [];\n const schemaType = getSchemaType({ schema });\n\n const compositionSchemas = schema.allOf;\n\n for (const compositionSchema of compositionSchemas) {\n const irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n if (schema.required) {\n if (irCompositionSchema.required) {\n irCompositionSchema.required = [\n ...irCompositionSchema.required,\n ...schema.required,\n ];\n } else {\n irCompositionSchema.required = schema.required;\n }\n }\n\n schemaItems.push(irCompositionSchema);\n\n if (compositionSchema.$ref) {\n const ref = context.resolveRef<SchemaObject>(compositionSchema.$ref);\n // `$ref` should be passed from the root `parseSchema()` call\n if (ref.discriminator && state.$ref) {\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [ref.discriminator]: {\n const: discriminatorValue(state.$ref),\n type: 'string',\n },\n },\n type: 'object',\n };\n if (ref.required?.includes(ref.discriminator)) {\n irDiscriminatorSchema.required = [ref.discriminator];\n }\n schemaItems.push(irDiscriminatorSchema);\n }\n\n if (!state.circularReferenceTracker.has(compositionSchema.$ref)) {\n const irRefSchema = schemaToIrSchema({\n context,\n schema: ref,\n state: {\n ...state,\n $ref: compositionSchema.$ref,\n },\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irRefSchema.accessScopes,\n );\n }\n }\n }\n\n if (schemaType === 'object') {\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irObjectSchema.accessScopes,\n );\n\n if (irObjectSchema.properties) {\n for (const requiredProperty of irObjectSchema.required ?? []) {\n if (!irObjectSchema.properties[requiredProperty]) {\n for (const compositionSchema of compositionSchemas) {\n // TODO: parser - this could be probably resolved more accurately\n const finalCompositionSchema = compositionSchema.$ref\n ? context.resolveRef<SchemaObject>(compositionSchema.$ref)\n : compositionSchema;\n\n if (\n getSchemaType({ schema: finalCompositionSchema }) === 'object'\n ) {\n const irCompositionSchema = parseOneType({\n context,\n schema: {\n ...finalCompositionSchema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n if (irCompositionSchema.properties?.[requiredProperty]) {\n irObjectSchema.properties[requiredProperty] =\n irCompositionSchema.properties[requiredProperty];\n break;\n }\n }\n }\n }\n }\n schemaItems.push(irObjectSchema);\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n logicalOperator: 'and',\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schema['x-nullable']) {\n // nest composition to avoid producing an intersection with null\n const nestedItems: Array<IR.SchemaObject> = [\n {\n type: 'null',\n },\n ];\n\n if (schemaItems.length) {\n nestedItems.unshift(irSchema);\n }\n\n irSchema = {\n items: nestedItems,\n logicalOperator: 'or',\n };\n\n // TODO: parser - this is a hack to bring back up meta fields\n // without it, some schemas were missing original deprecated\n if (nestedItems[0]!.deprecated) {\n irSchema.deprecated = nestedItems[0]!.deprecated;\n }\n\n // TODO: parser - this is a hack to bring back up meta fields\n // without it, some schemas were missing original description\n if (nestedItems[0]!.description) {\n irSchema.description = nestedItems[0]!.description;\n }\n }\n\n return irSchema;\n};\n\nconst parseEnum = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'enum'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n irSchema.type = 'enum';\n\n const schemaItems: Array<IR.SchemaObject> = [];\n\n for (const [index, enumValue] of schema.enum.entries()) {\n const typeOfEnumValue = typeof enumValue;\n let enumType: SchemaType<SchemaObject> | 'null' | undefined;\n\n if (\n typeOfEnumValue === 'string' ||\n typeOfEnumValue === 'number' ||\n typeOfEnumValue === 'boolean'\n ) {\n enumType = typeOfEnumValue;\n } else if (enumValue === null) {\n // nullable must be true\n if (schema['x-nullable']) {\n enumType = 'null';\n }\n } else {\n console.warn(\n '🚨',\n `unhandled \"${typeOfEnumValue}\" typeof value \"${enumValue}\" for enum`,\n schema.enum,\n );\n }\n\n if (!enumType) {\n continue;\n }\n\n const irTypeSchema = parseOneType({\n context,\n schema: {\n description: schema['x-enum-descriptions']?.[index],\n title:\n schema['x-enum-varnames']?.[index] ?? schema['x-enumNames']?.[index],\n // cast enum to string temporarily\n type: enumType === 'null' ? 'string' : enumType,\n },\n state,\n });\n\n irTypeSchema.const = enumValue;\n\n // cast enum back\n if (enumType === 'null') {\n irTypeSchema.type = enumType;\n }\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irTypeSchema.accessScopes,\n );\n\n schemaItems.push(irTypeSchema);\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseRef = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, '$ref'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n const irSchema: IR.SchemaObject = {};\n\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n irSchema.$ref = decodeURI(schema.$ref);\n\n // rewrite definitions refs as the internal schema follows OpenAPI 3.x syntax\n // and stores all definitions as reusable schemas\n irSchema.$ref = irSchema.$ref.replace(\n /#\\/definitions\\/([^/]+)/g,\n '#/components/schemas/$1',\n );\n\n if (!state.circularReferenceTracker.has(schema.$ref)) {\n const refSchema = context.resolveRef<SchemaObject>(schema.$ref);\n const irRefSchema = schemaToIrSchema({\n context,\n schema: refSchema,\n state: {\n ...state,\n $ref: schema.$ref,\n },\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irRefSchema.accessScopes,\n );\n }\n\n return irSchema;\n};\n\nconst parseNullableType = ({\n context,\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n }\n\n const typeIrSchema: IR.SchemaObject = {};\n\n parseSchemaMeta({\n irSchema: typeIrSchema,\n schema,\n });\n\n if (typeIrSchema.default === null) {\n // clear to avoid duplicate default inside the non-null schema.\n // this would produce incorrect validator output\n delete typeIrSchema.default;\n }\n\n const schemaItems: Array<IR.SchemaObject> = [\n parseOneType({\n context,\n irSchema: typeIrSchema,\n schema,\n state,\n }),\n {\n type: 'null',\n },\n ];\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseType = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n const irSchema = initIrSchema({ schema });\n\n parseSchemaMeta({\n irSchema,\n schema,\n });\n\n const type = getSchemaType({ schema });\n\n if (!type) {\n return irSchema;\n }\n\n if (schema['x-nullable']) {\n return parseNullableType({\n context,\n irSchema,\n schema: {\n ...schema,\n type,\n },\n state,\n });\n }\n\n return parseOneType({\n context,\n irSchema,\n schema: {\n ...schema,\n type,\n },\n state,\n });\n};\n\nconst parseOneType = ({\n context,\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n\n parseSchemaMeta({\n irSchema,\n schema,\n });\n }\n\n switch (schema.type) {\n case 'array':\n return parseArray({\n context,\n irSchema,\n schema,\n state,\n });\n case 'boolean':\n return parseBoolean({\n context,\n irSchema,\n schema,\n state,\n });\n case 'integer':\n case 'number':\n return parseNumber({\n context,\n irSchema,\n schema,\n state,\n });\n case 'object':\n return parseObject({\n context,\n irSchema,\n schema,\n state,\n });\n case 'string':\n return parseString({\n context,\n irSchema,\n schema,\n state,\n });\n default:\n // gracefully handle invalid type\n return parseUnknown({\n context,\n irSchema,\n schema,\n state,\n });\n }\n};\n\nconst parseUnknown = ({\n irSchema,\n schema,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n }\n\n irSchema.type = 'unknown';\n\n parseSchemaMeta({\n irSchema,\n schema,\n });\n\n return irSchema;\n};\n\nexport const schemaToIrSchema = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaObject;\n state: SchemaState | undefined;\n}): IR.SchemaObject => {\n if (!state) {\n state = {\n circularReferenceTracker: new Set(),\n };\n }\n\n if (state.$ref) {\n state.circularReferenceTracker.add(state.$ref);\n }\n\n if (schema.$ref) {\n return parseRef({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, '$ref'>,\n state,\n });\n }\n\n if (schema.enum) {\n return parseEnum({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'enum'>,\n state,\n });\n }\n\n if (schema.allOf) {\n return parseAllOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'allOf'>,\n state,\n });\n }\n\n // infer object based on the presence of properties\n if (schema.type || schema.properties) {\n return parseType({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'type'>,\n state,\n });\n }\n\n return parseUnknown({\n context,\n schema,\n state,\n });\n};\n\nexport const parseSchema = ({\n $ref,\n context,\n schema,\n}: {\n $ref: string;\n context: IR.Context;\n schema: SchemaObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.schemas) {\n context.ir.components.schemas = {};\n }\n\n context.ir.components.schemas[refToName($ref)] = schemaToIrSchema({\n context,\n schema,\n state: {\n $ref,\n circularReferenceTracker: new Set(),\n },\n });\n};\n","import { getPaginationKeywordsRegExp } from '../../../ir/pagination';\nimport type { IR } from '../../../ir/types';\nimport type { SchemaType } from '../../shared/types/schema';\nimport type { ParameterObject, ReferenceObject } from '../types/spec';\nimport type { SchemaObject } from '../types/spec';\nimport { getSchemaType } from './schema';\n\nconst isPaginationType = (\n schemaType: SchemaType<SchemaObject> | undefined,\n): boolean =>\n schemaType === 'boolean' ||\n schemaType === 'integer' ||\n schemaType === 'number' ||\n schemaType === 'string';\n\n// We handle only simple values for now, up to 1 nested field\nexport const paginationField = ({\n context,\n name,\n schema,\n}: {\n context: IR.Context;\n name: string;\n schema:\n | ParameterObject\n | SchemaObject\n | ReferenceObject\n | {\n in: undefined;\n };\n}): boolean | string => {\n const paginationRegExp = getPaginationKeywordsRegExp(\n context.config.input.pagination,\n );\n if (paginationRegExp.test(name)) {\n return true;\n }\n\n if ('$ref' in schema) {\n const ref = context.resolveRef<ParameterObject | SchemaObject>(\n schema.$ref ?? '',\n );\n\n if ('in' in ref && ref.in) {\n const refSchema =\n 'schema' in ref\n ? ref.schema\n : {\n ...ref,\n in: undefined,\n };\n\n return paginationField({\n context,\n name,\n schema: refSchema,\n });\n }\n\n return paginationField({\n context,\n name,\n schema: ref,\n });\n }\n\n if ('in' in schema) {\n if (!schema.in) {\n return false;\n }\n\n const finalSchema =\n 'schema' in schema\n ? schema.schema\n : {\n ...schema,\n in: undefined,\n };\n\n return paginationField({\n context,\n name,\n schema: finalSchema,\n });\n }\n\n for (const name in schema.properties) {\n const paginationRegExp = getPaginationKeywordsRegExp(\n context.config.input.pagination,\n );\n\n if (paginationRegExp.test(name)) {\n const property = schema.properties[name]!;\n\n if (typeof property !== 'boolean' && !('$ref' in property)) {\n const schemaType = getSchemaType({ schema: property });\n // TODO: resolve deeper references\n\n if (isPaginationType(schemaType)) {\n return name;\n }\n }\n }\n }\n\n for (const allOf of schema.allOf ?? []) {\n const pagination = paginationField({\n context,\n name,\n schema: allOf,\n });\n if (pagination) {\n return pagination;\n }\n }\n\n return false;\n};\n","import type { IR, IRBodyObject } from '../../../ir/types';\nimport {\n ensureUniqueOperationId,\n operationToId,\n} from '../../shared/utils/operation';\nimport type {\n OperationObject,\n ParameterObject,\n PathItemObject,\n ResponseObject,\n SchemaObject,\n SecuritySchemeObject,\n} from '../types/spec';\nimport { contentToSchema, mediaTypeObject } from './mediaType';\nimport { paginationField } from './pagination';\nimport { schemaToIrSchema } from './schema';\n\ninterface Operation\n extends Omit<OperationObject, 'parameters'>,\n Pick<IR.OperationObject, 'id' | 'parameters'> {\n requestBody?: OperationObject['parameters'];\n}\n\nconst parseOperationJsDoc = ({\n irOperation,\n operation,\n}: {\n irOperation: IR.OperationObject;\n operation: Operation;\n}) => {\n if (operation.deprecated !== undefined) {\n irOperation.deprecated = operation.deprecated;\n }\n\n if (operation.description) {\n irOperation.description = operation.description;\n }\n\n if (operation.summary) {\n irOperation.summary = operation.summary;\n }\n\n if (operation.tags?.length) {\n irOperation.tags = operation.tags;\n }\n};\n\nconst initIrOperation = ({\n method,\n operation,\n path,\n}: Pick<IR.OperationObject, 'method' | 'path'> & {\n operation: Operation;\n}): IR.OperationObject => {\n const irOperation: IR.OperationObject = {\n id: operation.id,\n method,\n path,\n };\n\n parseOperationJsDoc({\n irOperation,\n operation,\n });\n\n return irOperation;\n};\n\nconst operationToIrOperation = ({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n}: Pick<IR.OperationObject, 'method' | 'path'> & {\n context: IR.Context;\n operation: Operation;\n securitySchemesMap: Map<string, SecuritySchemeObject>;\n}): IR.OperationObject => {\n const irOperation = initIrOperation({ method, operation, path });\n\n if (operation.parameters) {\n irOperation.parameters = operation.parameters;\n }\n\n let isRequestBodyRequired = false;\n const requestBodyObject: IRBodyObject = {\n mediaType: '',\n schema: {\n properties: {},\n required: [],\n type: 'object',\n },\n };\n const requestBodyObjectRequired: Array<string> = [];\n\n for (const requestBodyParameter of operation.requestBody ?? []) {\n const requestBody =\n '$ref' in requestBodyParameter\n ? context.resolveRef<ParameterObject>(requestBodyParameter.$ref)\n : requestBodyParameter;\n const schema: SchemaObject =\n requestBody.in === 'body'\n ? requestBody.schema\n : {\n ...requestBody,\n format: requestBody.type === 'file' ? 'binary' : requestBody.format,\n required: undefined,\n type: requestBody.type === 'file' ? 'string' : requestBody.type,\n };\n const content = mediaTypeObject({\n mimeTypes: operation.consumes,\n response: { schema },\n });\n\n if (content) {\n const pagination = paginationField({\n context,\n name: '',\n schema:\n content.schema && '$ref' in content.schema\n ? {\n allOf: [{ ...content.schema }],\n description: requestBody.description,\n }\n : {\n description: requestBody.description,\n ...content.schema,\n },\n });\n\n const irSchema = schemaToIrSchema({\n context,\n schema:\n '$ref' in requestBody\n ? {\n allOf: [\n {\n ...requestBody,\n $ref: requestBody.$ref as string,\n required: [],\n type: 'string',\n },\n ],\n description: requestBody.description,\n }\n : content.schema && '$ref' in content.schema\n ? {\n allOf: [{ ...content.schema }],\n description: requestBody.description,\n }\n : {\n description: requestBody.description,\n ...content.schema,\n },\n state: undefined,\n });\n\n requestBodyObject.mediaType = content.mediaType;\n\n if (requestBody.in === 'body') {\n requestBodyObject.schema = irSchema;\n } else {\n requestBodyObject.schema.properties![requestBody.name] = irSchema;\n\n if (requestBody.required) {\n requestBodyObjectRequired.push(requestBody.name);\n }\n }\n\n if (pagination) {\n requestBodyObject.pagination = pagination;\n }\n\n if (content.type) {\n requestBodyObject.type = content.type;\n }\n }\n\n if (requestBody.required) {\n isRequestBodyRequired = true;\n }\n }\n\n if (requestBodyObject.mediaType) {\n if (requestBodyObjectRequired.length) {\n requestBodyObject.schema.required = requestBodyObjectRequired;\n }\n\n irOperation.body = requestBodyObject;\n\n if (isRequestBodyRequired) {\n irOperation.body.required = isRequestBodyRequired;\n }\n }\n\n for (const name in operation.responses) {\n if (!irOperation.responses) {\n irOperation.responses = {};\n }\n\n const response = operation.responses[name]!;\n const responseObject =\n '$ref' in response\n ? context.resolveRef<ResponseObject>(response.$ref)\n : response;\n const content = mediaTypeObject({\n // assume JSON by default\n mimeTypes: operation.produces ? operation.produces : ['application/json'],\n response: responseObject,\n });\n\n if (content) {\n irOperation.responses[name] = {\n mediaType: content.mediaType,\n schema: schemaToIrSchema({\n context,\n schema: {\n description: responseObject.description,\n ...contentToSchema({ content }),\n },\n state: undefined,\n }),\n };\n } else {\n irOperation.responses[name] = {\n schema: {\n description: responseObject.description,\n // TODO: parser - cover all statues with empty response bodies\n // 1xx, 204, 205, 304\n type: name === '204' ? 'void' : 'unknown',\n },\n };\n }\n }\n\n if (operation.security) {\n const securitySchemeObjects: Array<IR.SecurityObject> = [];\n\n for (const securityRequirementObject of operation.security) {\n for (const name in securityRequirementObject) {\n const securitySchemeObject = securitySchemesMap.get(name);\n\n if (!securitySchemeObject) {\n continue;\n }\n\n let irSecuritySchemeObject: IR.SecurityObject | undefined;\n\n if (securitySchemeObject.type === 'apiKey') {\n irSecuritySchemeObject = securitySchemeObject;\n }\n\n if (securitySchemeObject.type === 'basic') {\n irSecuritySchemeObject = {\n description: securitySchemeObject.description,\n scheme: 'basic',\n type: 'http',\n };\n }\n\n if (securitySchemeObject.type === 'oauth2') {\n irSecuritySchemeObject = {\n description: securitySchemeObject.description,\n flows: {},\n type: 'oauth2',\n };\n\n switch (securitySchemeObject.flow) {\n case 'accessCode':\n irSecuritySchemeObject.flows.authorizationCode = {\n authorizationUrl: securitySchemeObject.authorizationUrl!,\n scopes: securitySchemeObject.scopes,\n tokenUrl: securitySchemeObject.tokenUrl!,\n };\n break;\n case 'application':\n irSecuritySchemeObject.flows.clientCredentials = {\n scopes: securitySchemeObject.scopes,\n tokenUrl: securitySchemeObject.tokenUrl!,\n };\n break;\n case 'implicit':\n irSecuritySchemeObject.flows.implicit = {\n authorizationUrl: securitySchemeObject.authorizationUrl!,\n scopes: securitySchemeObject.scopes,\n };\n break;\n case 'password':\n irSecuritySchemeObject.flows.password = {\n scopes: securitySchemeObject.scopes,\n tokenUrl: securitySchemeObject.tokenUrl!,\n };\n break;\n }\n }\n\n if (!irSecuritySchemeObject) {\n continue;\n }\n\n securitySchemeObjects.push(irSecuritySchemeObject);\n }\n }\n\n if (securitySchemeObjects.length) {\n irOperation.security = securitySchemeObjects;\n }\n }\n\n // TODO: parser - handle servers\n // qux: operation.servers\n\n return irOperation;\n};\n\nexport const parseOperation = ({\n context,\n method,\n operation,\n operationIds,\n path,\n securitySchemesMap,\n}: {\n context: IR.Context;\n method: Extract<\n keyof PathItemObject,\n 'delete' | 'get' | 'head' | 'options' | 'patch' | 'post' | 'put' | 'trace'\n >;\n operation: Operation;\n operationIds: Map<string, string>;\n path: keyof IR.PathsObject;\n securitySchemesMap: Map<string, SecuritySchemeObject>;\n}) => {\n ensureUniqueOperationId({\n context,\n id: operation.operationId,\n method,\n operationIds,\n path,\n });\n\n if (!context.ir.paths) {\n context.ir.paths = {};\n }\n\n if (!context.ir.paths[path]) {\n context.ir.paths[path] = {};\n }\n\n operation.id = operationToId({\n context,\n id: operation.operationId,\n method,\n path,\n });\n\n context.ir.paths[path][method] = operationToIrOperation({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport type {\n OperationObject,\n ParameterObject,\n ReferenceObject,\n SchemaObject,\n} from '../types/spec';\nimport { paginationField } from './pagination';\nimport { schemaToIrSchema } from './schema';\n\ntype Parameter = Exclude<ParameterObject, { in: 'body' }>;\n\n/**\n * Returns default parameter `explode` based on value of `collectionFormat`.\n */\nconst defaultExplode = (\n collectionFormat: Parameter['collectionFormat'],\n): boolean => {\n switch (collectionFormat) {\n case 'multi':\n return true;\n case 'csv':\n case 'pipes':\n case 'ssv':\n case 'tsv':\n default:\n return false;\n }\n};\n\n/**\n * Returns default parameter `style` based on value of `in`.\n */\nconst defaultStyle = (\n _in: Parameter['in'],\n): Required<IR.ParameterObject>['style'] => {\n switch (_in) {\n case 'header':\n case 'path':\n return 'simple';\n case 'query':\n default:\n return 'form';\n }\n};\n\nexport const parametersArrayToObject = ({\n context,\n operation,\n parameters,\n}: {\n context: IR.Context;\n operation: OperationObject;\n parameters?: ReadonlyArray<ParameterObject | ReferenceObject>;\n}): IR.ParametersObject | undefined => {\n if (!parameters || !Object.keys(parameters).length) {\n return;\n }\n\n const parametersObject: IR.ParametersObject = {};\n\n for (const parameterOrReference of parameters) {\n const parameter =\n '$ref' in parameterOrReference\n ? context.resolveRef<ParameterObject>(parameterOrReference.$ref)\n : parameterOrReference;\n\n // push request body parameters into a separate field\n if (parameter.in === 'body' || parameter.in === 'formData') {\n // @ts-expect-error\n if (!operation.requestBody) {\n // @ts-expect-error\n operation.requestBody = [];\n }\n\n // @ts-expect-error\n operation.requestBody.push(parameter);\n continue;\n }\n\n if (!parametersObject[parameter.in]) {\n parametersObject[parameter.in] = {};\n }\n\n parametersObject[parameter.in]![parameter.name] = parameterToIrParameter({\n context,\n parameter,\n });\n }\n\n return parametersObject;\n};\n\nconst parameterToIrParameter = ({\n context,\n parameter,\n}: {\n context: IR.Context;\n parameter: Parameter;\n}): IR.ParameterObject => {\n const schema = parameter;\n\n const finalSchema: SchemaObject =\n schema && '$ref' in schema\n ? {\n allOf: [\n {\n ...schema,\n $ref: schema.$ref as string,\n required: Array.isArray(schema.required) ? schema.required : [],\n type: schema.type as SchemaObject['type'],\n },\n ],\n description: parameter.description,\n }\n : {\n description: parameter.description,\n ...schema,\n required: Array.isArray(schema.required) ? schema.required : [],\n type: schema.type as SchemaObject['type'],\n };\n\n const pagination = paginationField({\n context,\n name: parameter.name,\n schema: finalSchema,\n });\n\n const style = defaultStyle(parameter.in);\n const explode = defaultExplode(parameter.collectionFormat);\n const allowReserved = false;\n\n const irParameter: IR.ParameterObject = {\n allowReserved,\n explode,\n location: parameter.in as IR.ParameterObject['location'],\n name: parameter.name,\n schema: schemaToIrSchema({\n context,\n schema: finalSchema,\n state: undefined,\n }),\n style,\n };\n\n if (parameter.description) {\n irParameter.description = parameter.description;\n }\n\n if (pagination) {\n irParameter.pagination = pagination;\n }\n\n if (parameter.required) {\n irParameter.required = parameter.required;\n }\n\n return irParameter;\n};\n","import type { IR } from '../../../ir/types';\nimport { parseUrl } from '../../../utils/url';\n\nexport const parseServers = ({ context }: { context: IR.Context }) => {\n let schemes: ReadonlyArray<string> = context.spec.schemes ?? [];\n let host = context.spec.host ?? '';\n const path = context.spec.basePath ?? '';\n\n if (typeof context.config.input.path === 'string') {\n const url = parseUrl(context.config.input.path);\n\n if (!schemes.length) {\n if (url.protocol) {\n schemes = [url.protocol] as typeof schemes;\n }\n }\n\n if (!host) {\n host = `${url.host}${url.port ? `:${url.port}` : ''}`;\n }\n }\n\n if (!schemes.length) {\n schemes = [''];\n }\n\n const servers = schemes\n .map((scheme) => `${scheme ? `${scheme}://` : ''}${host}${path}`)\n .filter(Boolean);\n\n if (servers.length) {\n context.ir.servers = servers.map((url) => ({\n url,\n }));\n }\n};\n","import type { IR } from '../../../ir/types';\nimport { canProcessRef, createFilters } from '../../shared/utils/filter';\nimport { mergeParametersObjects } from '../../shared/utils/parameter';\nimport type {\n OpenApiV2_0_X,\n OperationObject,\n PathItemObject,\n PathsObject,\n SecuritySchemeObject,\n} from '../types/spec';\nimport { parseOperation } from './operation';\nimport { parametersArrayToObject } from './parameter';\nimport { parseSchema } from './schema';\nimport { parseServers } from './server';\n\ntype PathKeys<T extends keyof PathsObject = keyof PathsObject> =\n keyof T extends infer K ? (K extends `/${string}` ? K : never) : never;\n\nexport const parseV2_0_X = (context: IR.Context<OpenApiV2_0_X>) => {\n const operationIds = new Map<string, string>();\n const securitySchemesMap = new Map<string, SecuritySchemeObject>();\n\n const excludeFilters = createFilters(context.config.input.exclude);\n const includeFilters = createFilters(context.config.input.include);\n\n const shouldProcessRef = ($ref: string, schema: Record<string, any>) =>\n canProcessRef({\n $ref,\n excludeFilters,\n includeFilters,\n schema,\n });\n\n for (const name in context.spec.securityDefinitions) {\n const securitySchemeObject = context.spec.securityDefinitions[name]!;\n securitySchemesMap.set(name, securitySchemeObject);\n }\n\n if (context.spec.definitions) {\n for (const name in context.spec.definitions) {\n const $ref = `#/definitions/${name}`;\n const schema = context.spec.definitions[name]!;\n\n if (!shouldProcessRef($ref, schema)) {\n continue;\n }\n\n parseSchema({\n $ref,\n context,\n schema,\n });\n }\n }\n\n parseServers({ context });\n\n for (const path in context.spec.paths) {\n if (path.startsWith('x-')) {\n continue;\n }\n\n const pathItem = context.spec.paths[path as PathKeys]!;\n\n const finalPathItem = pathItem.$ref\n ? {\n ...context.resolveRef<PathItemObject>(pathItem.$ref),\n ...pathItem,\n }\n : pathItem;\n\n const commonOperation: OperationObject = {\n consumes: context.spec.consumes,\n produces: context.spec.produces,\n responses: {},\n security: context.spec.security,\n };\n const operationArgs: Omit<Parameters<typeof parseOperation>[0], 'method'> =\n {\n context,\n operation: {\n ...commonOperation,\n id: '',\n parameters: parametersArrayToObject({\n context,\n operation: commonOperation,\n parameters: finalPathItem.parameters,\n }),\n },\n operationIds,\n path: path as PathKeys,\n securitySchemesMap,\n };\n\n const $refDelete = `#/paths${path}/delete`;\n if (\n finalPathItem.delete &&\n shouldProcessRef($refDelete, finalPathItem.delete)\n ) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.delete,\n parameters: finalPathItem.delete.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'delete',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.delete,\n parameters,\n },\n });\n }\n\n const $refGet = `#/paths${path}/get`;\n if (finalPathItem.get && shouldProcessRef($refGet, finalPathItem.get)) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.get,\n parameters: finalPathItem.get.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'get',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.get,\n parameters,\n },\n });\n }\n\n const $refHead = `#/paths${path}/head`;\n if (finalPathItem.head && shouldProcessRef($refHead, finalPathItem.head)) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.head,\n parameters: finalPathItem.head.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'head',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.head,\n parameters,\n },\n });\n }\n\n const $refOptions = `#/paths${path}/options`;\n if (\n finalPathItem.options &&\n shouldProcessRef($refOptions, finalPathItem.options)\n ) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.options,\n parameters: finalPathItem.options.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'options',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.options,\n parameters,\n },\n });\n }\n\n const $refPatch = `#/paths${path}/patch`;\n if (\n finalPathItem.patch &&\n shouldProcessRef($refPatch, finalPathItem.patch)\n ) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.patch,\n parameters: finalPathItem.patch.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'patch',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.patch,\n parameters,\n },\n });\n }\n\n const $refPost = `#/paths${path}/post`;\n if (finalPathItem.post && shouldProcessRef($refPost, finalPathItem.post)) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.post,\n parameters: finalPathItem.post.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'post',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.post,\n parameters,\n },\n });\n }\n\n const $refPut = `#/paths${path}/put`;\n if (finalPathItem.put && shouldProcessRef($refPut, finalPathItem.put)) {\n const parameters = mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n operation: finalPathItem.put,\n parameters: finalPathItem.put.parameters,\n }),\n target: operationArgs.operation.parameters,\n });\n parseOperation({\n ...operationArgs,\n method: 'put',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.put,\n parameters,\n },\n });\n }\n }\n};\n","import type { IRMediaType } from '../../../ir/mediaType';\nimport {\n isMediaTypeFileLike,\n mediaTypeToIrMediaType,\n} from '../../../ir/mediaType';\nimport type {\n MediaTypeObject,\n ReferenceObject,\n SchemaObject,\n} from '../types/spec';\n\ninterface Content {\n mediaType: string;\n schema: SchemaObject | ReferenceObject | undefined;\n type: IRMediaType | undefined;\n}\n\nexport const contentToSchema = ({\n content,\n}: {\n content: Content;\n}): SchemaObject | undefined => {\n const { mediaType, schema } = content;\n\n if (schema && '$ref' in schema) {\n return {\n allOf: [{ ...schema }],\n };\n }\n\n if (!schema) {\n if (isMediaTypeFileLike({ mediaType })) {\n return {\n format: 'binary',\n type: 'string',\n };\n }\n return;\n }\n\n if (\n schema.type === 'string' &&\n !schema.format &&\n isMediaTypeFileLike({ mediaType })\n ) {\n return {\n ...schema,\n format: 'binary',\n };\n }\n\n return schema;\n};\n\nexport const mediaTypeObject = ({\n content,\n}: {\n content: Record<string, MediaTypeObject> | undefined;\n}): Content | undefined => {\n // return the first supported MIME type\n for (const mediaType in content) {\n return {\n mediaType,\n schema: content[mediaType]!.schema,\n type: mediaTypeToIrMediaType({ mediaType }),\n };\n }\n};\n","import type { IR } from '../../../ir/types';\nimport { addItemsToSchema } from '../../../ir/utils';\nimport { refToName } from '../../../utils/ref';\nimport type {\n SchemaState,\n SchemaType,\n SchemaWithRequired,\n} from '../../shared/types/schema';\nimport { discriminatorValue } from '../../shared/utils/discriminator';\nimport { mergeSchemaAccessScopes } from '../../shared/utils/schema';\nimport type { ReferenceObject, SchemaObject } from '../types/spec';\n\nexport const getSchemaType = ({\n schema,\n}: {\n schema: SchemaObject;\n}): SchemaType<SchemaObject> | undefined => {\n if (schema.type) {\n return schema.type;\n }\n\n // infer object based on the presence of properties\n if (schema.properties) {\n return 'object';\n }\n};\n\nconst parseSchemaJsDoc = ({\n irSchema,\n schema,\n}: {\n irSchema: IR.SchemaObject;\n schema: SchemaObject;\n}) => {\n if (schema.deprecated !== undefined) {\n irSchema.deprecated = schema.deprecated;\n }\n\n if (schema.description) {\n irSchema.description = schema.description;\n }\n\n if (schema.title) {\n irSchema.title = schema.title;\n }\n};\n\nconst parseSchemaMeta = ({\n irSchema,\n schema,\n}: {\n irSchema: IR.SchemaObject;\n schema: SchemaObject;\n}) => {\n if (schema.default !== undefined) {\n irSchema.default = schema.default;\n }\n\n if (schema.exclusiveMaximum) {\n if (schema.maximum !== undefined) {\n irSchema.exclusiveMaximum = schema.maximum;\n }\n } else if (schema.maximum !== undefined) {\n irSchema.maximum = schema.maximum;\n }\n\n if (schema.exclusiveMinimum) {\n if (schema.minimum !== undefined) {\n irSchema.exclusiveMinimum = schema.minimum;\n }\n } else if (schema.minimum !== undefined) {\n irSchema.minimum = schema.minimum;\n }\n\n if (schema.format) {\n irSchema.format = schema.format;\n }\n\n if (schema.maxItems !== undefined) {\n irSchema.maxItems = schema.maxItems;\n }\n\n if (schema.maxLength !== undefined) {\n irSchema.maxLength = schema.maxLength;\n }\n\n if (schema.minItems !== undefined) {\n irSchema.minItems = schema.minItems;\n }\n\n if (schema.minLength !== undefined) {\n irSchema.minLength = schema.minLength;\n }\n\n if (schema.pattern) {\n irSchema.pattern = schema.pattern;\n }\n\n if (schema.readOnly) {\n irSchema.accessScope = 'read';\n irSchema.accessScopes = mergeSchemaAccessScopes(irSchema.accessScopes, [\n 'read',\n ]);\n } else if (schema.writeOnly) {\n irSchema.accessScope = 'write';\n irSchema.accessScopes = mergeSchemaAccessScopes(irSchema.accessScopes, [\n 'write',\n ]);\n }\n};\n\nconst parseArray = ({\n context,\n irSchema = {},\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (schema.maxItems && schema.maxItems === schema.minItems) {\n irSchema.type = 'tuple';\n } else {\n irSchema.type = 'array';\n }\n\n let schemaItems: Array<IR.SchemaObject> = [];\n\n if (schema.items) {\n const irItemsSchema = schemaToIrSchema({\n context,\n schema: schema.items,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irItemsSchema.accessScopes,\n );\n\n if (\n !schemaItems.length &&\n schema.maxItems &&\n schema.maxItems === schema.minItems\n ) {\n schemaItems = Array(schema.maxItems).fill(irItemsSchema);\n } else {\n if ('$ref' in schema.items) {\n schemaItems.push(irItemsSchema);\n } else {\n const ofArray =\n schema.items.allOf || schema.items.anyOf || schema.items.oneOf;\n if (ofArray && ofArray.length > 1 && !schema.items.nullable) {\n // bring composition up to avoid incorrectly nested arrays\n irSchema = {\n ...irSchema,\n ...irItemsSchema,\n };\n } else {\n schemaItems.push(irItemsSchema);\n }\n }\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseBoolean = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'boolean';\n\n return irSchema;\n};\n\nconst parseNumber = ({\n irSchema = {},\n schema,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = schema.type;\n\n return irSchema;\n};\n\nconst parseObject = ({\n context,\n irSchema = {},\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'object';\n\n const schemaProperties: Record<string, IR.SchemaObject> = {};\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n if (typeof property === 'boolean') {\n // TODO: parser - handle boolean properties\n } else {\n const irPropertySchema = schemaToIrSchema({\n context,\n schema: property,\n state,\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irPropertySchema.accessScopes,\n );\n schemaProperties[name] = irPropertySchema;\n }\n }\n\n if (Object.keys(schemaProperties).length) {\n irSchema.properties = schemaProperties;\n }\n\n if (schema.additionalProperties === undefined) {\n if (!irSchema.properties) {\n irSchema.additionalProperties = {\n type: 'unknown',\n };\n }\n } else if (typeof schema.additionalProperties === 'boolean') {\n irSchema.additionalProperties = {\n type: schema.additionalProperties ? 'unknown' : 'never',\n };\n } else {\n const irAdditionalPropertiesSchema = schemaToIrSchema({\n context,\n schema: schema.additionalProperties,\n state,\n });\n // no need to add \"any\" additional properties if there are no defined properties\n if (\n irSchema.properties ||\n irAdditionalPropertiesSchema.type !== 'unknown'\n ) {\n irSchema.additionalProperties = irAdditionalPropertiesSchema;\n }\n }\n\n if (schema.required) {\n irSchema.required = schema.required;\n }\n\n return irSchema;\n};\n\nconst parseString = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'string';\n\n return irSchema;\n};\n\nconst initIrSchema = ({\n schema,\n}: {\n schema: SchemaObject;\n}): IR.SchemaObject => {\n const irSchema: IR.SchemaObject = {};\n\n parseSchemaJsDoc({\n irSchema,\n schema,\n });\n\n return irSchema;\n};\n\nconst parseAllOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'allOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n const schemaItems: Array<IR.SchemaObject> = [];\n const schemaType = getSchemaType({ schema });\n\n const compositionSchemas = schema.allOf;\n\n for (const compositionSchema of compositionSchemas) {\n const irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n if (schema.required) {\n if (irCompositionSchema.required) {\n irCompositionSchema.required = [\n ...irCompositionSchema.required,\n ...schema.required,\n ];\n } else {\n irCompositionSchema.required = schema.required;\n }\n }\n\n schemaItems.push(irCompositionSchema);\n\n if ('$ref' in compositionSchema) {\n const ref = context.resolveRef<SchemaObject>(compositionSchema.$ref);\n // `$ref` should be passed from the root `parseSchema()` call\n if (ref.discriminator && state.$ref) {\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [ref.discriminator.propertyName]: {\n const: discriminatorValue(state.$ref, ref.discriminator.mapping),\n type: 'string',\n },\n },\n type: 'object',\n };\n if (ref.required?.includes(ref.discriminator.propertyName)) {\n irDiscriminatorSchema.required = [ref.discriminator.propertyName];\n }\n schemaItems.push(irDiscriminatorSchema);\n }\n\n if (!state.circularReferenceTracker.has(compositionSchema.$ref)) {\n const irRefSchema = schemaToIrSchema({\n context,\n schema: ref,\n state: {\n ...state,\n $ref: compositionSchema.$ref,\n },\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irRefSchema.accessScopes,\n );\n }\n }\n }\n\n if (schemaType === 'object') {\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irObjectSchema.accessScopes,\n );\n\n if (irObjectSchema.properties) {\n for (const requiredProperty of irObjectSchema.required ?? []) {\n if (!irObjectSchema.properties[requiredProperty]) {\n for (const compositionSchema of compositionSchemas) {\n // TODO: parser - this could be probably resolved more accurately\n const finalCompositionSchema =\n '$ref' in compositionSchema\n ? context.resolveRef<SchemaObject>(compositionSchema.$ref)\n : compositionSchema;\n\n if (\n getSchemaType({ schema: finalCompositionSchema }) === 'object'\n ) {\n const irCompositionSchema = parseOneType({\n context,\n schema: {\n ...finalCompositionSchema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n if (irCompositionSchema.properties?.[requiredProperty]) {\n irObjectSchema.properties[requiredProperty] =\n irCompositionSchema.properties[requiredProperty];\n break;\n }\n }\n }\n }\n }\n schemaItems.push(irObjectSchema);\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n logicalOperator: 'and',\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schema.nullable) {\n // nest composition to avoid producing an intersection with null\n const nestedItems: Array<IR.SchemaObject> = [\n {\n type: 'null',\n },\n ];\n\n if (schemaItems.length) {\n nestedItems.unshift(irSchema);\n }\n\n irSchema = {\n items: nestedItems,\n logicalOperator: 'or',\n };\n\n // TODO: parser - this is a hack to bring back up meta fields\n // without it, some schemas were missing original deprecated\n if (nestedItems[0]!.deprecated) {\n irSchema.deprecated = nestedItems[0]!.deprecated;\n }\n\n // TODO: parser - this is a hack to bring back up meta fields\n // without it, some schemas were missing original description\n if (nestedItems[0]!.description) {\n irSchema.description = nestedItems[0]!.description;\n }\n }\n\n return irSchema;\n};\n\nconst parseAnyOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'anyOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n const schemaItems: Array<IR.SchemaObject> = [];\n const schemaType = getSchemaType({ schema });\n\n const compositionSchemas = schema.anyOf;\n\n for (const compositionSchema of compositionSchemas) {\n let irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n // `$ref` should be defined with discriminators\n if (schema.discriminator && '$ref' in compositionSchema) {\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [schema.discriminator.propertyName]: {\n const: discriminatorValue(\n compositionSchema.$ref,\n schema.discriminator.mapping,\n ),\n type: 'string',\n },\n },\n type: 'object',\n };\n irCompositionSchema = {\n items: [irDiscriminatorSchema, irCompositionSchema],\n logicalOperator: 'and',\n };\n }\n\n schemaItems.push(irCompositionSchema);\n }\n\n if (schema.nullable) {\n schemaItems.push({ type: 'null' });\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schemaType === 'object') {\n // nest composition to avoid producing a union with object properties\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irObjectSchema.accessScopes,\n );\n\n if (irObjectSchema.properties) {\n irSchema = {\n items: [irSchema, irObjectSchema],\n logicalOperator: 'and',\n };\n }\n }\n\n return irSchema;\n};\n\nconst parseEnum = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'enum'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n irSchema.type = 'enum';\n\n const schemaItems: Array<IR.SchemaObject> = [];\n\n for (const [index, enumValue] of schema.enum.entries()) {\n const typeOfEnumValue = typeof enumValue;\n let enumType: SchemaType<SchemaObject> | 'null' | undefined;\n\n if (\n typeOfEnumValue === 'string' ||\n typeOfEnumValue === 'number' ||\n typeOfEnumValue === 'boolean'\n ) {\n enumType = typeOfEnumValue;\n } else if (enumValue === null) {\n // nullable must be true\n if (schema.nullable) {\n enumType = 'null';\n }\n } else {\n console.warn(\n '🚨',\n `unhandled \"${typeOfEnumValue}\" typeof value \"${enumValue}\" for enum`,\n schema.enum,\n );\n }\n\n if (!enumType) {\n continue;\n }\n\n const irTypeSchema = parseOneType({\n context,\n schema: {\n description: schema['x-enum-descriptions']?.[index],\n title:\n schema['x-enum-varnames']?.[index] ?? schema['x-enumNames']?.[index],\n // cast enum to string temporarily\n type: enumType === 'null' ? 'string' : enumType,\n },\n state,\n });\n\n irTypeSchema.const = enumValue;\n\n // cast enum back\n if (enumType === 'null') {\n irTypeSchema.type = enumType;\n }\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irTypeSchema.accessScopes,\n );\n\n schemaItems.push(irTypeSchema);\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseOneOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'oneOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n let schemaItems: Array<IR.SchemaObject> = [];\n const schemaType = getSchemaType({ schema });\n\n const compositionSchemas = schema.oneOf;\n\n for (const compositionSchema of compositionSchemas) {\n let irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n // `$ref` should be defined with discriminators\n if (schema.discriminator && '$ref' in compositionSchema) {\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [schema.discriminator.propertyName]: {\n const: discriminatorValue(\n compositionSchema.$ref,\n schema.discriminator.mapping,\n ),\n type: 'string',\n },\n },\n type: 'object',\n };\n irCompositionSchema = {\n items: [irDiscriminatorSchema, irCompositionSchema],\n logicalOperator: 'and',\n };\n }\n\n // since we know oneOf will be using \"or\" logical operator, if the parsed\n // composition schema also has an \"or\" operator, we can bring it up\n // to avoid unnecessary brackets\n if (\n irCompositionSchema.logicalOperator === 'or' &&\n irCompositionSchema.items\n ) {\n schemaItems = schemaItems.concat(irCompositionSchema.items);\n } else {\n schemaItems.push(irCompositionSchema);\n }\n }\n\n if (schema.nullable) {\n schemaItems.push({ type: 'null' });\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schemaType === 'object') {\n // nest composition to avoid producing a union with object properties\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irObjectSchema.accessScopes,\n );\n\n if (irObjectSchema.properties) {\n irSchema = {\n items: [irSchema, irObjectSchema],\n logicalOperator: 'and',\n };\n }\n }\n\n return irSchema;\n};\n\nconst parseRef = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: ReferenceObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n const irSchema: IR.SchemaObject = {};\n\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n irSchema.$ref = decodeURI(schema.$ref);\n\n if (!state.circularReferenceTracker.has(schema.$ref)) {\n const refSchema = context.resolveRef<SchemaObject>(schema.$ref);\n const irRefSchema = schemaToIrSchema({\n context,\n schema: refSchema,\n state: {\n ...state,\n $ref: schema.$ref,\n },\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irRefSchema.accessScopes,\n );\n }\n\n return irSchema;\n};\n\nconst parseNullableType = ({\n context,\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n }\n\n const typeIrSchema: IR.SchemaObject = {};\n\n parseSchemaMeta({\n irSchema: typeIrSchema,\n schema,\n });\n\n if (typeIrSchema.default === null) {\n // clear to avoid duplicate default inside the non-null schema.\n // this would produce incorrect validator output\n delete typeIrSchema.default;\n }\n\n const schemaItems: Array<IR.SchemaObject> = [\n parseOneType({\n context,\n irSchema: typeIrSchema,\n schema,\n state,\n }),\n {\n type: 'null',\n },\n ];\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseType = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n const irSchema = initIrSchema({ schema });\n\n parseSchemaMeta({\n irSchema,\n schema,\n });\n\n const type = getSchemaType({ schema });\n\n if (!type) {\n return irSchema;\n }\n\n if (!schema.nullable) {\n return parseOneType({\n context,\n irSchema,\n schema: {\n ...schema,\n type,\n },\n state,\n });\n }\n\n return parseNullableType({\n context,\n irSchema,\n schema: {\n ...schema,\n type,\n },\n state,\n });\n};\n\nconst parseOneType = ({\n context,\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n\n parseSchemaMeta({\n irSchema,\n schema,\n });\n }\n\n switch (schema.type) {\n case 'array':\n return parseArray({\n context,\n irSchema,\n schema,\n state,\n });\n case 'boolean':\n return parseBoolean({\n context,\n irSchema,\n schema,\n state,\n });\n case 'integer':\n case 'number':\n return parseNumber({\n context,\n irSchema,\n schema,\n state,\n });\n case 'object':\n return parseObject({\n context,\n irSchema,\n schema,\n state,\n });\n case 'string':\n return parseString({\n context,\n irSchema,\n schema,\n state,\n });\n default:\n // gracefully handle invalid type\n return parseUnknown({\n context,\n irSchema,\n schema,\n state,\n });\n }\n};\n\nconst parseUnknown = ({\n irSchema,\n schema,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n }\n\n irSchema.type = 'unknown';\n\n parseSchemaMeta({\n irSchema,\n schema,\n });\n\n return irSchema;\n};\n\nexport const schemaToIrSchema = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaObject | ReferenceObject;\n state: SchemaState | undefined;\n}): IR.SchemaObject => {\n if (!state) {\n state = {\n circularReferenceTracker: new Set(),\n };\n }\n\n if (state.$ref) {\n state.circularReferenceTracker.add(state.$ref);\n }\n\n if ('$ref' in schema) {\n return parseRef({\n context,\n schema,\n state,\n });\n }\n\n if (schema.enum) {\n return parseEnum({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'enum'>,\n state,\n });\n }\n\n if (schema.allOf) {\n return parseAllOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'allOf'>,\n state,\n });\n }\n\n if (schema.anyOf) {\n return parseAnyOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'anyOf'>,\n state,\n });\n }\n\n if (schema.oneOf) {\n return parseOneOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'oneOf'>,\n state,\n });\n }\n\n // infer object based on the presence of properties\n if (schema.type || schema.properties) {\n return parseType({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'type'>,\n state,\n });\n }\n\n return parseUnknown({\n context,\n schema,\n state,\n });\n};\n\nexport const parseSchema = ({\n $ref,\n context,\n schema,\n}: {\n $ref: string;\n context: IR.Context;\n schema: SchemaObject | ReferenceObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.schemas) {\n context.ir.components.schemas = {};\n }\n\n context.ir.components.schemas[refToName($ref)] = schemaToIrSchema({\n context,\n schema,\n state: {\n $ref,\n circularReferenceTracker: new Set(),\n },\n });\n};\n","import { getPaginationKeywordsRegExp } from '../../../ir/pagination';\nimport type { IR } from '../../../ir/types';\nimport type { SchemaType } from '../../shared/types/schema';\nimport type {\n ParameterObject,\n ReferenceObject,\n RequestBodyObject,\n} from '../types/spec';\nimport type { SchemaObject } from '../types/spec';\nimport { mediaTypeObject } from './mediaType';\nimport { getSchemaType } from './schema';\n\nconst isPaginationType = (\n schemaType: SchemaType<SchemaObject> | undefined,\n): boolean =>\n schemaType === 'boolean' ||\n schemaType === 'integer' ||\n schemaType === 'number' ||\n schemaType === 'string';\n\n// We handle only simple values for now, up to 1 nested field\nexport const paginationField = ({\n context,\n name,\n schema,\n}: {\n context: IR.Context;\n name: string;\n schema: SchemaObject | ReferenceObject;\n}): boolean | string => {\n const paginationRegExp = getPaginationKeywordsRegExp(\n context.config.input.pagination,\n );\n if (paginationRegExp.test(name)) {\n return true;\n }\n\n if ('$ref' in schema) {\n const ref = context.resolveRef<\n ParameterObject | RequestBodyObject | SchemaObject\n >(schema.$ref);\n\n if ('content' in ref || 'in' in ref) {\n let refSchema: SchemaObject | ReferenceObject | undefined;\n\n if ('in' in ref) {\n refSchema = ref.schema;\n }\n\n if (!refSchema) {\n // parameter or body\n const content = mediaTypeObject({ content: ref.content });\n if (content?.schema) {\n refSchema = content.schema;\n }\n }\n\n if (!refSchema) {\n return false;\n }\n\n return paginationField({\n context,\n name,\n schema: refSchema,\n });\n }\n\n return paginationField({\n context,\n name,\n schema: ref,\n });\n }\n\n for (const name in schema.properties) {\n const paginationRegExp = getPaginationKeywordsRegExp(\n context.config.input.pagination,\n );\n\n if (paginationRegExp.test(name)) {\n const property = schema.properties[name]!;\n\n if (typeof property !== 'boolean' && !('$ref' in property)) {\n const schemaType = getSchemaType({ schema: property });\n // TODO: resolve deeper references\n\n if (isPaginationType(schemaType)) {\n return name;\n }\n }\n }\n }\n\n for (const allOf of schema.allOf ?? []) {\n const pagination = paginationField({\n context,\n name,\n schema: allOf,\n });\n if (pagination) {\n return pagination;\n }\n }\n\n return false;\n};\n","import type { IR } from '../../../ir/types';\nimport {\n ensureUniqueOperationId,\n operationToId,\n} from '../../shared/utils/operation';\nimport type {\n OperationObject,\n PathItemObject,\n RequestBodyObject,\n ResponseObject,\n SecuritySchemeObject,\n} from '../types/spec';\nimport { contentToSchema, mediaTypeObject } from './mediaType';\nimport { paginationField } from './pagination';\nimport { schemaToIrSchema } from './schema';\n\ninterface Operation\n extends Omit<OperationObject, 'parameters'>,\n Pick<IR.OperationObject, 'id' | 'parameters'> {}\n\nconst parseOperationJsDoc = ({\n irOperation,\n operation,\n}: {\n irOperation: IR.OperationObject;\n operation: Operation;\n}) => {\n if (operation.deprecated !== undefined) {\n irOperation.deprecated = operation.deprecated;\n }\n\n if (operation.description) {\n irOperation.description = operation.description;\n }\n\n if (operation.summary) {\n irOperation.summary = operation.summary;\n }\n\n if (operation.tags?.length) {\n irOperation.tags = operation.tags;\n }\n};\n\nconst initIrOperation = ({\n method,\n operation,\n path,\n}: Pick<IR.OperationObject, 'method' | 'path'> & {\n operation: Operation;\n}): IR.OperationObject => {\n const irOperation: IR.OperationObject = {\n id: operation.id,\n method,\n path,\n };\n\n parseOperationJsDoc({\n irOperation,\n operation,\n });\n\n return irOperation;\n};\n\nconst operationToIrOperation = ({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n}: Pick<IR.OperationObject, 'method' | 'path'> & {\n context: IR.Context;\n operation: Operation;\n securitySchemesMap: Map<string, SecuritySchemeObject>;\n}): IR.OperationObject => {\n const irOperation = initIrOperation({ method, operation, path });\n\n if (operation.parameters) {\n irOperation.parameters = operation.parameters;\n }\n\n if (operation.requestBody) {\n const requestBody =\n '$ref' in operation.requestBody\n ? context.resolveRef<RequestBodyObject>(operation.requestBody.$ref)\n : operation.requestBody;\n const content = mediaTypeObject({\n content: requestBody.content,\n });\n if (content) {\n const pagination = paginationField({\n context,\n name: '',\n schema:\n content.schema && '$ref' in content.schema\n ? {\n allOf: [{ ...content.schema }],\n description: requestBody.description,\n }\n : {\n description: requestBody.description,\n ...content.schema,\n },\n });\n\n irOperation.body = {\n mediaType: content.mediaType,\n schema: schemaToIrSchema({\n context,\n schema:\n '$ref' in operation.requestBody\n ? {\n allOf: [{ ...operation.requestBody }],\n description: requestBody.description,\n }\n : content.schema && '$ref' in content.schema\n ? {\n allOf: [{ ...content.schema }],\n description: requestBody.description,\n }\n : {\n description: requestBody.description,\n ...content.schema,\n },\n state: undefined,\n }),\n };\n\n if (pagination) {\n irOperation.body.pagination = pagination;\n }\n\n if (requestBody.required) {\n irOperation.body.required = requestBody.required;\n }\n\n if (content.type) {\n irOperation.body.type = content.type;\n }\n }\n }\n\n for (const name in operation.responses) {\n if (!irOperation.responses) {\n irOperation.responses = {};\n }\n\n const response = operation.responses[name]!;\n const responseObject =\n '$ref' in response\n ? context.resolveRef<ResponseObject>(response.$ref)\n : response;\n const content = mediaTypeObject({\n content: responseObject.content,\n });\n\n if (content) {\n irOperation.responses[name] = {\n mediaType: content.mediaType,\n schema: schemaToIrSchema({\n context,\n schema: {\n description: responseObject.description,\n ...contentToSchema({ content }),\n },\n state: undefined,\n }),\n };\n } else {\n irOperation.responses[name] = {\n schema: {\n description: responseObject.description,\n // TODO: parser - cover all statues with empty response bodies\n // 1xx, 204, 205, 304\n type: name === '204' ? 'void' : 'unknown',\n },\n };\n }\n }\n\n if (operation.security) {\n const securitySchemeObjects: Array<IR.SecurityObject> = [];\n\n for (const securityRequirementObject of operation.security) {\n for (const name in securityRequirementObject) {\n const securitySchemeObject = securitySchemesMap.get(name);\n\n if (!securitySchemeObject) {\n continue;\n }\n\n securitySchemeObjects.push(securitySchemeObject);\n }\n }\n\n if (securitySchemeObjects.length) {\n irOperation.security = securitySchemeObjects;\n }\n }\n\n // TODO: parser - handle servers\n // qux: operation.servers\n\n return irOperation;\n};\n\nexport const parseOperation = ({\n context,\n method,\n operation,\n operationIds,\n path,\n securitySchemesMap,\n}: {\n context: IR.Context;\n method: Extract<\n keyof PathItemObject,\n 'delete' | 'get' | 'head' | 'options' | 'patch' | 'post' | 'put' | 'trace'\n >;\n operation: Operation;\n operationIds: Map<string, string>;\n path: keyof IR.PathsObject;\n securitySchemesMap: Map<string, SecuritySchemeObject>;\n}) => {\n ensureUniqueOperationId({\n context,\n id: operation.operationId,\n method,\n operationIds,\n path,\n });\n\n if (!context.ir.paths) {\n context.ir.paths = {};\n }\n\n if (!context.ir.paths[path]) {\n context.ir.paths[path] = {};\n }\n\n if (operation.servers) {\n context.ir.servers = [...(context.ir.servers ?? []), ...operation.servers];\n }\n\n operation.id = operationToId({\n context,\n id: operation.operationId,\n method,\n path,\n });\n\n context.ir.paths[path][method] = operationToIrOperation({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport { refToName } from '../../../utils/ref';\nimport type {\n ParameterObject,\n ReferenceObject,\n SchemaObject,\n} from '../types/spec';\nimport { mediaTypeObject } from './mediaType';\nimport { paginationField } from './pagination';\nimport { schemaToIrSchema } from './schema';\n\n/**\n * Returns default parameter `allowReserved` based on value of `in`.\n */\nconst defaultAllowReserved = (\n _in: ParameterObject['in'],\n): boolean | undefined => {\n switch (_in) {\n // this keyword only applies to parameters with an `in` value of `query`\n case 'query':\n return false;\n default:\n return;\n }\n};\n\n/**\n * Returns default parameter `explode` based on value of `style`.\n */\nconst defaultExplode = (style: Required<ParameterObject>['style']): boolean => {\n switch (style) {\n // default value for `deepObject` is `false`, but that behavior is undefined\n // so we use `true` to make this work with the `client-fetch` package\n case 'deepObject':\n case 'form':\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Returns default parameter `style` based on value of `in`.\n */\nconst defaultStyle = (\n _in: ParameterObject['in'],\n): Required<IR.ParameterObject>['style'] => {\n switch (_in) {\n case 'header':\n case 'path':\n return 'simple';\n case 'cookie':\n case 'query':\n return 'form';\n }\n};\n\nexport const parametersArrayToObject = ({\n context,\n parameters,\n}: {\n context: IR.Context;\n parameters?: ReadonlyArray<ParameterObject | ReferenceObject>;\n}): IR.ParametersObject | undefined => {\n if (!parameters || !Object.keys(parameters).length) {\n return;\n }\n\n const parametersObject: IR.ParametersObject = {};\n\n for (const parameterOrReference of parameters) {\n const parameter =\n '$ref' in parameterOrReference\n ? context.resolveRef<ParameterObject>(parameterOrReference.$ref)\n : parameterOrReference;\n\n if (!parametersObject[parameter.in]) {\n parametersObject[parameter.in] = {};\n }\n\n parametersObject[parameter.in]![parameter.name] = parameterToIrParameter({\n context,\n parameter,\n });\n }\n\n return parametersObject;\n};\n\nconst parameterToIrParameter = ({\n context,\n parameter,\n}: {\n context: IR.Context;\n parameter: ParameterObject;\n}): IR.ParameterObject => {\n // TODO: parser - fix\n let schema = parameter.schema;\n\n if (!schema) {\n const content = mediaTypeObject({\n content: parameter.content,\n });\n if (content) {\n schema = content.schema;\n }\n }\n\n const finalSchema: SchemaObject =\n schema && '$ref' in schema\n ? {\n allOf: [{ ...schema }],\n deprecated: parameter.deprecated,\n description: parameter.description,\n }\n : {\n deprecated: parameter.deprecated,\n description: parameter.description,\n ...schema,\n };\n\n const pagination = paginationField({\n context,\n name: parameter.name,\n schema: finalSchema,\n });\n\n const style = parameter.style || defaultStyle(parameter.in);\n const explode =\n parameter.explode !== undefined ? parameter.explode : defaultExplode(style);\n const allowReserved =\n parameter.allowReserved !== undefined\n ? parameter.allowReserved\n : defaultAllowReserved(parameter.in);\n\n const irParameter: IR.ParameterObject = {\n allowReserved,\n explode,\n location: parameter.in,\n name: parameter.name,\n schema: schemaToIrSchema({\n context,\n schema: finalSchema,\n state: undefined,\n }),\n style,\n };\n\n if (parameter.deprecated) {\n irParameter.deprecated = parameter.deprecated;\n }\n\n if (parameter.description) {\n irParameter.description = parameter.description;\n }\n\n if (pagination) {\n irParameter.pagination = pagination;\n }\n\n if (parameter.required) {\n irParameter.required = parameter.required;\n }\n\n return irParameter;\n};\n\nexport const parseParameter = ({\n $ref,\n context,\n parameter,\n}: {\n $ref: string;\n context: IR.Context;\n parameter: ParameterObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.parameters) {\n context.ir.components.parameters = {};\n }\n\n context.ir.components.parameters[refToName($ref)] = parameterToIrParameter({\n context,\n parameter,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport { refToName } from '../../../utils/ref';\nimport type { RequestBodyObject, SchemaObject } from '../types/spec';\nimport { mediaTypeObject } from './mediaType';\nimport { schemaToIrSchema } from './schema';\n\nconst requestBodyToIrRequestBody = ({\n context,\n requestBody,\n}: {\n context: IR.Context;\n requestBody: RequestBodyObject;\n}): IR.RequestBodyObject => {\n // TODO: parser - fix\n const content = mediaTypeObject({\n content: requestBody.content,\n });\n const schema = content ? content.schema : undefined;\n\n const finalSchema: SchemaObject = {\n description: requestBody.description,\n ...schema,\n };\n\n const irRequestBody: IR.RequestBodyObject = {\n schema: schemaToIrSchema({\n context,\n schema: finalSchema,\n state: undefined,\n }),\n };\n\n if (requestBody.description) {\n irRequestBody.description = requestBody.description;\n }\n\n if (requestBody.required) {\n irRequestBody.required = requestBody.required;\n }\n\n return irRequestBody;\n};\n\nexport const parseRequestBody = ({\n $ref,\n context,\n requestBody,\n}: {\n $ref: string;\n context: IR.Context;\n requestBody: RequestBodyObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.requestBodies) {\n context.ir.components.requestBodies = {};\n }\n\n context.ir.components.requestBodies[refToName($ref)] =\n requestBodyToIrRequestBody({\n context,\n requestBody,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport { parseUrl } from '../../../utils/url';\n\nexport const parseServers = ({ context }: { context: IR.Context }) => {\n if (context.spec.servers) {\n context.ir.servers = context.spec.servers;\n return;\n }\n\n if (typeof context.config.input.path === 'string') {\n const url = parseUrl(context.config.input.path);\n context.ir.servers = [\n {\n url: `${url.protocol ? `${url.protocol}://` : ''}${url.host}${url.port ? `:${url.port}` : ''}`,\n },\n ];\n }\n\n if (!context.ir.servers) {\n context.ir.servers = [\n {\n url: '/',\n },\n ];\n }\n};\n","import type { IR } from '../../../ir/types';\nimport { canProcessRef, createFilters } from '../../shared/utils/filter';\nimport { mergeParametersObjects } from '../../shared/utils/parameter';\nimport type {\n OpenApiV3_0_X,\n ParameterObject,\n PathItemObject,\n PathsObject,\n RequestBodyObject,\n SecuritySchemeObject,\n} from '../types/spec';\nimport { parseOperation } from './operation';\nimport { parametersArrayToObject, parseParameter } from './parameter';\nimport { parseRequestBody } from './requestBody';\nimport { parseSchema } from './schema';\nimport { parseServers } from './server';\n\nexport const parseV3_0_X = (context: IR.Context<OpenApiV3_0_X>) => {\n const operationIds = new Map<string, string>();\n const securitySchemesMap = new Map<string, SecuritySchemeObject>();\n\n const excludeFilters = createFilters(context.config.input.exclude);\n const includeFilters = createFilters(context.config.input.include);\n\n const shouldProcessRef = ($ref: string, schema: Record<string, any>) =>\n canProcessRef({\n $ref,\n excludeFilters,\n includeFilters,\n schema,\n });\n\n // TODO: parser - handle more component types, old parser handles only parameters and schemas\n if (context.spec.components) {\n for (const name in context.spec.components.securitySchemes) {\n const securityOrReference =\n context.spec.components.securitySchemes[name]!;\n const securitySchemeObject =\n '$ref' in securityOrReference\n ? context.resolveRef<SecuritySchemeObject>(securityOrReference.$ref)\n : securityOrReference;\n securitySchemesMap.set(name, securitySchemeObject);\n }\n\n for (const name in context.spec.components.parameters) {\n const $ref = `#/components/parameters/${name}`;\n const parameterOrReference = context.spec.components.parameters[name]!;\n const parameter =\n '$ref' in parameterOrReference\n ? context.resolveRef<ParameterObject>(parameterOrReference.$ref)\n : parameterOrReference;\n\n if (!shouldProcessRef($ref, parameter)) {\n continue;\n }\n\n parseParameter({\n $ref,\n context,\n parameter,\n });\n }\n\n for (const name in context.spec.components.requestBodies) {\n const $ref = `#/components/requestBodies/${name}`;\n const requestBodyOrReference =\n context.spec.components.requestBodies[name]!;\n const requestBody =\n '$ref' in requestBodyOrReference\n ? context.resolveRef<RequestBodyObject>(requestBodyOrReference.$ref)\n : requestBodyOrReference;\n\n if (!shouldProcessRef($ref, requestBody)) {\n continue;\n }\n\n parseRequestBody({\n $ref,\n context,\n requestBody,\n });\n }\n\n for (const name in context.spec.components.schemas) {\n const $ref = `#/components/schemas/${name}`;\n const schema = context.spec.components.schemas[name]!;\n\n if (!shouldProcessRef($ref, schema)) {\n continue;\n }\n\n parseSchema({\n $ref,\n context,\n schema,\n });\n }\n }\n\n parseServers({ context });\n\n for (const path in context.spec.paths) {\n const pathItem = context.spec.paths[path as keyof PathsObject]!;\n\n const finalPathItem = pathItem.$ref\n ? {\n ...context.resolveRef<PathItemObject>(pathItem.$ref),\n ...pathItem,\n }\n : pathItem;\n\n const operationArgs: Omit<\n Parameters<typeof parseOperation>[0],\n 'method' | 'operation'\n > & {\n operation: Omit<\n Parameters<typeof parseOperation>[0]['operation'],\n 'responses'\n >;\n } = {\n context,\n operation: {\n description: finalPathItem.description,\n id: '',\n parameters: parametersArrayToObject({\n context,\n parameters: finalPathItem.parameters,\n }),\n security: context.spec.security,\n servers: finalPathItem.servers,\n summary: finalPathItem.summary,\n },\n operationIds,\n path: path as keyof PathsObject,\n securitySchemesMap,\n };\n\n const $refDelete = `#/paths${path}/delete`;\n if (\n finalPathItem.delete &&\n shouldProcessRef($refDelete, finalPathItem.delete)\n ) {\n parseOperation({\n ...operationArgs,\n method: 'delete',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.delete,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.delete.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refGet = `#/paths${path}/get`;\n if (finalPathItem.get && shouldProcessRef($refGet, finalPathItem.get)) {\n parseOperation({\n ...operationArgs,\n method: 'get',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.get,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.get.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refHead = `#/paths${path}/head`;\n if (finalPathItem.head && shouldProcessRef($refHead, finalPathItem.head)) {\n parseOperation({\n ...operationArgs,\n method: 'head',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.head,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.head.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refOptions = `#/paths${path}/options`;\n if (\n finalPathItem.options &&\n shouldProcessRef($refOptions, finalPathItem.options)\n ) {\n parseOperation({\n ...operationArgs,\n method: 'options',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.options,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.options.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refPatch = `#/paths${path}/patch`;\n if (\n finalPathItem.patch &&\n shouldProcessRef($refPatch, finalPathItem.patch)\n ) {\n parseOperation({\n ...operationArgs,\n method: 'patch',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.patch,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.patch.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refPost = `#/paths${path}/post`;\n if (finalPathItem.post && shouldProcessRef($refPost, finalPathItem.post)) {\n parseOperation({\n ...operationArgs,\n method: 'post',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.post,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.post.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refPut = `#/paths${path}/put`;\n if (finalPathItem.put && shouldProcessRef($refPut, finalPathItem.put)) {\n parseOperation({\n ...operationArgs,\n method: 'put',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.put,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.put.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refTrace = `#/paths${path}/trace`;\n if (\n finalPathItem.trace &&\n shouldProcessRef($refTrace, finalPathItem.trace)\n ) {\n parseOperation({\n ...operationArgs,\n method: 'trace',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.trace,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.trace.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n }\n};\n","import type { IRMediaType } from '../../../ir/mediaType';\nimport {\n isMediaTypeFileLike,\n mediaTypeToIrMediaType,\n} from '../../../ir/mediaType';\nimport type { MediaTypeObject, SchemaObject } from '../types/spec';\n\ninterface Content {\n mediaType: string;\n schema: SchemaObject | undefined;\n type: IRMediaType | undefined;\n}\n\nexport const contentToSchema = ({\n content,\n}: {\n content: Content;\n}): SchemaObject | undefined => {\n const { mediaType, schema } = content;\n\n if (!schema) {\n if (isMediaTypeFileLike({ mediaType })) {\n return {\n format: 'binary',\n type: 'string',\n };\n }\n return;\n }\n\n if (\n schema.type === 'string' &&\n !schema.format &&\n isMediaTypeFileLike({ mediaType })\n ) {\n return {\n ...schema,\n format: 'binary',\n };\n }\n\n return schema;\n};\n\nexport const mediaTypeObject = ({\n content,\n}: {\n content: Record<string, MediaTypeObject> | undefined;\n}): Content | undefined => {\n // return the first supported MIME type\n for (const mediaType in content) {\n return {\n mediaType,\n schema: content[mediaType]!.schema,\n type: mediaTypeToIrMediaType({ mediaType }),\n };\n }\n};\n","import type { IR } from '../../../ir/types';\nimport { addItemsToSchema } from '../../../ir/utils';\nimport { refToName } from '../../../utils/ref';\nimport type {\n SchemaState,\n SchemaType,\n SchemaWithRequired,\n} from '../../shared/types/schema';\nimport { discriminatorValue } from '../../shared/utils/discriminator';\nimport { mergeSchemaAccessScopes } from '../../shared/utils/schema';\nimport type { SchemaObject } from '../types/spec';\n\nexport const getSchemaTypes = ({\n schema,\n}: {\n schema: SchemaObject;\n}): ReadonlyArray<SchemaType<SchemaObject>> => {\n if (typeof schema.type === 'string') {\n return [schema.type];\n }\n\n if (schema.type) {\n return schema.type;\n }\n\n // infer object based on the presence of properties\n if (schema.properties) {\n return ['object'];\n }\n\n return [];\n};\n\nconst parseSchemaJsDoc = ({\n irSchema,\n schema,\n}: {\n irSchema: IR.SchemaObject;\n schema: SchemaObject;\n}) => {\n if (schema.deprecated !== undefined) {\n irSchema.deprecated = schema.deprecated;\n }\n\n if (schema.description) {\n irSchema.description = schema.description;\n }\n\n if (schema.title) {\n irSchema.title = schema.title;\n }\n};\n\nconst parseSchemaMeta = ({\n irSchema,\n schema,\n}: {\n irSchema: IR.SchemaObject;\n schema: SchemaObject;\n}) => {\n if (schema.const !== undefined) {\n irSchema.const = schema.const;\n\n // try to infer schema type\n if (!schema.type) {\n if (schema.const === null) {\n irSchema.type = 'null';\n } else {\n switch (typeof schema.const) {\n case 'bigint':\n case 'number':\n irSchema.type = 'number';\n break;\n case 'boolean':\n irSchema.type = 'boolean';\n break;\n case 'string':\n irSchema.type = 'string';\n break;\n }\n }\n }\n }\n\n if (schema.default !== undefined) {\n irSchema.default = schema.default;\n }\n\n if (schema.exclusiveMaximum) {\n irSchema.exclusiveMaximum = schema.exclusiveMaximum;\n }\n\n if (schema.exclusiveMinimum) {\n irSchema.exclusiveMinimum = schema.exclusiveMinimum;\n }\n\n if (schema.format) {\n irSchema.format = schema.format;\n }\n\n if (schema.maximum !== undefined) {\n irSchema.maximum = schema.maximum;\n }\n\n if (schema.maxItems !== undefined) {\n irSchema.maxItems = schema.maxItems;\n }\n\n if (schema.maxLength !== undefined) {\n irSchema.maxLength = schema.maxLength;\n }\n\n if (schema.minimum !== undefined) {\n irSchema.minimum = schema.minimum;\n }\n\n if (schema.minItems !== undefined) {\n irSchema.minItems = schema.minItems;\n }\n\n if (schema.minLength !== undefined) {\n irSchema.minLength = schema.minLength;\n }\n\n if (schema.pattern) {\n irSchema.pattern = schema.pattern;\n }\n\n if (schema.readOnly) {\n irSchema.accessScope = 'read';\n irSchema.accessScopes = mergeSchemaAccessScopes(irSchema.accessScopes, [\n 'read',\n ]);\n } else if (schema.writeOnly) {\n irSchema.accessScope = 'write';\n irSchema.accessScopes = mergeSchemaAccessScopes(irSchema.accessScopes, [\n 'write',\n ]);\n }\n};\n\nconst parseArray = ({\n context,\n irSchema = {},\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n if (\n (schema.prefixItems && schema.prefixItems.length) ||\n (schema.maxItems && schema.maxItems === schema.minItems) ||\n schema.const !== undefined\n ) {\n irSchema.type = 'tuple';\n } else {\n irSchema.type = 'array';\n }\n\n let schemaItems: Array<IR.SchemaObject> = [];\n\n for (const item of schema.prefixItems ?? []) {\n const irItemSchema = schemaToIrSchema({\n context,\n schema: item,\n state,\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irItemSchema.accessScopes,\n );\n schemaItems.push(irItemSchema);\n }\n\n if (schema.items) {\n const irItemsSchema = schemaToIrSchema({\n context,\n schema: schema.items,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irItemsSchema.accessScopes,\n );\n\n if (\n !schemaItems.length &&\n schema.maxItems &&\n schema.maxItems === schema.minItems\n ) {\n schemaItems = Array(schema.maxItems).fill(irItemsSchema);\n } else {\n const ofArray =\n schema.items.allOf || schema.items.anyOf || schema.items.oneOf;\n if (\n ofArray &&\n ofArray.length > 1 &&\n !getSchemaTypes({ schema: schema.items }).includes('null')\n ) {\n // bring composition up to avoid incorrectly nested arrays\n irSchema = {\n ...irSchema,\n ...irItemsSchema,\n };\n } else {\n schemaItems.push(irItemsSchema);\n }\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseBoolean = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n}): IR.SchemaObject => {\n irSchema.type = 'boolean';\n\n return irSchema;\n};\n\nconst parseNull = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n}) => {\n irSchema.type = 'null';\n\n return irSchema;\n};\n\nconst parseNumber = ({\n irSchema = {},\n schema,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: Omit<SchemaObject, 'type'> & {\n type: SchemaType<SchemaObject>;\n };\n}): IR.SchemaObject => {\n irSchema.type = schema.type;\n\n return irSchema;\n};\n\nconst parseObject = ({\n context,\n irSchema = {},\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n state: SchemaState;\n}): IR.SchemaObject => {\n irSchema.type = 'object';\n\n const schemaProperties: Record<string, IR.SchemaObject> = {};\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n if (typeof property === 'boolean') {\n // TODO: parser - handle boolean properties\n } else {\n const irPropertySchema = schemaToIrSchema({\n context,\n schema: property,\n state,\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irPropertySchema.accessScopes,\n );\n schemaProperties[name] = irPropertySchema;\n }\n }\n\n if (Object.keys(schemaProperties).length) {\n irSchema.properties = schemaProperties;\n }\n\n if (schema.additionalProperties === undefined) {\n if (!irSchema.properties) {\n irSchema.additionalProperties = {\n type: 'unknown',\n };\n }\n } else if (typeof schema.additionalProperties === 'boolean') {\n irSchema.additionalProperties = {\n type: schema.additionalProperties ? 'unknown' : 'never',\n };\n } else {\n const irAdditionalPropertiesSchema = schemaToIrSchema({\n context,\n schema: schema.additionalProperties,\n state,\n });\n // no need to add \"any\" additional properties if there are no defined properties\n if (\n irSchema.properties ||\n irAdditionalPropertiesSchema.type !== 'unknown'\n ) {\n irSchema.additionalProperties = irAdditionalPropertiesSchema;\n }\n }\n\n if (schema.required) {\n irSchema.required = schema.required;\n }\n\n return irSchema;\n};\n\nconst parseString = ({\n irSchema = {},\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n}): IR.SchemaObject => {\n irSchema.type = 'string';\n\n return irSchema;\n};\n\nconst initIrSchema = ({\n schema,\n}: {\n schema: SchemaObject;\n}): IR.SchemaObject => {\n const irSchema: IR.SchemaObject = {};\n\n parseSchemaJsDoc({\n irSchema,\n schema,\n });\n\n return irSchema;\n};\n\nconst parseAllOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'allOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n const schemaItems: Array<IR.SchemaObject> = [];\n const schemaTypes = getSchemaTypes({ schema });\n\n const compositionSchemas = schema.allOf;\n\n for (const compositionSchema of compositionSchemas) {\n const irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n if (schema.required) {\n if (irCompositionSchema.required) {\n irCompositionSchema.required = [\n ...irCompositionSchema.required,\n ...schema.required,\n ];\n } else {\n irCompositionSchema.required = schema.required;\n }\n }\n\n schemaItems.push(irCompositionSchema);\n\n if (compositionSchema.$ref) {\n const ref = context.resolveRef<SchemaObject>(compositionSchema.$ref);\n // `$ref` should be passed from the root `parseSchema()` call\n if (ref.discriminator && state.$ref) {\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [ref.discriminator.propertyName]: {\n const: discriminatorValue(state.$ref, ref.discriminator.mapping),\n type: 'string',\n },\n },\n type: 'object',\n };\n if (ref.required?.includes(ref.discriminator.propertyName)) {\n irDiscriminatorSchema.required = [ref.discriminator.propertyName];\n }\n schemaItems.push(irDiscriminatorSchema);\n }\n\n if (!state.circularReferenceTracker.has(compositionSchema.$ref)) {\n const irRefSchema = schemaToIrSchema({\n context,\n schema: ref,\n state: {\n ...state,\n $ref: compositionSchema.$ref,\n },\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irRefSchema.accessScopes,\n );\n }\n }\n }\n\n if (schemaTypes.includes('object')) {\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irObjectSchema.accessScopes,\n );\n\n if (irObjectSchema.properties) {\n for (const requiredProperty of irObjectSchema.required ?? []) {\n if (!irObjectSchema.properties[requiredProperty]) {\n for (const compositionSchema of compositionSchemas) {\n // TODO: parser - this could be probably resolved more accurately\n const finalCompositionSchema = compositionSchema.$ref\n ? context.resolveRef<SchemaObject>(compositionSchema.$ref)\n : compositionSchema;\n\n if (\n getSchemaTypes({ schema: finalCompositionSchema }).includes(\n 'object',\n )\n ) {\n const irCompositionSchema = parseOneType({\n context,\n schema: {\n ...finalCompositionSchema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n if (irCompositionSchema.properties?.[requiredProperty]) {\n irObjectSchema.properties[requiredProperty] =\n irCompositionSchema.properties[requiredProperty];\n break;\n }\n }\n }\n }\n }\n schemaItems.push(irObjectSchema);\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n logicalOperator: 'and',\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schemaTypes.includes('null')) {\n // nest composition to avoid producing an intersection with null\n const nestedItems: Array<IR.SchemaObject> = [\n {\n type: 'null',\n },\n ];\n\n if (schemaItems.length) {\n nestedItems.unshift(irSchema);\n }\n\n irSchema = {\n items: nestedItems,\n logicalOperator: 'or',\n };\n }\n\n return irSchema;\n};\n\nconst parseAnyOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'anyOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n const schemaItems: Array<IR.SchemaObject> = [];\n const schemaTypes = getSchemaTypes({ schema });\n\n const compositionSchemas = schema.anyOf;\n\n for (const compositionSchema of compositionSchemas) {\n let irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n // `$ref` should be defined with discriminators\n if (schema.discriminator && compositionSchema.$ref) {\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [schema.discriminator.propertyName]: {\n const: discriminatorValue(\n compositionSchema.$ref,\n schema.discriminator.mapping,\n ),\n type: 'string',\n },\n },\n type: 'object',\n };\n irCompositionSchema = {\n items: [irDiscriminatorSchema, irCompositionSchema],\n logicalOperator: 'and',\n };\n }\n\n schemaItems.push(irCompositionSchema);\n }\n\n if (schemaTypes.includes('null')) {\n schemaItems.push({ type: 'null' });\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schemaTypes.includes('object')) {\n // nest composition to avoid producing a union with object properties\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irObjectSchema.accessScopes,\n );\n\n if (irObjectSchema.properties) {\n irSchema = {\n items: [irSchema, irObjectSchema],\n logicalOperator: 'and',\n };\n }\n }\n\n return irSchema;\n};\n\nconst parseEnum = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'enum'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n irSchema.type = 'enum';\n\n const schemaItems: Array<IR.SchemaObject> = [];\n const schemaTypes = getSchemaTypes({ schema });\n\n for (const [index, enumValue] of schema.enum.entries()) {\n const typeOfEnumValue = typeof enumValue;\n let enumType: SchemaType<SchemaObject> | undefined;\n\n if (\n typeOfEnumValue === 'string' ||\n typeOfEnumValue === 'number' ||\n typeOfEnumValue === 'boolean'\n ) {\n enumType = typeOfEnumValue;\n } else if (enumValue === null) {\n // type must contain null\n if (schemaTypes.includes('null')) {\n enumType = 'null';\n }\n } else {\n console.warn(\n '🚨',\n `unhandled \"${typeOfEnumValue}\" typeof value \"${enumValue}\" for enum`,\n schema.enum,\n );\n }\n\n if (!enumType) {\n continue;\n }\n\n const irTypeSchema = parseOneType({\n context,\n schema: {\n const: enumValue,\n description: schema['x-enum-descriptions']?.[index],\n title:\n schema['x-enum-varnames']?.[index] ?? schema['x-enumNames']?.[index],\n type: enumType,\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irTypeSchema.accessScopes,\n );\n\n schemaItems.push(irTypeSchema);\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseOneOf = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'oneOf'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n let irSchema = initIrSchema({ schema });\n\n let schemaItems: Array<IR.SchemaObject> = [];\n const schemaTypes = getSchemaTypes({ schema });\n\n const compositionSchemas = schema.oneOf;\n\n for (const compositionSchema of compositionSchemas) {\n let irCompositionSchema = schemaToIrSchema({\n context,\n schema: compositionSchema,\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irCompositionSchema.accessScopes,\n );\n\n // `$ref` should be defined with discriminators\n if (schema.discriminator && compositionSchema.$ref) {\n const irDiscriminatorSchema: IR.SchemaObject = {\n properties: {\n [schema.discriminator.propertyName]: {\n const: discriminatorValue(\n compositionSchema.$ref,\n schema.discriminator.mapping,\n ),\n type: 'string',\n },\n },\n type: 'object',\n };\n irCompositionSchema = {\n items: [irDiscriminatorSchema, irCompositionSchema],\n logicalOperator: 'and',\n };\n }\n\n // since we know oneOf will be using \"or\" logical operator, if the parsed\n // composition schema also has an \"or\" operator, we can bring it up\n // to avoid unnecessary brackets\n if (\n irCompositionSchema.logicalOperator === 'or' &&\n irCompositionSchema.items\n ) {\n schemaItems = schemaItems.concat(irCompositionSchema.items);\n } else {\n schemaItems.push(irCompositionSchema);\n }\n }\n\n if (schemaTypes.includes('null')) {\n schemaItems.push({ type: 'null' });\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n mutateSchemaOneItem: true,\n schema: irSchema,\n });\n\n if (schemaTypes.includes('object')) {\n // nest composition to avoid producing a union with object properties\n const irObjectSchema = parseOneType({\n context,\n schema: {\n ...schema,\n type: 'object',\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irObjectSchema.accessScopes,\n );\n\n if (irObjectSchema.properties) {\n irSchema = {\n items: [irSchema, irObjectSchema],\n logicalOperator: 'and',\n };\n }\n }\n\n return irSchema;\n};\n\nconst parseRef = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, '$ref'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n const irSchema = initIrSchema({ schema });\n\n // refs using unicode characters become encoded, didn't investigate why\n // but the suspicion is this comes from `@hey-api/json-schema-ref-parser`\n irSchema.$ref = decodeURI(schema.$ref);\n\n if (!state.circularReferenceTracker.has(schema.$ref)) {\n const refSchema = context.resolveRef<SchemaObject>(schema.$ref);\n const irRefSchema = schemaToIrSchema({\n context,\n schema: refSchema,\n state: {\n ...state,\n $ref: schema.$ref,\n },\n });\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irRefSchema.accessScopes,\n );\n }\n\n return irSchema;\n};\n\nconst parseOneType = ({\n context,\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: Omit<SchemaObject, 'type'> & {\n type: SchemaType<SchemaObject>;\n };\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n\n parseSchemaMeta({\n irSchema,\n schema,\n });\n }\n\n switch (schema.type) {\n case 'array':\n return parseArray({\n context,\n irSchema,\n schema,\n state,\n });\n case 'boolean':\n return parseBoolean({\n context,\n irSchema,\n schema,\n });\n case 'integer':\n case 'number':\n return parseNumber({\n context,\n irSchema,\n schema,\n });\n case 'null':\n return parseNull({\n context,\n irSchema,\n schema,\n });\n case 'object':\n return parseObject({\n context,\n irSchema,\n schema,\n state,\n });\n case 'string':\n return parseString({\n context,\n irSchema,\n schema,\n });\n default:\n // gracefully handle invalid type\n return parseUnknown({\n context,\n irSchema,\n schema,\n });\n }\n};\n\nconst parseManyTypes = ({\n context,\n irSchema,\n schema,\n state,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: Omit<SchemaObject, 'type'> & {\n type: ReadonlyArray<SchemaType<SchemaObject>>;\n };\n state: SchemaState;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n }\n\n const typeIrSchema: IR.SchemaObject = {};\n\n parseSchemaMeta({\n irSchema: typeIrSchema,\n schema,\n });\n\n if (schema.type.includes('null') && typeIrSchema.default === null) {\n // clear to avoid duplicate default inside the non-null schema.\n // this would produce incorrect validator output\n delete typeIrSchema.default;\n }\n\n const schemaItems: Array<IR.SchemaObject> = [];\n\n for (const type of schema.type) {\n if (type === 'null') {\n schemaItems.push({ type: 'null' });\n } else {\n const irTypeSchema = parseOneType({\n context,\n irSchema: typeIrSchema,\n schema: {\n ...schema,\n type,\n },\n state,\n });\n\n irSchema.accessScopes = mergeSchemaAccessScopes(\n irSchema.accessScopes,\n irTypeSchema.accessScopes,\n );\n\n schemaItems.push(irTypeSchema);\n }\n }\n\n irSchema = addItemsToSchema({\n items: schemaItems,\n schema: irSchema,\n });\n\n return irSchema;\n};\n\nconst parseType = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaWithRequired<SchemaObject, 'type'>;\n state: SchemaState;\n}): IR.SchemaObject => {\n const irSchema = initIrSchema({ schema });\n\n parseSchemaMeta({\n irSchema,\n schema,\n });\n\n const schemaTypes = getSchemaTypes({ schema });\n\n if (schemaTypes.length === 1) {\n return parseOneType({\n context,\n irSchema,\n schema: {\n ...schema,\n type: schemaTypes[0]!,\n },\n state,\n });\n }\n\n return parseManyTypes({\n context,\n irSchema,\n schema: {\n ...schema,\n type: schemaTypes,\n },\n state,\n });\n};\n\nconst parseUnknown = ({\n irSchema,\n schema,\n}: {\n context: IR.Context;\n irSchema?: IR.SchemaObject;\n schema: SchemaObject;\n}): IR.SchemaObject => {\n if (!irSchema) {\n irSchema = initIrSchema({ schema });\n }\n\n irSchema.type = 'unknown';\n\n parseSchemaMeta({\n irSchema,\n schema,\n });\n\n return irSchema;\n};\n\nexport const schemaToIrSchema = ({\n context,\n schema,\n state,\n}: {\n context: IR.Context;\n schema: SchemaObject;\n state: SchemaState | undefined;\n}): IR.SchemaObject => {\n if (!state) {\n state = {\n circularReferenceTracker: new Set(),\n };\n }\n\n if (state.$ref) {\n state.circularReferenceTracker.add(state.$ref);\n }\n\n if (schema.$ref) {\n return parseRef({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, '$ref'>,\n state,\n });\n }\n\n if (schema.enum) {\n return parseEnum({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'enum'>,\n state,\n });\n }\n\n if (schema.allOf) {\n return parseAllOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'allOf'>,\n state,\n });\n }\n\n if (schema.anyOf) {\n return parseAnyOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'anyOf'>,\n state,\n });\n }\n\n if (schema.oneOf) {\n return parseOneOf({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'oneOf'>,\n state,\n });\n }\n\n // infer object based on the presence of properties\n if (schema.type || schema.properties) {\n return parseType({\n context,\n schema: schema as SchemaWithRequired<SchemaObject, 'type'>,\n state,\n });\n }\n\n return parseUnknown({\n context,\n schema,\n });\n};\n\nexport const parseSchema = ({\n $ref,\n context,\n schema,\n}: {\n $ref: string;\n context: IR.Context;\n schema: SchemaObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.schemas) {\n context.ir.components.schemas = {};\n }\n\n context.ir.components.schemas[refToName($ref)] = schemaToIrSchema({\n context,\n schema,\n state: {\n $ref,\n circularReferenceTracker: new Set(),\n },\n });\n};\n","import { getPaginationKeywordsRegExp } from '../../../ir/pagination';\nimport type { IR } from '../../../ir/types';\nimport type { SchemaType } from '../../shared/types/schema';\nimport type { ParameterObject, RequestBodyObject } from '../types/spec';\nimport type { SchemaObject } from '../types/spec';\nimport { mediaTypeObject } from './mediaType';\nimport { getSchemaTypes } from './schema';\n\nconst isPaginationType = (\n schemaTypes: ReadonlyArray<SchemaType<SchemaObject>>,\n): boolean =>\n schemaTypes.includes('boolean') ||\n schemaTypes.includes('integer') ||\n schemaTypes.includes('number') ||\n schemaTypes.includes('string');\n\n// We handle only simple values for now, up to 1 nested field\nexport const paginationField = ({\n context,\n name,\n schema,\n}: {\n context: IR.Context;\n name: string;\n schema: SchemaObject;\n}): boolean | string => {\n const paginationRegExp = getPaginationKeywordsRegExp(\n context.config.input.pagination,\n );\n if (paginationRegExp.test(name)) {\n return true;\n }\n\n if (schema.$ref) {\n const ref = context.resolveRef<\n ParameterObject | RequestBodyObject | SchemaObject\n >(schema.$ref);\n\n if ('content' in ref || 'in' in ref) {\n let refSchema: SchemaObject | undefined;\n\n if ('in' in ref) {\n refSchema = ref.schema;\n }\n\n if (!refSchema) {\n // parameter or body\n const content = mediaTypeObject({ content: ref.content });\n if (content?.schema) {\n refSchema = content.schema;\n }\n }\n\n if (!refSchema) {\n return false;\n }\n\n return paginationField({\n context,\n name,\n schema: refSchema,\n });\n }\n\n return paginationField({\n context,\n name,\n schema: ref,\n });\n }\n\n for (const name in schema.properties) {\n const paginationRegExp = getPaginationKeywordsRegExp(\n context.config.input.pagination,\n );\n\n if (paginationRegExp.test(name)) {\n const property = schema.properties[name]!;\n\n if (typeof property !== 'boolean') {\n // TODO: resolve deeper references\n const schemaTypes = getSchemaTypes({ schema: property });\n\n if (!schemaTypes.length) {\n const compositionSchemas = property.anyOf ?? property.oneOf;\n const nonNullCompositionSchemas = (compositionSchemas ?? []).filter(\n (schema) => schema.type !== 'null',\n );\n if (nonNullCompositionSchemas.length === 1) {\n const schemaTypes = getSchemaTypes({\n schema: nonNullCompositionSchemas[0]!,\n });\n if (isPaginationType(schemaTypes)) {\n return name;\n }\n }\n }\n\n if (isPaginationType(schemaTypes)) {\n return name;\n }\n }\n }\n }\n\n for (const allOf of schema.allOf ?? []) {\n const pagination = paginationField({\n context,\n name,\n schema: allOf,\n });\n if (pagination) {\n return pagination;\n }\n }\n\n return false;\n};\n","import type { IR } from '../../../ir/types';\nimport {\n ensureUniqueOperationId,\n operationToId,\n} from '../../shared/utils/operation';\nimport type {\n OperationObject,\n PathItemObject,\n RequestBodyObject,\n ResponseObject,\n SecuritySchemeObject,\n} from '../types/spec';\nimport { contentToSchema, mediaTypeObject } from './mediaType';\nimport { paginationField } from './pagination';\nimport { schemaToIrSchema } from './schema';\n\ninterface Operation\n extends Omit<OperationObject, 'parameters'>,\n Pick<IR.OperationObject, 'id' | 'parameters'> {}\n\nconst parseOperationJsDoc = ({\n irOperation,\n operation,\n}: {\n irOperation: IR.OperationObject;\n operation: Operation;\n}) => {\n if (operation.deprecated !== undefined) {\n irOperation.deprecated = operation.deprecated;\n }\n\n if (operation.description) {\n irOperation.description = operation.description;\n }\n\n if (operation.summary) {\n irOperation.summary = operation.summary;\n }\n\n if (operation.tags?.length) {\n irOperation.tags = operation.tags;\n }\n};\n\nconst initIrOperation = ({\n method,\n operation,\n path,\n}: Pick<IR.OperationObject, 'method' | 'path'> & {\n operation: Operation;\n}): IR.OperationObject => {\n const irOperation: IR.OperationObject = {\n id: operation.id,\n method,\n path,\n };\n\n parseOperationJsDoc({\n irOperation,\n operation,\n });\n\n return irOperation;\n};\n\nconst operationToIrOperation = ({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n}: Pick<IR.OperationObject, 'method' | 'path'> & {\n context: IR.Context;\n operation: Operation;\n securitySchemesMap: Map<string, SecuritySchemeObject>;\n}): IR.OperationObject => {\n const irOperation = initIrOperation({ method, operation, path });\n\n if (operation.parameters) {\n irOperation.parameters = operation.parameters;\n }\n\n if (operation.requestBody) {\n const requestBody =\n '$ref' in operation.requestBody\n ? context.resolveRef<RequestBodyObject>(operation.requestBody.$ref)\n : operation.requestBody;\n const content = mediaTypeObject({\n content: requestBody.content,\n });\n if (content) {\n const pagination = paginationField({\n context,\n name: '',\n schema: {\n description: requestBody.description,\n ...content.schema,\n },\n });\n\n irOperation.body = {\n mediaType: content.mediaType,\n schema: schemaToIrSchema({\n context,\n schema: {\n description: requestBody.description,\n ...('$ref' in operation.requestBody\n ? operation.requestBody\n : content.schema),\n },\n state: undefined,\n }),\n };\n\n if (pagination) {\n irOperation.body.pagination = pagination;\n }\n\n if (requestBody.required) {\n irOperation.body.required = requestBody.required;\n }\n\n if (content.type) {\n irOperation.body.type = content.type;\n }\n }\n }\n\n for (const name in operation.responses) {\n if (!irOperation.responses) {\n irOperation.responses = {};\n }\n\n const response = operation.responses[name]!;\n const responseObject =\n '$ref' in response\n ? context.resolveRef<ResponseObject>(response.$ref)\n : response;\n const content = mediaTypeObject({\n content: responseObject.content,\n });\n\n if (content) {\n irOperation.responses[name] = {\n mediaType: content.mediaType,\n schema: schemaToIrSchema({\n context,\n schema: {\n description: responseObject.description,\n ...contentToSchema({ content }),\n },\n state: undefined,\n }),\n };\n } else {\n irOperation.responses[name] = {\n schema: {\n description: responseObject.description,\n // TODO: parser - cover all statues with empty response bodies\n // 1xx, 204, 205, 304\n type: name === '204' ? 'void' : 'unknown',\n },\n };\n }\n }\n\n if (operation.security) {\n const securitySchemeObjects: Array<IR.SecurityObject> = [];\n\n for (const securityRequirementObject of operation.security) {\n for (const name in securityRequirementObject) {\n const securitySchemeObject = securitySchemesMap.get(name);\n\n if (!securitySchemeObject) {\n continue;\n }\n\n securitySchemeObjects.push(securitySchemeObject);\n }\n }\n\n if (securitySchemeObjects.length) {\n irOperation.security = securitySchemeObjects;\n }\n }\n\n // TODO: parser - handle servers\n // qux: operation.servers\n\n return irOperation;\n};\n\nexport const parseOperation = ({\n context,\n method,\n operation,\n operationIds,\n path,\n securitySchemesMap,\n}: {\n context: IR.Context;\n method: Extract<\n keyof PathItemObject,\n 'delete' | 'get' | 'head' | 'options' | 'patch' | 'post' | 'put' | 'trace'\n >;\n operation: Operation;\n operationIds: Map<string, string>;\n path: keyof IR.PathsObject;\n securitySchemesMap: Map<string, SecuritySchemeObject>;\n}) => {\n ensureUniqueOperationId({\n context,\n id: operation.operationId,\n method,\n operationIds,\n path,\n });\n\n if (!context.ir.paths) {\n context.ir.paths = {};\n }\n\n if (!context.ir.paths[path]) {\n context.ir.paths[path] = {};\n }\n\n if (operation.servers) {\n context.ir.servers = [...(context.ir.servers ?? []), ...operation.servers];\n }\n\n operation.id = operationToId({\n context,\n id: operation.operationId,\n method,\n path,\n });\n\n context.ir.paths[path][method] = operationToIrOperation({\n context,\n method,\n operation,\n path,\n securitySchemesMap,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport { refToName } from '../../../utils/ref';\nimport type {\n ParameterObject,\n ReferenceObject,\n SchemaObject,\n} from '../types/spec';\nimport { mediaTypeObject } from './mediaType';\nimport { paginationField } from './pagination';\nimport { schemaToIrSchema } from './schema';\n\n/**\n * Returns default parameter `allowReserved` based on value of `in`.\n */\nconst defaultAllowReserved = (\n _in: ParameterObject['in'],\n): boolean | undefined => {\n switch (_in) {\n // this keyword only applies to parameters with an `in` value of `query`\n case 'query':\n return false;\n default:\n return;\n }\n};\n\n/**\n * Returns default parameter `explode` based on value of `style`.\n */\nconst defaultExplode = (style: Required<ParameterObject>['style']): boolean => {\n switch (style) {\n // default value for `deepObject` is `false`, but that behavior is undefined\n // so we use `true` to make this work with the `client-fetch` package\n case 'deepObject':\n case 'form':\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Returns default parameter `style` based on value of `in`.\n */\nconst defaultStyle = (\n _in: ParameterObject['in'],\n): Required<ParameterObject>['style'] => {\n switch (_in) {\n case 'header':\n case 'path':\n return 'simple';\n case 'cookie':\n case 'query':\n return 'form';\n }\n};\n\nexport const parametersArrayToObject = ({\n context,\n parameters,\n}: {\n context: IR.Context;\n parameters?: ReadonlyArray<ParameterObject | ReferenceObject>;\n}): IR.ParametersObject | undefined => {\n if (!parameters || !Object.keys(parameters).length) {\n return;\n }\n\n const parametersObject: IR.ParametersObject = {};\n\n for (const parameterOrReference of parameters) {\n const parameter =\n '$ref' in parameterOrReference\n ? context.resolveRef<ParameterObject>(parameterOrReference.$ref)\n : parameterOrReference;\n\n if (!parametersObject[parameter.in]) {\n parametersObject[parameter.in] = {};\n }\n\n parametersObject[parameter.in]![parameter.name] = parameterToIrParameter({\n context,\n parameter,\n });\n }\n\n return parametersObject;\n};\n\nconst parameterToIrParameter = ({\n context,\n parameter,\n}: {\n context: IR.Context;\n parameter: ParameterObject;\n}): IR.ParameterObject => {\n // TODO: parser - fix\n let schema = parameter.schema;\n\n if (!schema) {\n const content = mediaTypeObject({\n content: parameter.content,\n });\n if (content) {\n schema = content.schema;\n }\n }\n\n const finalSchema: SchemaObject = {\n deprecated: parameter.deprecated,\n description: parameter.description,\n ...schema,\n };\n\n const pagination = paginationField({\n context,\n name: parameter.name,\n schema: finalSchema,\n });\n\n const style = parameter.style || defaultStyle(parameter.in);\n const explode =\n parameter.explode !== undefined ? parameter.explode : defaultExplode(style);\n const allowReserved =\n parameter.allowReserved !== undefined\n ? parameter.allowReserved\n : defaultAllowReserved(parameter.in);\n\n const irParameter: IR.ParameterObject = {\n allowReserved,\n explode,\n location: parameter.in,\n name: parameter.name,\n schema: schemaToIrSchema({\n context,\n schema: finalSchema,\n state: undefined,\n }),\n style,\n };\n\n if (parameter.deprecated) {\n irParameter.deprecated = parameter.deprecated;\n }\n\n if (parameter.description) {\n irParameter.description = parameter.description;\n }\n\n if (pagination) {\n irParameter.pagination = pagination;\n }\n\n if (parameter.required) {\n irParameter.required = parameter.required;\n }\n\n return irParameter;\n};\n\nexport const parseParameter = ({\n $ref,\n context,\n parameter,\n}: {\n $ref: string;\n context: IR.Context;\n parameter: ParameterObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.parameters) {\n context.ir.components.parameters = {};\n }\n\n context.ir.components.parameters[refToName($ref)] = parameterToIrParameter({\n context,\n parameter,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport { refToName } from '../../../utils/ref';\nimport type { RequestBodyObject, SchemaObject } from '../types/spec';\nimport { mediaTypeObject } from './mediaType';\nimport { schemaToIrSchema } from './schema';\n\nconst requestBodyToIrRequestBody = ({\n context,\n requestBody,\n}: {\n context: IR.Context;\n requestBody: RequestBodyObject;\n}): IR.RequestBodyObject => {\n // TODO: parser - fix\n const content = mediaTypeObject({\n content: requestBody.content,\n });\n const schema = content ? content.schema : undefined;\n\n const finalSchema: SchemaObject = {\n description: requestBody.description,\n ...schema,\n };\n\n const irRequestBody: IR.RequestBodyObject = {\n schema: schemaToIrSchema({\n context,\n schema: finalSchema,\n state: undefined,\n }),\n };\n\n if (requestBody.description) {\n irRequestBody.description = requestBody.description;\n }\n\n if (requestBody.required) {\n irRequestBody.required = requestBody.required;\n }\n\n return irRequestBody;\n};\n\nexport const parseRequestBody = ({\n $ref,\n context,\n requestBody,\n}: {\n $ref: string;\n context: IR.Context;\n requestBody: RequestBodyObject;\n}) => {\n if (!context.ir.components) {\n context.ir.components = {};\n }\n\n if (!context.ir.components.requestBodies) {\n context.ir.components.requestBodies = {};\n }\n\n context.ir.components.requestBodies[refToName($ref)] =\n requestBodyToIrRequestBody({\n context,\n requestBody,\n });\n};\n","import type { IR } from '../../../ir/types';\nimport { parseUrl } from '../../../utils/url';\n\nexport const parseServers = ({ context }: { context: IR.Context }) => {\n if (context.spec.servers) {\n context.ir.servers = context.spec.servers;\n return;\n }\n\n if (typeof context.config.input.path === 'string') {\n const url = parseUrl(context.config.input.path);\n context.ir.servers = [\n {\n url: `${url.protocol ? `${url.protocol}://` : ''}${url.host}${url.port ? `:${url.port}` : ''}`,\n },\n ];\n }\n\n if (!context.ir.servers) {\n context.ir.servers = [\n {\n url: '/',\n },\n ];\n }\n};\n","import type { IR } from '../../../ir/types';\nimport { canProcessRef, createFilters } from '../../shared/utils/filter';\nimport { mergeParametersObjects } from '../../shared/utils/parameter';\nimport type {\n OpenApiV3_1_X,\n ParameterObject,\n PathItemObject,\n PathsObject,\n RequestBodyObject,\n SecuritySchemeObject,\n} from '../types/spec';\nimport { parseOperation } from './operation';\nimport { parametersArrayToObject, parseParameter } from './parameter';\nimport { parseRequestBody } from './requestBody';\nimport { parseSchema } from './schema';\nimport { parseServers } from './server';\n\nexport const parseV3_1_X = (context: IR.Context<OpenApiV3_1_X>) => {\n const operationIds = new Map<string, string>();\n const securitySchemesMap = new Map<string, SecuritySchemeObject>();\n\n const excludeFilters = createFilters(context.config.input.exclude);\n const includeFilters = createFilters(context.config.input.include);\n\n const shouldProcessRef = ($ref: string, schema: Record<string, any>) =>\n canProcessRef({\n $ref,\n excludeFilters,\n includeFilters,\n schema,\n });\n\n // TODO: parser - handle more component types, old parser handles only parameters and schemas\n if (context.spec.components) {\n for (const name in context.spec.components.securitySchemes) {\n const securityOrReference =\n context.spec.components.securitySchemes[name]!;\n const securitySchemeObject =\n '$ref' in securityOrReference\n ? context.resolveRef<SecuritySchemeObject>(securityOrReference.$ref)\n : securityOrReference;\n securitySchemesMap.set(name, securitySchemeObject);\n }\n\n for (const name in context.spec.components.parameters) {\n const $ref = `#/components/parameters/${name}`;\n const parameterOrReference = context.spec.components.parameters[name]!;\n const parameter =\n '$ref' in parameterOrReference\n ? context.resolveRef<ParameterObject>(parameterOrReference.$ref)\n : parameterOrReference;\n\n if (!shouldProcessRef($ref, parameter)) {\n continue;\n }\n\n parseParameter({\n $ref,\n context,\n parameter,\n });\n }\n\n for (const name in context.spec.components.requestBodies) {\n const $ref = `#/components/requestBodies/${name}`;\n const requestBodyOrReference =\n context.spec.components.requestBodies[name]!;\n const requestBody =\n '$ref' in requestBodyOrReference\n ? context.resolveRef<RequestBodyObject>(requestBodyOrReference.$ref)\n : requestBodyOrReference;\n\n if (!shouldProcessRef($ref, requestBody)) {\n continue;\n }\n\n parseRequestBody({\n $ref,\n context,\n requestBody,\n });\n }\n\n for (const name in context.spec.components.schemas) {\n const $ref = `#/components/schemas/${name}`;\n const schema = context.spec.components.schemas[name]!;\n\n if (!shouldProcessRef($ref, schema)) {\n continue;\n }\n\n parseSchema({\n $ref,\n context,\n schema,\n });\n }\n }\n\n parseServers({ context });\n\n for (const path in context.spec.paths) {\n const pathItem = context.spec.paths[path as keyof PathsObject]!;\n\n const finalPathItem = pathItem.$ref\n ? {\n ...context.resolveRef<PathItemObject>(pathItem.$ref),\n ...pathItem,\n }\n : pathItem;\n\n const operationArgs: Omit<Parameters<typeof parseOperation>[0], 'method'> =\n {\n context,\n operation: {\n description: finalPathItem.description,\n id: '',\n parameters: parametersArrayToObject({\n context,\n parameters: finalPathItem.parameters,\n }),\n security: context.spec.security,\n servers: finalPathItem.servers,\n summary: finalPathItem.summary,\n },\n operationIds,\n path: path as keyof PathsObject,\n securitySchemesMap,\n };\n\n const $refDelete = `#/paths${path}/delete`;\n if (\n finalPathItem.delete &&\n shouldProcessRef($refDelete, finalPathItem.delete)\n ) {\n parseOperation({\n ...operationArgs,\n method: 'delete',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.delete,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.delete.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refGet = `#/paths${path}/get`;\n if (finalPathItem.get && shouldProcessRef($refGet, finalPathItem.get)) {\n parseOperation({\n ...operationArgs,\n method: 'get',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.get,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.get.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refHead = `#/paths${path}/head`;\n if (finalPathItem.head && shouldProcessRef($refHead, finalPathItem.head)) {\n parseOperation({\n ...operationArgs,\n method: 'head',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.head,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.head.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refOptions = `#/paths${path}/options`;\n if (\n finalPathItem.options &&\n shouldProcessRef($refOptions, finalPathItem.options)\n ) {\n parseOperation({\n ...operationArgs,\n method: 'options',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.options,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.options.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refPatch = `#/paths${path}/patch`;\n if (\n finalPathItem.patch &&\n shouldProcessRef($refPatch, finalPathItem.patch)\n ) {\n parseOperation({\n ...operationArgs,\n method: 'patch',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.patch,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.patch.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refPost = `#/paths${path}/post`;\n if (finalPathItem.post && shouldProcessRef($refPost, finalPathItem.post)) {\n parseOperation({\n ...operationArgs,\n method: 'post',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.post,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.post.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refPut = `#/paths${path}/put`;\n if (finalPathItem.put && shouldProcessRef($refPut, finalPathItem.put)) {\n parseOperation({\n ...operationArgs,\n method: 'put',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.put,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.put.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n\n const $refTrace = `#/paths${path}/trace`;\n if (\n finalPathItem.trace &&\n shouldProcessRef($refTrace, finalPathItem.trace)\n ) {\n parseOperation({\n ...operationArgs,\n method: 'trace',\n operation: {\n ...operationArgs.operation,\n ...finalPathItem.trace,\n parameters: mergeParametersObjects({\n source: parametersArrayToObject({\n context,\n parameters: finalPathItem.trace.parameters,\n }),\n target: operationArgs.operation.parameters,\n }),\n },\n });\n }\n }\n};\n","export const refParametersPartial = '#/components/parameters/';\n\nexport const refSchemasPartial = '#/components/schemas/';\n","import { ensureValidTypeScriptJavaScriptIdentifier } from '../openApi';\nimport type { Config } from '../types/config';\nimport { getConfig } from './config';\nimport { reservedJavaScriptKeywordsRegExp } from './regexp';\nimport { stringCase } from './stringCase';\n\nexport const transformServiceName = ({\n config,\n name,\n}: {\n config: Config;\n name: string;\n}) => {\n if (config.plugins['@hey-api/sdk']?.serviceNameBuilder) {\n return config.plugins['@hey-api/sdk'].serviceNameBuilder.replace(\n '{{name}}',\n name,\n );\n }\n\n return name;\n};\n\nexport const transformTypeName = (name: string) => {\n const config = getConfig();\n if (config.plugins['@hey-api/typescript']?.style === 'PascalCase') {\n return stringCase({\n case: 'PascalCase',\n value: name,\n });\n }\n return name;\n};\n\n/**\n * This method is meant to be used to process definition names\n * and return a cleaned up, transformed version that is legal\n * to use in the output code.\n *\n * For example, a definition with name \"400\" would result in \"_400\",\n * \"import\" would result in \"_import\", etc. This also respects the\n * casing configuration for types.\n *\n * @param name Name of the definition in OpenAPI specification.\n * @returns A cleaned up, transformed name usable in output code.\n */\nexport const cleanAndTransformTypeName = (name: string) => {\n const transformed = transformTypeName(name);\n const cleaned = ensureValidTypeScriptJavaScriptIdentifier(transformed);\n const result = cleaned.replace(reservedJavaScriptKeywordsRegExp, '_$1');\n return result;\n};\n","export function unique<T>(value: T, index: number, arr: T[]): boolean {\n return arr.indexOf(value) === index;\n}\n","export function sort(a: string, b: string): number {\n const nameA = a.toLocaleLowerCase();\n const nameB = b.toLocaleLowerCase();\n return nameA.localeCompare(nameB, 'en');\n}\n\nexport const sorterByName = <T extends { name: string }>(a: T, b: T) =>\n sort(a.name, b.name);\n\nexport function sortByName<T extends { name: string }>(items: T[]): T[] {\n return items.sort(sorterByName);\n}\n","import type { Enum, Model } from '../openApi';\nimport { ensureValidTypeScriptJavaScriptIdentifier } from '../openApi';\nimport { unescapeName } from './escape';\nimport { sort } from './sort';\nimport { unique } from './unique';\n\n/**\n * Sanitizes names of enums, so they are valid typescript identifiers of a certain form.\n *\n * 1: Replace all characters not legal as part of identifier with '_'\n * 2: Add '_' prefix if first character of enum name has character not legal for start of identifier\n * 3: Add '_' where the string transitions from lowercase to uppercase\n * 4: Transform the whole string to uppercase\n *\n * Javascript identifier regexp pattern retrieved from https://developer.mozilla.org/docs/Web/JavaScript/Reference/Lexical_grammar#identifiers\n */\nexport const enumKey = (value?: string | number, customName?: string) => {\n if (customName) {\n return customName;\n }\n // prefix numbers with underscore\n if (typeof value === 'number') {\n return `'_${value}'`;\n }\n\n let key = '';\n if (typeof value === 'string') {\n key = value\n .replace(/[^$\\u200c\\u200d\\p{ID_Continue}]/gu, '_')\n .replace(/^([^$_\\p{ID_Start}])/u, '_$1')\n .replace(/(\\p{Lowercase})(\\p{Uppercase}+)/gu, '$1_$2');\n }\n key = key.trim();\n if (!key) {\n key = 'empty_string';\n }\n return key.toUpperCase();\n};\n\nexport const enumUnionType = (enums: Enum[]) =>\n enums\n .map((enumerator) => enumValue(enumerator.value, true))\n .filter(unique)\n .join(' | ');\n\nexport const enumValue = (value?: string | number, union: boolean = false) => {\n if (typeof value === 'string') {\n if (value.includes(\"'\") && union) {\n return `\"${value}\"`;\n }\n return `'${value}'`;\n }\n return value;\n};\n\nexport const enumEntry = (enumerator: Enum) => {\n const key = enumKey(enumerator.value, enumerator.customName);\n const value = enumValue(enumerator.value);\n return { key, value };\n};\n\n/**\n * Represent enum in `meta` object for deduplication\n */\nexport const enumMeta = (model: Model): Required<Model>['meta'] => {\n // serialize enum values in namespace for quick lookup\n const serialized = model.enum\n .map((enumerator) => enumEntry(enumerator))\n .sort((a, b) => sort(a.key, b.key))\n .map((enumerator) => `${enumerator.key}=${enumerator.value}`)\n .join('&');\n return {\n $ref: `enum/${model.name}/${serialized}`,\n name: ensureValidTypeScriptJavaScriptIdentifier(unescapeName(model.name)),\n };\n};\n","import { getType } from '../openApi';\nimport { refParametersPartial, refSchemasPartial } from './const';\nimport { reservedJavaScriptKeywordsRegExp } from './regexp';\nimport { cleanAndTransformTypeName } from './transform';\n\nexport const getParametersMeta = (definitionName: string) => {\n const definitionType = getType({ type: definitionName });\n /**\n * Prefix parameter names to avoid name conflicts with schemas.\n * Assuming people are mostly interested in importing schema types\n * and don't care about this name as much. It should be resolved in\n * a cleaner way, there just isn't a good deduplication strategy\n * today. This is a workaround in the meantime, hopefully reducing\n * the chance of conflicts.\n *\n * Example where this would break: schema named `ParameterFoo` and\n * parameter named `Foo` (this would transform to `ParameterFoo`)\n *\n * Note: there's a related code to this workaround in `getType()`\n * method that needs to be cleaned up when this is addressed.\n */\n const name = `Parameter${definitionType.base.replace(reservedJavaScriptKeywordsRegExp, '_$1')}`;\n const meta = {\n $ref: refParametersPartial + definitionName,\n name,\n };\n return meta;\n};\n\n/**\n * @param definitionName Name of the schema definition in OpenAPI specification.\n * @returns meta object\n */\nexport const getSchemasMeta = (definitionName: string) => {\n const name = cleanAndTransformTypeName(definitionName);\n const meta = {\n $ref: refSchemasPartial + definitionName,\n name,\n };\n return meta;\n};\n","import { compiler, type Property, type TypeNode } from '../compiler';\nimport type { Model } from '../openApi';\nimport { sanitizeOperationParameterName } from '../openApi';\nimport type { Client } from '../types/client';\nimport { getConfig, isLegacyClient } from './config';\nimport { refSchemasPartial } from './const';\nimport { enumValue } from './enum';\nimport { escapeComment, escapeName, unescapeName } from './escape';\nimport { getSchemasMeta } from './meta';\nimport { reservedJavaScriptKeywordsRegExp } from './regexp';\nimport { stringCase } from './stringCase';\nimport { unique } from './unique';\n\nexport const isModelDate = (model: Model): boolean =>\n model.format === 'date' || model.format === 'date-time';\n\nconst base = (model: Model) => {\n const config = getConfig();\n\n if (model.base === 'binary') {\n return compiler.typeUnionNode({\n types: ['Blob', 'File'],\n });\n }\n\n if (config.plugins['@hey-api/transformers']?.dates && isModelDate(model)) {\n return compiler.typeNode('Date');\n }\n\n return compiler.typeNode(model.base);\n};\n\nconst typeReference = (model: Model) => {\n // nullable is false when base is null to avoid duplicate null statements\n const isNullable = model.base === 'null' ? false : model.isNullable;\n let typeNode = base(model);\n /**\n * special handling for single reference. The current approach didn't handle\n * transformed names, this fixes that. We should add a more robust solution,\n * but this will work for now.\n * {@link https://github.com/hey-api/openapi-ts/issues/768}\n */\n if (model.export === 'reference' && model.$refs.length === 1) {\n if (model.$refs[0]!.startsWith(refSchemasPartial)) {\n const meta = getSchemasMeta(model.base);\n typeNode = compiler.typeNode(meta.name);\n }\n }\n const unionNode = compiler.typeUnionNode({\n isNullable,\n types: [typeNode],\n });\n return unionNode;\n};\n\nconst typeArray = (model: Model) => {\n if (model.link) {\n // We treat an array of `model.link` as constant size array definition.\n if (Array.isArray(model.link)) {\n const types = model.link.map((m) => toType(m));\n const tuple = compiler.typeTupleNode({\n isNullable: model.isNullable,\n types,\n });\n return tuple;\n }\n\n // Special case where we use tuple to define constant size array.\n if (\n model.export === 'array' &&\n model.maxItems &&\n model.minItems &&\n model.maxItems === model.minItems &&\n model.maxItems <= 100\n ) {\n const types = Array(model.maxItems).fill(toType(model.link));\n const tuple = compiler.typeTupleNode({\n isNullable: model.isNullable,\n types,\n });\n return tuple;\n }\n\n return compiler.typeArrayNode([toType(model.link)], model.isNullable);\n }\n\n return compiler.typeArrayNode([base(model)], model.isNullable);\n};\n\nconst typeEnum = (model: Model) => {\n const values = model.enum.map((enumerator) => enumValue(enumerator.value));\n return compiler.typeUnionNode({\n isNullable: model.isNullable,\n types: values,\n });\n};\n\nconst typeDict = (model: Model) => {\n const type =\n model.link && !Array.isArray(model.link) ? toType(model.link) : base(model);\n return compiler.typeRecordNode(['string'], [type], model.isNullable, true);\n};\n\nconst typeUnionOrIntersection = ({\n model,\n style,\n}: {\n model: Model;\n style: 'intersection' | 'union';\n}) => {\n const types = model.properties\n .map((model) => {\n const str = compiler.nodeToString({\n node: toType(model),\n unescape: true,\n });\n return str;\n })\n .filter(unique);\n\n const node =\n style === 'union'\n ? compiler.typeUnionNode({\n // avoid printing duplicate null statements\n isNullable:\n model.isNullable &&\n !model.properties.find((property) => property.isNullable),\n types,\n })\n : compiler.typeIntersectionNode({\n isNullable: model.isNullable,\n types,\n });\n\n // top-level models don't need parentheses around them\n if (model.meta) {\n return node;\n }\n\n return compiler.typeParenthesizedNode({\n type: node,\n });\n};\n\nconst typeInterface = (model: Model) => {\n if (!model.properties.length) {\n return compiler.typeNode('unknown');\n }\n\n const config = getConfig();\n\n const isLegacy = isLegacyClient(config);\n\n const properties: Property[] = model.properties.map((property) => {\n let maybeRequired = property.isRequired ? '' : '?';\n let value = toType(property);\n let name = !isLegacy\n ? escapeName(unescapeName(transformTypeKeyName(property.name)))\n : // special test for 1XX status codes. We need a more robust system\n // for escaping values depending on context in which they're printed,\n // but since this works for client packages, it's not worth it right now\n /^\\dXX$/.test(property.name)\n ? escapeName(property.name)\n : property.name;\n // special case for additional properties type\n if (property.name === '[key: string]') {\n name = property.name;\n if (maybeRequired) {\n maybeRequired = '';\n value = compiler.typeUnionNode({\n types: [value, 'undefined'],\n });\n }\n }\n return {\n comment: [\n property.description && escapeComment(property.description),\n property.deprecated && '@deprecated',\n ],\n isReadOnly: property.isReadOnly,\n isRequired: maybeRequired === '',\n name,\n type: value,\n };\n });\n\n return compiler.typeInterfaceNode({\n isNullable: model.isNullable,\n properties,\n useLegacyResolution: true,\n });\n};\n\nexport const toType = (model: Model): TypeNode => {\n switch (model.export) {\n case 'all-of':\n return typeUnionOrIntersection({\n model,\n style: 'intersection',\n });\n case 'any-of':\n case 'one-of':\n return typeUnionOrIntersection({\n model,\n style: 'union',\n });\n case 'array':\n return typeArray(model);\n case 'dictionary':\n return typeDict(model);\n case 'enum':\n return typeEnum(model);\n case 'interface':\n return typeInterface(model);\n case 'const':\n case 'generic':\n case 'reference':\n default:\n return typeReference(model);\n }\n};\n\nexport interface SetUniqueTypeNameResult {\n /**\n * Did this function add a new property to the `client.types` object?\n */\n created: boolean;\n /**\n * Unique name for the exported type.\n */\n name: string;\n}\n\n/**\n * Generates a unique name for the exported type for given model meta.\n * @param args.client Internal client instance\n * @param args.count Unique key for deduplication\n * @param args.create If a name record does not exist, should it be created?\n * @param args.meta Meta property from the model\n * @param args.nameTransformer Function for transforming name into the final\n * value. In different contexts, a different strategy might be used. For\n * example, slashes `/` are invalid in TypeScript identifiers, but okay in\n * a JavaScript object key name.\n * @returns {SetUniqueTypeNameResult}\n */\nexport const setUniqueTypeName = ({\n client,\n count = 1,\n create = false,\n meta,\n nameTransformer,\n}: Pick<Required<Model>, 'meta'> & {\n client: Client;\n count?: number;\n create?: boolean;\n nameTransformer?: (value: string) => string;\n}): SetUniqueTypeNameResult => {\n let result: SetUniqueTypeNameResult = {\n created: false,\n name: '',\n };\n let name = meta.name;\n if (nameTransformer) {\n name = nameTransformer(name);\n }\n if (count > 1) {\n name = `${name}${count}`;\n }\n const type = client.types[name];\n if (!type) {\n if (create) {\n client.types[name] = meta;\n result = {\n created: true,\n name,\n };\n }\n } else if (type.$ref === meta.$ref) {\n result = {\n created: false,\n name,\n };\n } else {\n result = setUniqueTypeName({\n client,\n count: count + 1,\n create,\n meta,\n nameTransformer,\n });\n }\n return result;\n};\n\nexport interface UnsetUniqueTypeNameResult {\n /**\n * Did this function delete a property from the `client.types` object?\n */\n deleted: boolean;\n /**\n * Unique name removed from the `client.types` object.\n */\n name: string;\n}\n\nexport const unsetUniqueTypeName = ({\n client,\n name,\n}: {\n client: Client;\n name: string;\n}): UnsetUniqueTypeNameResult => {\n let result: UnsetUniqueTypeNameResult = {\n deleted: false,\n name: '',\n };\n if (!client.types[name]) {\n return result;\n }\n delete client.types[name];\n result = {\n deleted: true,\n name,\n };\n return result;\n};\n\n/**\n * Replaces any invalid characters from a parameter name.\n * For example: 'filter.someProperty' becomes 'filterSomeProperty'.\n */\nexport const transformTypeKeyName = (value: string): string => {\n const config = getConfig();\n\n // transform only for legacy clients\n if (!isLegacyClient(config)) {\n return value;\n }\n\n const name = stringCase({\n case: 'camelCase',\n value: sanitizeOperationParameterName(value),\n }).replace(reservedJavaScriptKeywordsRegExp, '_$1');\n return name;\n};\n","import type { Config } from '../../../types/config';\nimport { getConfig, isLegacyClient } from '../../../utils/config';\nimport { stringCase } from '../../../utils/stringCase';\nimport { transformTypeKeyName } from '../../../utils/type';\nimport type {\n OperationParameter,\n OperationResponse,\n} from '../interfaces/client';\nimport { sanitizeNamespaceIdentifier } from './sanitize';\n\nexport const getOperationKey = (operation: {\n method: string;\n path: string;\n}) => {\n const operationKey = `${operation.method.toUpperCase()} ${operation.path}`;\n return operationKey;\n};\n\nexport const getOperationResponseHeader = (\n operationResponses: OperationResponse[],\n): string | null => {\n const header = operationResponses.find(\n (operationResponses) => operationResponses.in === 'header',\n );\n if (header) {\n return header.name;\n }\n return null;\n};\n\n/**\n * Does this operation have at least one required parameter?\n * @returns boolean\n */\nexport const isOperationParameterRequired = (\n parameters: OperationParameter[],\n) => {\n const isRequired = parameters.some((parameter) => parameter.isRequired);\n return isRequired;\n};\n\n/**\n * Attempts to parse response status code from string into number.\n * @param value string status code from OpenAPI definition\n * @returns Parsed status code or null if invalid value\n */\nexport const parseResponseStatusCode = (\n value: string,\n): OperationResponse['code'] | null => {\n if (value === 'default') {\n return 'default';\n }\n\n if (value === '1XX') {\n return '1XX';\n }\n\n if (value === '2XX') {\n return '2XX';\n }\n\n if (value === '3XX') {\n return '3XX';\n }\n\n if (value === '4XX') {\n return '4XX';\n }\n\n if (value === '5XX') {\n return '5XX';\n }\n\n if (/\\d{3}/g.test(value)) {\n const code = Number.parseInt(value, 10);\n if (code >= 100 && code < 600) {\n return code;\n }\n }\n\n return null;\n};\n\nexport const sorterByResponseStatusCode = (\n a: OperationResponse,\n b: OperationResponse,\n) => {\n if (a.code > b.code) {\n return 1;\n }\n\n if (a.code < b.code) {\n return -1;\n }\n\n return 0;\n};\n\nconst isErrorStatusCode = (code: OperationResponse['code']) =>\n code === '3XX' ||\n code === '4XX' ||\n code === '5XX' ||\n (typeof code === 'number' && code >= 300);\n\nconst isSuccessStatusCode = (code: OperationResponse['code']) =>\n code === '2XX' || (typeof code === 'number' && code >= 200 && code < 300);\n\n/**\n * Detects whether default response is meant to be used\n * for error or success response.\n */\nconst inferDefaultResponseTypes = (\n response: OperationResponse,\n responses: OperationResponse[],\n) => {\n let types: Array<'error' | 'success'> = [];\n\n const addResponseType = (type: (typeof types)[number]) => {\n if (!types.includes(type)) {\n types = [...types, type];\n }\n };\n\n const hasSuccessResponse = responses.some(({ code }) =>\n isSuccessStatusCode(code),\n );\n if (!hasSuccessResponse) {\n addResponseType('success');\n }\n\n const description = (response.description ?? '').toLocaleLowerCase();\n const $refs = response.$refs.join('|').toLocaleLowerCase();\n\n // must be in lowercase\n const errorKeywords = ['error', 'problem'];\n const successKeywords = ['success'];\n\n if (\n successKeywords.some(\n (keyword) => description.includes(keyword) || $refs.includes(keyword),\n )\n ) {\n addResponseType('success');\n }\n\n if (\n errorKeywords.some(\n (keyword) => description.includes(keyword) || $refs.includes(keyword),\n )\n ) {\n addResponseType('error');\n }\n\n if (!types.length) {\n addResponseType('error');\n }\n\n return types;\n};\n\nexport const operationFilterFn = ({\n config,\n operationKey,\n}: {\n config: Config;\n operationKey: string;\n}): boolean => {\n const regexp = config.plugins['@hey-api/sdk']?.filter\n ? new RegExp(config.plugins['@hey-api/sdk']?.filter)\n : undefined;\n return !regexp || regexp.test(operationKey);\n};\n\n/**\n * Convert the input value to a correct operation (method) class name.\n * This will use the operation ID - if available - and otherwise fallback\n * on a generated name from the URL\n */\nexport const operationNameFn = ({\n config,\n method,\n operationId,\n path,\n}: {\n config: Config;\n method: string;\n operationId: string | undefined;\n path: string;\n}): string => {\n if (config.plugins['@hey-api/sdk']?.operationId && operationId) {\n return stringCase({\n case: 'camelCase',\n value: sanitizeNamespaceIdentifier(operationId),\n });\n }\n\n let urlWithoutPlaceholders = path;\n\n // legacy clients ignore the \"api-version\" param since we do not want to\n // add it as the first/default parameter for each of the service calls\n if (isLegacyClient(config)) {\n urlWithoutPlaceholders = urlWithoutPlaceholders.replace(\n /[^/]*?{api-version}.*?\\//g,\n '',\n );\n }\n\n urlWithoutPlaceholders = urlWithoutPlaceholders\n .replace(/{(.*?)}/g, 'by-$1')\n // replace slashes with hyphens for camelcase method at the end\n .replace(/[/:+]/g, '-');\n\n return stringCase({\n case: 'camelCase',\n value: `${method}-${urlWithoutPlaceholders}`,\n });\n};\n\nexport const operationParameterFilterFn = (\n parameter: OperationParameter,\n): boolean => {\n const config = getConfig();\n\n // legacy clients ignore the \"api-version\" param since we do not want to\n // add it as the first/default parameter for each of the service calls\n return !isLegacyClient(config) || parameter.prop !== 'api-version';\n};\n\nexport const operationParameterNameFn = (\n parameter: Omit<OperationParameter, 'name'>,\n): string => {\n const config = getConfig();\n\n return !isLegacyClient(config)\n ? parameter.prop\n : transformTypeKeyName(parameter.prop);\n};\n\nexport const tagResponseTypes = (responses: OperationResponse[]) =>\n responses.map((response) => {\n const { code } = response;\n if (code === 'default') {\n response.responseTypes = inferDefaultResponseTypes(response, responses);\n } else if (isSuccessStatusCode(code)) {\n response.responseTypes = ['success'];\n } else if (isErrorStatusCode(code)) {\n response.responseTypes = ['error'];\n }\n return response;\n });\n","import { IRContext } from '../ir/context';\nimport type { IR } from '../ir/types';\nimport type { Config } from '../types/config';\nimport { parseV2_0_X } from './2.0.x';\nimport { parseV3_0_X } from './3.0.x';\nimport { parseV3_1_X } from './3.1.x';\nimport type { Client } from './common/interfaces/client';\nimport type { OpenApi as LegacyOpenApi } from './common/interfaces/OpenApi';\nimport type { OpenApi } from './types';\nimport { parse as parseV2 } from './v2';\nimport { parse as parseV3 } from './v3';\n\nexport type {\n Client,\n Enum,\n Method,\n Model,\n ModelMeta,\n Operation,\n OperationParameter,\n OperationResponse,\n} from './common/interfaces/client';\nexport type { OpenApi } from './common/interfaces/OpenApi';\nexport { isOperationParameterRequired } from './common/parser/operation';\nexport {\n ensureValidTypeScriptJavaScriptIdentifier,\n sanitizeNamespaceIdentifier,\n sanitizeOperationParameterName,\n} from './common/parser/sanitize';\nexport { getType } from './common/parser/type';\nexport type { OpenApiSchema as OpenApiV2Schema } from './v2/interfaces/OpenApiSchema';\nexport type { OpenApiSchema as OpenApiV3Schema } from './v3/interfaces/OpenApiSchema';\n\n/**\n * Parse the OpenAPI specification to a Client model that contains\n * all the models, services and schema's we should output.\n * @param openApi The OpenAPI spec that we have loaded from disk.\n */\nexport function parseLegacy({\n openApi,\n}: {\n openApi: unknown;\n}): Omit<Client, 'config'> {\n const spec = openApi as LegacyOpenApi;\n\n if ('openapi' in spec) {\n return parseV3(spec);\n }\n\n if ('swagger' in spec) {\n return parseV2(spec);\n }\n\n throw new Error(\n `Unsupported OpenAPI specification: ${JSON.stringify(spec, null, 2)}`,\n );\n}\n\n/**\n * @internal\n * Parse the resolved OpenAPI specification. This will populate and return\n * `context` with intermediate representation obtained from the parsed spec.\n */\nexport const parseOpenApiSpec = ({\n config,\n spec,\n}: {\n config: Config;\n spec: unknown;\n}): IR.Context | undefined => {\n const context = new IRContext({\n config,\n spec: spec as OpenApi.V2_0_X | OpenApi.V3_0_X | OpenApi.V3_1_X,\n });\n\n if ('swagger' in context.spec) {\n parseV2_0_X(context as IR.Context<OpenApi.V2_0_X>);\n return context;\n }\n\n switch (context.spec.openapi) {\n case '3.0.0':\n case '3.0.1':\n case '3.0.2':\n case '3.0.3':\n case '3.0.4':\n parseV3_0_X(context as IR.Context<OpenApi.V3_0_X>);\n return context;\n case '3.1.0':\n case '3.1.1':\n parseV3_1_X(context as IR.Context<OpenApi.V3_1_X>);\n return context;\n default:\n break;\n }\n\n throw new Error('Unsupported OpenAPI specification');\n};\n","import { compiler } from '../../../compiler';\nimport { TypeScriptFile } from '../../../generate/files';\nimport type { OpenApiV2Schema, OpenApiV3Schema } from '../../../openApi';\nimport { ensureValidTypeScriptJavaScriptIdentifier } from '../../../openApi';\nimport { getConfig } from '../../../utils/config';\nimport type { Plugin } from '../../types';\nimport type { Config } from './types';\n\nconst ensureValidSchemaOutput = (\n schema: unknown,\n parentKey?: string,\n): object => {\n const config = getConfig();\n\n if (Array.isArray(schema)) {\n return schema.map((item) => ensureValidSchemaOutput(item));\n }\n\n if (typeof schema !== 'object' || schema === null) {\n return schema as object;\n }\n\n const result = { ...schema };\n Object.entries(result).forEach(([key, value]) => {\n if (config.plugins['@hey-api/schemas']?.type === 'form') {\n if (\n [\n 'description',\n 'x-enum-descriptions',\n 'x-enum-varnames',\n 'x-enumNames',\n 'title',\n ].includes(key) &&\n parentKey !== 'properties'\n ) {\n // @ts-expect-error\n delete result[key];\n return;\n }\n }\n\n // refs are encoded probably by json-schema-ref-parser, didn't investigate\n // further\n if (key === '$ref' && typeof value === 'string') {\n // @ts-expect-error\n result[key] = decodeURIComponent(value);\n }\n\n if (value && typeof value === 'object') {\n // @ts-expect-error\n result[key] = ensureValidSchemaOutput(value, key);\n }\n });\n return result;\n};\n\nconst toSchemaName = (\n name: string,\n schema: OpenApiV2Schema | OpenApiV3Schema,\n): string => {\n const config = getConfig();\n\n const validName = ensureValidTypeScriptJavaScriptIdentifier(name);\n\n if (config.plugins['@hey-api/schemas']?.nameBuilder) {\n return config.plugins['@hey-api/schemas'].nameBuilder(validName, schema);\n }\n\n return `${validName}Schema`;\n};\n\nexport const handlerLegacy: Plugin.LegacyHandler<Config> = ({\n files,\n openApi,\n}) => {\n const config = getConfig();\n\n files.schemas = new TypeScriptFile({\n dir: config.output.path,\n name: 'schemas.ts',\n });\n\n const addSchema = (\n name: string,\n schema: OpenApiV2Schema | OpenApiV3Schema,\n ) => {\n const obj = ensureValidSchemaOutput(schema);\n const expression = compiler.objectExpression({ obj });\n const statement = compiler.constVariable({\n assertion: 'const',\n exportConst: true,\n expression,\n name: toSchemaName(name, schema),\n });\n files.schemas!.add(statement);\n };\n\n // OpenAPI 2.0\n if ('swagger' in openApi) {\n Object.entries(openApi.definitions ?? {}).forEach(([name, definition]) => {\n addSchema(name, definition);\n });\n }\n\n // OpenAPI 3.x\n if ('openapi' in openApi) {\n Object.entries(openApi.components?.schemas ?? {}).forEach(\n ([name, schema]) => {\n addSchema(name, schema);\n },\n );\n }\n};\n","import type { Plugin } from '../../types';\nimport { handler } from './plugin';\nimport { handlerLegacy } from './plugin-legacy';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _handler: handler,\n _handlerLegacy: handlerLegacy,\n exportFromIndex: false,\n name: '@hey-api/schemas',\n nameBuilder: (name) => `${name}Schema`,\n output: 'schemas',\n type: 'json',\n};\n\n/**\n * Type helper for `@hey-api/schemas` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Pagination } from './pagination';\nimport type { IR } from './types';\n\nexport const hasParameterGroupObjectRequired = (\n parameterGroup?: Record<string, IR.ParameterObject>,\n): boolean => {\n for (const name in parameterGroup) {\n if (parameterGroup[name]!.required) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const hasParametersObjectRequired = (\n parameters: IR.ParametersObject | undefined,\n): boolean => {\n if (!parameters) {\n return false;\n }\n\n if (hasParameterGroupObjectRequired(parameters.cookie)) {\n return true;\n }\n\n if (hasParameterGroupObjectRequired(parameters.header)) {\n return true;\n }\n\n if (hasParameterGroupObjectRequired(parameters.path)) {\n return true;\n }\n\n if (hasParameterGroupObjectRequired(parameters.query)) {\n return true;\n }\n\n return false;\n};\n\nexport const parameterWithPagination = (\n parameters: IR.ParametersObject | undefined,\n): Pagination | undefined => {\n if (!parameters) {\n return;\n }\n\n for (const name in parameters.cookie) {\n const parameter = parameters.cookie[name]!;\n if (parameter.pagination) {\n return {\n in: parameter.location,\n name:\n parameter.pagination === true\n ? name\n : `${name}.${parameter.pagination}`,\n schema:\n parameter.pagination === true\n ? parameter.schema\n : parameter.schema.properties![parameter.pagination]!,\n };\n }\n }\n\n for (const name in parameters.header) {\n const parameter = parameters.header[name]!;\n if (parameter.pagination) {\n return {\n in: parameter.location,\n name:\n parameter.pagination === true\n ? name\n : `${name}.${parameter.pagination}`,\n schema:\n parameter.pagination === true\n ? parameter.schema\n : parameter.schema.properties![parameter.pagination]!,\n };\n }\n }\n\n for (const name in parameters.path) {\n const parameter = parameters.path[name]!;\n if (parameter.pagination) {\n return {\n in: parameter.location,\n name:\n parameter.pagination === true\n ? name\n : `${name}.${parameter.pagination}`,\n schema:\n parameter.pagination === true\n ? parameter.schema\n : parameter.schema.properties![parameter.pagination]!,\n };\n }\n }\n\n for (const name in parameters.query) {\n const parameter = parameters.query[name]!;\n if (parameter.pagination) {\n return {\n in: parameter.location,\n name:\n parameter.pagination === true\n ? name\n : `${name}.${parameter.pagination}`,\n schema:\n parameter.pagination === true\n ? parameter.schema\n : parameter.schema.properties![parameter.pagination]!,\n };\n }\n }\n};\n","import type { IR } from './types';\n\n/**\n * Ensure we don't produce redundant types, e.g. string | string.\n */\nexport const deduplicateSchema = <T extends IR.SchemaObject>({\n schema,\n}: {\n schema: T;\n}): T => {\n if (!schema.items) {\n return schema;\n }\n\n const uniqueItems: Array<IR.SchemaObject> = [];\n const typeIds: Array<string> = [];\n\n for (const item of schema.items) {\n // skip nested schemas for now, handle if necessary\n if (!item.type && item.items) {\n uniqueItems.push(item);\n continue;\n }\n\n if (\n // no `type` might still include `$ref` or `const`\n !item.type ||\n item.type === 'boolean' ||\n item.type === 'integer' ||\n item.type === 'null' ||\n item.type === 'number' ||\n item.type === 'string' ||\n item.type === 'unknown' ||\n item.type === 'void'\n ) {\n // const needs namespace to handle empty string values, otherwise\n // fallback would equal an actual value and we would skip an item\n const typeId = `${item.$ref ?? ''}${item.type ?? ''}${item.const !== undefined ? `const-${item.const}` : ''}`;\n if (!typeIds.includes(typeId)) {\n typeIds.push(typeId);\n uniqueItems.push(item);\n }\n continue;\n }\n\n uniqueItems.push(item);\n }\n\n schema.items = uniqueItems;\n\n if (\n schema.items.length <= 1 &&\n schema.type !== 'array' &&\n schema.type !== 'enum' &&\n schema.type !== 'tuple'\n ) {\n // bring the only item up to clean up the schema\n const liftedSchema = schema.items[0];\n delete schema.logicalOperator;\n delete schema.items;\n schema = {\n ...schema,\n ...liftedSchema,\n };\n }\n\n // exclude unknown if it's the only type left\n if (schema.type === 'unknown') {\n return {} as T;\n }\n\n return schema;\n};\n","import type { Pagination } from './pagination';\nimport {\n hasParametersObjectRequired,\n parameterWithPagination,\n} from './parameter';\nimport { deduplicateSchema } from './schema';\nimport type { IR } from './types';\nimport { addItemsToSchema } from './utils';\n\nexport const hasOperationDataRequired = (\n operation: IR.OperationObject,\n): boolean => {\n if (hasParametersObjectRequired(operation.parameters)) {\n return true;\n }\n\n if (operation.body?.required) {\n return true;\n }\n\n return false;\n};\n\nexport const operationPagination = ({\n context,\n operation,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n}): Pagination | undefined => {\n const body = operation.body;\n\n if (!body || !body.pagination) {\n return parameterWithPagination(operation.parameters);\n }\n\n if (body.pagination === true) {\n return {\n in: 'body',\n name: 'body',\n schema: body.schema,\n };\n }\n\n const schema = body.schema;\n const resolvedSchema = schema.$ref\n ? context.resolveIrRef<IR.RequestBodyObject | IR.SchemaObject>(schema.$ref)\n : schema;\n\n const finalSchema =\n 'schema' in resolvedSchema ? resolvedSchema.schema : resolvedSchema;\n const paginationProp = finalSchema?.properties?.[body.pagination];\n\n if (!paginationProp) {\n return parameterWithPagination(operation.parameters);\n }\n\n return {\n in: 'body',\n name: body.pagination,\n schema: paginationProp,\n };\n};\n\ntype StatusGroup = '1XX' | '2XX' | '3XX' | '4XX' | '5XX' | 'default';\n\nexport const statusCodeToGroup = ({\n statusCode,\n}: {\n statusCode: string;\n}): StatusGroup => {\n switch (statusCode) {\n case '1XX':\n return '1XX';\n case '2XX':\n return '2XX';\n case '3XX':\n return '3XX';\n case '4XX':\n return '4XX';\n case '5XX':\n return '5XX';\n case 'default':\n return 'default';\n default:\n return `${statusCode[0]}XX` as StatusGroup;\n }\n};\n\ninterface OperationResponsesMap {\n /**\n * A deduplicated union of all error types. Unknown types are omitted.\n */\n error?: IR.SchemaObject;\n /**\n * An object containing a map of status codes for each error type.\n */\n errors?: IR.SchemaObject;\n /**\n * A deduplicated union of all response types. Unknown types are omitted.\n */\n response?: IR.SchemaObject;\n /**\n * An object containing a map of status codes for each response type.\n */\n responses?: IR.SchemaObject;\n}\n\nexport const operationResponsesMap = (\n operation: IR.OperationObject,\n): OperationResponsesMap => {\n const result: OperationResponsesMap = {};\n\n if (!operation.responses) {\n return result;\n }\n\n const errors: Omit<IR.SchemaObject, 'properties'> &\n Pick<Required<IR.SchemaObject>, 'properties'> = {\n properties: {},\n type: 'object',\n };\n\n const responses: Omit<IR.SchemaObject, 'properties'> &\n Pick<Required<IR.SchemaObject>, 'properties'> = {\n properties: {},\n type: 'object',\n };\n\n // store default response to be evaluated last\n let defaultResponse: IR.ResponseObject | undefined;\n\n for (const name in operation.responses) {\n const response = operation.responses[name]!;\n\n switch (statusCodeToGroup({ statusCode: name })) {\n case '1XX':\n case '3XX':\n // TODO: parser - handle informational and redirection status codes\n break;\n case '2XX':\n responses.properties[name] = response.schema;\n break;\n case '4XX':\n case '5XX':\n errors.properties[name] = response.schema;\n break;\n case 'default':\n defaultResponse = response;\n break;\n }\n }\n\n // infer default response type\n if (defaultResponse) {\n let inferred = false;\n\n // assume default is intended for success if none exists yet\n if (!Object.keys(responses.properties).length) {\n responses.properties.default = defaultResponse.schema;\n inferred = true;\n }\n\n const description = (\n defaultResponse.schema.description ?? ''\n ).toLocaleLowerCase();\n const $ref = (defaultResponse.schema.$ref ?? '').toLocaleLowerCase();\n\n // TODO: parser - this could be rewritten using regular expressions\n const successKeywords = ['success'];\n if (\n successKeywords.some(\n (keyword) => description.includes(keyword) || $ref.includes(keyword),\n )\n ) {\n responses.properties.default = defaultResponse.schema;\n inferred = true;\n }\n\n // TODO: parser - this could be rewritten using regular expressions\n const errorKeywords = ['error', 'problem'];\n if (\n errorKeywords.some(\n (keyword) => description.includes(keyword) || $ref.includes(keyword),\n )\n ) {\n errors.properties.default = defaultResponse.schema;\n inferred = true;\n }\n\n // if no keyword match, assume default schema is intended for error\n if (!inferred) {\n errors.properties.default = defaultResponse.schema;\n }\n }\n\n const errorKeys = Object.keys(errors.properties);\n if (errorKeys.length) {\n errors.required = errorKeys;\n result.errors = errors;\n\n let errorUnion = addItemsToSchema({\n items: Object.values(errors.properties),\n mutateSchemaOneItem: true,\n schema: {},\n });\n errorUnion = deduplicateSchema({ schema: errorUnion });\n if (Object.keys(errorUnion).length && errorUnion.type !== 'unknown') {\n result.error = errorUnion;\n }\n }\n\n const responseKeys = Object.keys(responses.properties);\n if (responseKeys.length) {\n responses.required = responseKeys;\n result.responses = responses;\n\n let responseUnion = addItemsToSchema({\n items: Object.values(responses.properties),\n mutateSchemaOneItem: true,\n schema: {},\n });\n responseUnion = deduplicateSchema({ schema: responseUnion });\n if (Object.keys(responseUnion).length && responseUnion.type !== 'unknown') {\n result.response = responseUnion;\n }\n }\n\n return result;\n};\n","import type { Client as ParserClient, Model } from '../openApi';\nimport { sanitizeNamespaceIdentifier } from '../openApi';\nimport type { Client, Operation, Service } from '../types/client';\nimport type { Config } from '../types/config';\nimport { getConfig, legacyNameFromConfig } from './config';\nimport { sort } from './sort';\nimport { stringCase } from './stringCase';\nimport { unique } from './unique';\n\n/**\n * Post process client\n * @param client Client object with all the models, services, etc.\n */\nexport function postProcessClient(\n client: Omit<ParserClient, 'config'>,\n config: Config,\n): Client {\n return {\n ...client,\n config,\n models: client.models.map((model) => postProcessModel(model)),\n services: postProcessOperations(client.operations).map(postProcessService),\n types: {},\n };\n}\n\nconst postProcessModel = (model: Model): Model => ({\n ...model,\n $refs: model.$refs.filter((value, index, arr) => unique(value, index, arr)),\n enum: model.enum.filter(\n (value, index, arr) =>\n arr.findIndex((item) => item.value === value.value) === index,\n ),\n enums: model.enums.filter(\n (value, index, arr) =>\n arr.findIndex((item) => item.name === value.name) === index,\n ),\n imports: model.imports\n .filter(\n (value, index, arr) => unique(value, index, arr) && value !== model.name,\n )\n .sort(sort),\n});\n\nconst postProcessOperations = (\n operations: ParserClient['operations'],\n): Client['services'] => {\n const config = getConfig();\n\n const services = new Map<string, Service>();\n\n operations.forEach((parserOperation) => {\n const tags =\n parserOperation.tags?.length &&\n (config.plugins['@hey-api/sdk']?.asClass || legacyNameFromConfig(config))\n ? parserOperation.tags.filter(unique)\n : ['Default'];\n tags.forEach((tag) => {\n const operation: Operation = {\n ...parserOperation,\n service: getServiceName(tag),\n };\n const service =\n services.get(operation.service) || getNewService(operation);\n service.$refs = [...service.$refs, ...operation.$refs];\n service.imports = [...service.imports, ...operation.imports];\n service.operations = [...service.operations, operation];\n services.set(operation.service, service);\n });\n });\n\n return Array.from(services.values());\n};\n\nconst postProcessService = (service: Service): Service => {\n const clone = { ...service };\n clone.operations = postProcessServiceOperations(clone);\n clone.operations.forEach((operation) => {\n clone.imports.push(...operation.imports);\n });\n clone.imports = clone.imports.filter(unique).sort(sort);\n return clone;\n};\n\nconst postProcessServiceOperations = (service: Service): Operation[] => {\n const names = new Map<string, number>();\n\n return service.operations.map((operation) => {\n const clone = { ...operation };\n\n // Parse the service parameters and successes, very similar to how we parse\n // properties of models. These methods will extend the type if needed.\n clone.imports.push(\n ...clone.parameters.flatMap((parameter) => parameter.imports),\n );\n const successResponses = clone.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n clone.imports.push(...successResponses.flatMap((result) => result.imports));\n\n // Check if the operation name is unique, if not then prefix this with a number\n const name = clone.name;\n const index = names.get(name) || 0;\n if (index > 0) {\n clone.name = `${name}${index}`;\n }\n names.set(name, index + 1);\n\n return clone;\n });\n};\n\nexport const getNewService = (operation: Operation): Service => ({\n $refs: [],\n imports: [],\n name: operation.service,\n operations: [],\n});\n\n/**\n * Convert the input value to a correct service name. This converts\n * the input string to PascalCase.\n */\nexport const getServiceName = (value: string): string =>\n stringCase({\n case: 'PascalCase',\n value: sanitizeNamespaceIdentifier(value),\n });\n","import ts from 'typescript';\n\nimport { compiler } from '../../compiler';\nimport { operationResponsesMap } from '../../ir/operation';\nimport { deduplicateSchema } from '../../ir/schema';\nimport type { IR } from '../../ir/types';\nimport { numberRegExp } from '../../utils/regexp';\nimport { operationIrRef } from '../shared/utils/ref';\nimport type { Plugin } from '../types';\nimport type { Config } from './types';\n\ninterface SchemaWithType<T extends Required<IR.SchemaObject>['type']>\n extends Omit<IR.SchemaObject, 'type'> {\n type: Extract<Required<IR.SchemaObject>['type'], T>;\n}\n\ninterface Result {\n circularReferenceTracker: Set<string>;\n hasCircularReference: boolean;\n}\n\nexport const zodId = 'zod';\n\n// frequently used identifiers\nconst coerceIdentifier = compiler.identifier({ text: 'coerce' });\nconst defaultIdentifier = compiler.identifier({ text: 'default' });\nconst intersectionIdentifier = compiler.identifier({ text: 'intersection' });\nconst lazyIdentifier = compiler.identifier({ text: 'lazy' });\nconst lengthIdentifier = compiler.identifier({ text: 'length' });\nconst literalIdentifier = compiler.identifier({ text: 'literal' });\nconst maxIdentifier = compiler.identifier({ text: 'max' });\nconst mergeIdentifier = compiler.identifier({ text: 'merge' });\nconst minIdentifier = compiler.identifier({ text: 'min' });\nconst optionalIdentifier = compiler.identifier({ text: 'optional' });\nconst readonlyIdentifier = compiler.identifier({ text: 'readonly' });\nconst regexIdentifier = compiler.identifier({ text: 'regex' });\nconst unionIdentifier = compiler.identifier({ text: 'union' });\nconst zIdentifier = compiler.identifier({ text: 'z' });\n\nconst nameTransformer = (name: string) => `z-${name}`;\n\nconst arrayTypeToZodSchema = ({\n context,\n result,\n schema,\n}: {\n context: IR.Context;\n result: Result;\n schema: SchemaWithType<'array'>;\n}): ts.CallExpression => {\n const functionName = compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: schema.type }),\n });\n\n let arrayExpression: ts.CallExpression | undefined;\n\n if (!schema.items) {\n arrayExpression = compiler.callExpression({\n functionName,\n parameters: [\n unknownTypeToZodSchema({\n context,\n schema: {\n type: 'unknown',\n },\n }),\n ],\n });\n } else {\n schema = deduplicateSchema({ schema });\n\n // at least one item is guaranteed\n const itemExpressions = schema.items!.map((item) =>\n schemaToZodSchema({\n context,\n result,\n schema: item,\n }),\n );\n\n if (itemExpressions.length === 1) {\n arrayExpression = compiler.callExpression({\n functionName,\n parameters: itemExpressions,\n });\n } else {\n if (schema.logicalOperator === 'and') {\n // TODO: parser - handle intersection\n // return compiler.typeArrayNode(\n // compiler.typeIntersectionNode({ types: itemExpressions }),\n // );\n }\n\n // TODO: parser - handle union\n // return compiler.typeArrayNode(compiler.typeUnionNode({ types: itemExpressions }));\n\n arrayExpression = compiler.callExpression({\n functionName,\n parameters: [\n unknownTypeToZodSchema({\n context,\n schema: {\n type: 'unknown',\n },\n }),\n ],\n });\n }\n }\n\n if (schema.minItems === schema.maxItems && schema.minItems !== undefined) {\n arrayExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: arrayExpression,\n name: lengthIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value: schema.minItems })],\n });\n } else {\n if (schema.minItems !== undefined) {\n arrayExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: arrayExpression,\n name: minIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value: schema.minItems })],\n });\n }\n\n if (schema.maxItems !== undefined) {\n arrayExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: arrayExpression,\n name: maxIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value: schema.maxItems })],\n });\n }\n }\n\n return arrayExpression;\n};\n\nconst booleanTypeToZodSchema = ({\n schema,\n}: {\n context: IR.Context;\n schema: SchemaWithType<'boolean'>;\n}) => {\n if (typeof schema.const === 'boolean') {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: literalIdentifier,\n }),\n parameters: [compiler.ots.boolean(schema.const)],\n });\n return expression;\n }\n\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: schema.type }),\n }),\n });\n return expression;\n};\n\nconst enumTypeToZodSchema = ({\n context,\n schema,\n}: {\n context: IR.Context;\n schema: SchemaWithType<'enum'>;\n}): ts.CallExpression => {\n const enumMembers: Array<ts.LiteralExpression> = [];\n\n for (const item of schema.items ?? []) {\n // Zod supports only string enums\n if (item.type === 'string' && typeof item.const === 'string') {\n enumMembers.push(\n compiler.stringLiteral({\n text: item.const,\n }),\n );\n }\n }\n\n if (!enumMembers.length) {\n return unknownTypeToZodSchema({\n context,\n schema: {\n type: 'unknown',\n },\n });\n }\n\n const enumExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: schema.type }),\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: enumMembers,\n multiLine: false,\n }),\n ],\n });\n\n return enumExpression;\n};\n\nconst neverTypeToZodSchema = ({\n schema,\n}: {\n context: IR.Context;\n schema: SchemaWithType<'never'>;\n}) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: schema.type }),\n }),\n });\n return expression;\n};\n\nconst nullTypeToZodSchema = ({\n schema,\n}: {\n context: IR.Context;\n schema: SchemaWithType<'null'>;\n}) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: schema.type }),\n }),\n });\n return expression;\n};\n\nconst numberTypeToZodSchema = ({\n schema,\n}: {\n context: IR.Context;\n schema: SchemaWithType<'integer' | 'number'>;\n}) => {\n const isBigInt = schema.type === 'integer' && schema.format === 'int64';\n\n if (typeof schema.const === 'number') {\n // TODO: parser - handle bigint constants\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: literalIdentifier,\n }),\n parameters: [compiler.ots.number(schema.const)],\n });\n return expression;\n }\n\n let numberExpression = compiler.callExpression({\n functionName: isBigInt\n ? compiler.propertyAccessExpression({\n expression: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: coerceIdentifier,\n }),\n name: compiler.identifier({ text: 'bigint' }),\n })\n : compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'number' }),\n }),\n });\n\n if (!isBigInt && schema.type === 'integer') {\n numberExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: numberExpression,\n name: compiler.identifier({ text: 'int' }),\n }),\n });\n }\n\n if (schema.exclusiveMinimum !== undefined) {\n numberExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: numberExpression,\n name: compiler.identifier({ text: 'gt' }),\n }),\n parameters: [\n compiler.valueToExpression({ value: schema.exclusiveMinimum }),\n ],\n });\n } else if (schema.minimum !== undefined) {\n numberExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: numberExpression,\n name: compiler.identifier({ text: 'gte' }),\n }),\n parameters: [compiler.valueToExpression({ value: schema.minimum })],\n });\n }\n\n if (schema.exclusiveMaximum !== undefined) {\n numberExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: numberExpression,\n name: compiler.identifier({ text: 'lt' }),\n }),\n parameters: [\n compiler.valueToExpression({ value: schema.exclusiveMaximum }),\n ],\n });\n } else if (schema.maximum !== undefined) {\n numberExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: numberExpression,\n name: compiler.identifier({ text: 'lte' }),\n }),\n parameters: [compiler.valueToExpression({ value: schema.maximum })],\n });\n }\n\n return numberExpression;\n};\n\nconst objectTypeToZodSchema = ({\n context,\n result,\n schema,\n}: {\n context: IR.Context;\n result: Result;\n schema: SchemaWithType<'object'>;\n}) => {\n // TODO: parser - handle constants\n const properties: Array<ts.PropertyAssignment> = [];\n\n // let indexProperty: Property | undefined;\n // const schemaProperties: Array<Property> = [];\n // let indexPropertyItems: Array<IR.SchemaObject> = [];\n const required = schema.required ?? [];\n // let hasOptionalProperties = false;\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n const isRequired = required.includes(name);\n\n const propertyExpression = schemaToZodSchema({\n context,\n optional: !isRequired,\n result,\n schema: property,\n });\n\n numberRegExp.lastIndex = 0;\n let propertyName = numberRegExp.test(name)\n ? ts.factory.createNumericLiteral(name)\n : name;\n // TODO: parser - abstract safe property name logic\n if (\n ((name.match(/^[0-9]/) && name.match(/\\D+/g)) || name.match(/\\W/g)) &&\n !name.startsWith(\"'\") &&\n !name.endsWith(\"'\")\n ) {\n propertyName = `'${name}'`;\n }\n properties.push(\n compiler.propertyAssignment({\n initializer: propertyExpression,\n name: propertyName,\n }),\n );\n\n // indexPropertyItems.push(property);\n // if (!isRequired) {\n // hasOptionalProperties = true;\n // }\n }\n\n // if (\n // schema.additionalProperties &&\n // (schema.additionalProperties.type !== 'never' || !indexPropertyItems.length)\n // ) {\n // if (schema.additionalProperties.type === 'never') {\n // indexPropertyItems = [schema.additionalProperties];\n // } else {\n // indexPropertyItems.unshift(schema.additionalProperties);\n // }\n\n // if (hasOptionalProperties) {\n // indexPropertyItems.push({\n // type: 'undefined',\n // });\n // }\n\n // indexProperty = {\n // isRequired: true,\n // name: 'key',\n // type: schemaToZodSchema({\n // context,\n // schema:\n // indexPropertyItems.length === 1\n // ? indexPropertyItems[0]\n // : {\n // items: indexPropertyItems,\n // logicalOperator: 'or',\n // },\n // }),\n // };\n // }\n\n // return compiler.typeInterfaceNode({\n // indexProperty,\n // properties: schemaProperties,\n // useLegacyResolution: false,\n // });\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: schema.type }),\n }),\n parameters: [ts.factory.createObjectLiteralExpression(properties, true)],\n });\n return expression;\n};\n\nconst stringTypeToZodSchema = ({\n schema,\n}: {\n context: IR.Context;\n schema: SchemaWithType<'string'>;\n}) => {\n if (typeof schema.const === 'string') {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: literalIdentifier,\n }),\n parameters: [compiler.ots.string(schema.const)],\n });\n return expression;\n }\n\n let stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: schema.type }),\n }),\n });\n\n if (schema.format) {\n switch (schema.format) {\n case 'date-time':\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: compiler.identifier({ text: 'datetime' }),\n }),\n });\n break;\n case 'ipv4':\n case 'ipv6':\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: compiler.identifier({ text: 'ip' }),\n }),\n });\n break;\n case 'uri':\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: compiler.identifier({ text: 'url' }),\n }),\n });\n break;\n case 'date':\n case 'email':\n case 'time':\n case 'uuid':\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: compiler.identifier({ text: schema.format }),\n }),\n });\n break;\n }\n }\n\n if (schema.minLength === schema.maxLength && schema.minLength !== undefined) {\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: lengthIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value: schema.minLength })],\n });\n } else {\n if (schema.minLength !== undefined) {\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: minIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value: schema.minLength })],\n });\n }\n\n if (schema.maxLength !== undefined) {\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: maxIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value: schema.maxLength })],\n });\n }\n }\n\n if (schema.pattern) {\n stringExpression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: stringExpression,\n name: regexIdentifier,\n }),\n parameters: [compiler.regularExpressionLiteral({ text: schema.pattern })],\n });\n }\n\n return stringExpression;\n};\n\nconst tupleTypeToZodSchema = ({\n context,\n schema,\n}: {\n context: IR.Context;\n schema: SchemaWithType<'tuple'>;\n}) => {\n if (schema.const && Array.isArray(schema.const)) {\n const tupleElements = schema.const.map((value) =>\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: literalIdentifier,\n }),\n parameters: [compiler.valueToExpression({ value })],\n }),\n );\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: 'tuple' }),\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: tupleElements,\n }),\n ],\n });\n return expression;\n }\n\n // TODO: parser - handle tuple items\n // const itemTypes: Array<ts.TypeNode> = [];\n\n // for (const item of schema.items ?? []) {\n // itemTypes.push(\n // schemaToType({\n // context,\n // namespace,\n // plugin,\n // schema: item,\n // }),\n // );\n // }\n\n // return compiler.typeTupleNode({\n // types: itemTypes,\n // });\n\n return unknownTypeToZodSchema({\n context,\n schema: {\n type: 'unknown',\n },\n });\n};\n\nconst undefinedTypeToZodSchema = ({\n schema,\n}: {\n context: IR.Context;\n schema: SchemaWithType<'undefined'>;\n}) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: schema.type }),\n }),\n });\n return expression;\n};\n\nconst unknownTypeToZodSchema = ({\n schema,\n}: {\n context: IR.Context;\n schema: SchemaWithType<'unknown'>;\n}) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: schema.type }),\n }),\n });\n return expression;\n};\n\nconst voidTypeToZodSchema = ({\n schema,\n}: {\n context: IR.Context;\n schema: SchemaWithType<'void'>;\n}) => {\n const expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: compiler.identifier({ text: schema.type }),\n }),\n });\n return expression;\n};\n\nconst schemaTypeToZodSchema = ({\n context,\n result,\n schema,\n}: {\n context: IR.Context;\n result: Result;\n schema: IR.SchemaObject;\n}): ts.Expression => {\n switch (schema.type as Required<IR.SchemaObject>['type']) {\n case 'array':\n return arrayTypeToZodSchema({\n context,\n result,\n schema: schema as SchemaWithType<'array'>,\n });\n case 'boolean':\n return booleanTypeToZodSchema({\n context,\n schema: schema as SchemaWithType<'boolean'>,\n });\n case 'enum':\n return enumTypeToZodSchema({\n context,\n schema: schema as SchemaWithType<'enum'>,\n });\n case 'integer':\n case 'number':\n return numberTypeToZodSchema({\n context,\n schema: schema as SchemaWithType<'integer' | 'number'>,\n });\n case 'never':\n return neverTypeToZodSchema({\n context,\n schema: schema as SchemaWithType<'never'>,\n });\n case 'null':\n return nullTypeToZodSchema({\n context,\n schema: schema as SchemaWithType<'null'>,\n });\n case 'object':\n return objectTypeToZodSchema({\n context,\n result,\n schema: schema as SchemaWithType<'object'>,\n });\n case 'string':\n return stringTypeToZodSchema({\n context,\n schema: schema as SchemaWithType<'string'>,\n });\n case 'tuple':\n return tupleTypeToZodSchema({\n context,\n schema: schema as SchemaWithType<'tuple'>,\n });\n case 'undefined':\n return undefinedTypeToZodSchema({\n context,\n schema: schema as SchemaWithType<'undefined'>,\n });\n case 'unknown':\n return unknownTypeToZodSchema({\n context,\n schema: schema as SchemaWithType<'unknown'>,\n });\n case 'void':\n return voidTypeToZodSchema({\n context,\n schema: schema as SchemaWithType<'void'>,\n });\n }\n};\n\nconst operationToZodSchema = ({\n context,\n operation,\n result,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n result: Result;\n}) => {\n if (operation.responses) {\n const { response } = operationResponsesMap(operation);\n\n if (response) {\n schemaToZodSchema({\n $ref: operationIrRef({\n case: 'camelCase',\n id: operation.id,\n type: 'response',\n }),\n context,\n result,\n schema: response,\n });\n }\n }\n};\n\nconst schemaToZodSchema = ({\n $ref,\n context,\n optional,\n result,\n schema,\n}: {\n /**\n * When $ref is supplied, a node will be emitted to the file.\n */\n $ref?: string;\n context: IR.Context;\n /**\n * Accept `optional` to handle optional object properties. We can't handle\n * this inside the object function because `.optional()` must come before\n * `.default()` which is handled in this function.\n */\n optional?: boolean;\n result: Result;\n schema: IR.SchemaObject;\n}): ts.Expression => {\n const file = context.file({ id: zodId })!;\n\n let expression: ts.Expression | undefined;\n let identifier: ReturnType<typeof file.identifier> | undefined;\n\n if ($ref) {\n result.circularReferenceTracker.add($ref);\n\n identifier = file.identifier({\n $ref,\n create: true,\n nameTransformer,\n namespace: 'value',\n });\n }\n\n if (schema.$ref) {\n const isCircularReference = result.circularReferenceTracker.has(\n schema.$ref,\n );\n\n // if $ref hasn't been processed yet, inline it to avoid the\n // \"Block-scoped variable used before its declaration.\" error\n // this could be (maybe?) fixed by reshuffling the generation order\n let identifierRef = file.identifier({\n $ref: schema.$ref,\n nameTransformer,\n namespace: 'value',\n });\n\n if (!identifierRef.name) {\n const ref = context.resolveIrRef<IR.SchemaObject>(schema.$ref);\n expression = schemaToZodSchema({\n context,\n result,\n schema: ref,\n });\n\n identifierRef = file.identifier({\n $ref: schema.$ref,\n nameTransformer,\n namespace: 'value',\n });\n }\n\n // if `identifierRef.name` is falsy, we already set expression above\n if (identifierRef.name) {\n const refIdentifier = compiler.identifier({ text: identifierRef.name });\n if (isCircularReference) {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: lazyIdentifier,\n }),\n parameters: [\n compiler.arrowFunction({\n statements: [\n compiler.returnStatement({\n expression: refIdentifier,\n }),\n ],\n }),\n ],\n });\n result.hasCircularReference = true;\n } else {\n expression = refIdentifier;\n }\n }\n } else if (schema.type) {\n expression = schemaTypeToZodSchema({\n context,\n result,\n schema,\n });\n } else if (schema.items) {\n schema = deduplicateSchema({ schema });\n\n if (schema.items) {\n const itemTypes = schema.items.map((item) =>\n schemaToZodSchema({\n context,\n result,\n schema: item,\n }),\n );\n\n if (schema.logicalOperator === 'and') {\n const firstSchema = schema.items[0]!;\n // we want to add an intersection, but not every schema can use the same API.\n // if the first item contains another array or not an object, we cannot use\n // `.merge()` as that does not exist on `.union()` and non-object schemas.\n if (\n firstSchema.logicalOperator === 'or' ||\n (firstSchema.type && firstSchema.type !== 'object')\n ) {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: intersectionIdentifier,\n }),\n parameters: itemTypes,\n });\n } else {\n expression = itemTypes[0];\n itemTypes.slice(1).forEach((item) => {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: expression!,\n name: mergeIdentifier,\n }),\n parameters: [item],\n });\n });\n }\n } else {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: unionIdentifier,\n }),\n parameters: [\n compiler.arrayLiteralExpression({\n elements: itemTypes,\n }),\n ],\n });\n }\n } else {\n expression = schemaToZodSchema({\n context,\n result,\n schema,\n });\n }\n } else {\n // catch-all fallback for failed schemas\n expression = schemaTypeToZodSchema({\n context,\n result,\n schema: {\n type: 'unknown',\n },\n });\n }\n\n if ($ref) {\n result.circularReferenceTracker.delete($ref);\n }\n\n if (expression) {\n if (schema.accessScope === 'read') {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression,\n name: readonlyIdentifier,\n }),\n });\n }\n\n if (optional) {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression,\n name: optionalIdentifier,\n }),\n });\n }\n\n if (schema.default !== undefined) {\n const callParameter = compiler.valueToExpression({\n value: schema.default,\n });\n if (callParameter) {\n expression = compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression,\n name: defaultIdentifier,\n }),\n parameters: [callParameter],\n });\n }\n }\n }\n\n // emit nodes only if $ref points to a reusable component\n if (identifier?.name) {\n const statement = compiler.constVariable({\n exportConst: true,\n expression: expression!,\n name: identifier.name,\n typeName: result.hasCircularReference\n ? (compiler.propertyAccessExpression({\n expression: zIdentifier,\n name: 'ZodTypeAny',\n }) as unknown as ts.TypeNode)\n : undefined,\n });\n file.add(statement);\n }\n\n return expression!;\n};\n\nexport const handler: Plugin.Handler<Config> = ({ context, plugin }) => {\n const file = context.createFile({\n exportFromIndex: plugin.exportFromIndex,\n id: zodId,\n identifierCase: 'camelCase',\n path: plugin.output,\n });\n\n file.import({\n module: 'zod',\n name: 'z',\n });\n\n context.subscribe('operation', ({ operation }) => {\n const result: Result = {\n circularReferenceTracker: new Set(),\n hasCircularReference: false,\n };\n\n operationToZodSchema({\n context,\n operation,\n result,\n });\n });\n\n context.subscribe('schema', ({ $ref, schema }) => {\n const result: Result = {\n circularReferenceTracker: new Set(),\n hasCircularReference: false,\n };\n\n schemaToZodSchema({\n $ref,\n context,\n result,\n schema,\n });\n });\n};\n","import ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport { operationResponsesMap } from '../../../ir/operation';\nimport type { IR } from '../../../ir/types';\nimport { irRef } from '../../../utils/ref';\nimport { stringCase } from '../../../utils/stringCase';\nimport { operationIrRef } from '../../shared/utils/ref';\nimport type { Plugin } from '../../types';\nimport { typesId } from '../typescript/ref';\nimport type { Config } from './types';\n\ninterface OperationIRRef {\n /**\n * Operation ID\n */\n id: string;\n}\n\nconst bigIntExpressions = ({\n dataExpression,\n}: {\n dataExpression?: ts.Expression | string;\n}): Array<ts.Expression> => {\n const bigIntCallExpression =\n dataExpression !== undefined\n ? compiler.callExpression({\n functionName: 'BigInt',\n parameters: [\n compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: dataExpression,\n name: 'toString',\n }),\n }),\n ],\n })\n : undefined;\n\n if (bigIntCallExpression) {\n if (typeof dataExpression === 'string') {\n return [bigIntCallExpression];\n }\n\n if (dataExpression) {\n return [\n compiler.assignment({\n left: dataExpression,\n right: bigIntCallExpression,\n }),\n ];\n }\n }\n\n return [];\n};\n\nconst dateExpressions = ({\n dataExpression,\n}: {\n dataExpression?: ts.Expression | string;\n}): Array<ts.Expression> => {\n const identifierDate = compiler.identifier({ text: 'Date' });\n\n if (typeof dataExpression === 'string') {\n return [\n compiler.newExpression({\n argumentsArray: [compiler.identifier({ text: dataExpression })],\n expression: identifierDate,\n }),\n ];\n }\n\n if (dataExpression) {\n return [\n compiler.assignment({\n left: dataExpression,\n right: compiler.newExpression({\n argumentsArray: [dataExpression],\n expression: identifierDate,\n }),\n }),\n ];\n }\n\n return [];\n};\n\nexport const operationTransformerIrRef = ({\n id,\n type,\n}: OperationIRRef & {\n type: 'data' | 'error' | 'response';\n}): string => {\n let affix = '';\n switch (type) {\n case 'data':\n affix = 'DataResponseTransformer';\n break;\n case 'error':\n affix = 'ErrorResponseTransformer';\n break;\n case 'response':\n affix = 'ResponseTransformer';\n break;\n }\n return `${irRef}${stringCase({\n // TODO: parser - do not pascalcase for functions, only for types\n case: 'camelCase',\n value: id,\n })}${affix}`;\n};\n\nconst schemaIrRef = ({\n $ref,\n type,\n}: {\n $ref: string;\n type: 'response';\n}): string => {\n let affix = '';\n switch (type) {\n case 'response':\n affix = 'SchemaResponseTransformer';\n break;\n }\n const parts = $ref.split('/');\n return `${parts.slice(0, parts.length - 1).join('/')}/${stringCase({\n case: 'camelCase',\n value: parts[parts.length - 1]!,\n })}${affix}`;\n};\n\nexport const schemaResponseTransformerRef = ({\n $ref,\n}: {\n $ref: string;\n}): string => schemaIrRef({ $ref, type: 'response' });\n\nexport const transformersId = 'transformers';\nconst dataVariableName = 'data';\n\nconst ensureStatements = (\n nodes: Array<ts.Expression | ts.Statement>,\n): Array<ts.Statement> =>\n nodes.map((node) =>\n ts.isStatement(node)\n ? node\n : compiler.expressionToStatement({ expression: node }),\n );\n\nconst isNodeReturnStatement = ({\n node,\n}: {\n node: ts.Expression | ts.Statement;\n}) => node.kind === ts.SyntaxKind.ReturnStatement;\n\nconst schemaResponseTransformerNodes = ({\n context,\n plugin,\n schema,\n}: {\n context: IR.Context;\n plugin: Plugin.Instance<Config>;\n schema: IR.SchemaObject;\n}): Array<ts.Expression | ts.Statement> => {\n const identifierData = compiler.identifier({ text: dataVariableName });\n const nodes = processSchemaType({\n context,\n dataExpression: identifierData,\n plugin,\n schema,\n });\n // append return statement if one does not already exist\n if (\n nodes.length &&\n !isNodeReturnStatement({ node: nodes[nodes.length - 1]! })\n ) {\n nodes.push(compiler.returnStatement({ expression: identifierData }));\n }\n return nodes;\n};\n\nconst processSchemaType = ({\n context,\n dataExpression,\n plugin,\n schema,\n}: {\n context: IR.Context;\n dataExpression?: ts.Expression | string;\n plugin: Plugin.Instance<Config>;\n schema: IR.SchemaObject;\n}): Array<ts.Expression | ts.Statement> => {\n const file = context.file({ id: transformersId })!;\n\n if (schema.$ref) {\n let identifier = file.identifier({\n $ref: schemaResponseTransformerRef({ $ref: schema.$ref }),\n create: true,\n namespace: 'value',\n });\n\n if (identifier.created && identifier.name) {\n // create each schema response transformer only once\n const refSchema = context.resolveIrRef<IR.SchemaObject>(schema.$ref);\n const nodes = schemaResponseTransformerNodes({\n context,\n plugin,\n schema: refSchema,\n });\n if (nodes.length) {\n const node = compiler.constVariable({\n expression: compiler.arrowFunction({\n async: false,\n multiLine: true,\n parameters: [\n {\n name: dataVariableName,\n // TODO: parser - add types, generate types without transforms\n type: compiler.keywordTypeNode({ keyword: 'any' }),\n },\n ],\n statements: ensureStatements(nodes),\n }),\n name: identifier.name,\n });\n file.add(node);\n } else {\n // the created schema response transformer was empty, do not generate\n // it and prevent any future attempts\n identifier = file.blockIdentifier({\n $ref: schemaResponseTransformerRef({ $ref: schema.$ref }),\n namespace: 'value',\n });\n }\n }\n\n if (identifier.name) {\n const callExpression = compiler.callExpression({\n functionName: identifier.name,\n parameters: [dataExpression],\n });\n\n if (dataExpression) {\n // In a map callback, the item needs to be returned, not just the transformation result\n if (typeof dataExpression === 'string' && dataExpression === 'item') {\n return [\n compiler.returnStatement({\n expression: callExpression,\n }),\n ];\n }\n\n return [\n typeof dataExpression === 'string'\n ? callExpression\n : compiler.assignment({\n left: dataExpression,\n right: callExpression,\n }),\n ];\n }\n }\n\n return [];\n }\n\n if (schema.type === 'array') {\n if (!dataExpression || typeof dataExpression === 'string') {\n return [];\n }\n\n // TODO: parser - handle tuples and complex arrays\n const nodes = !schema.items\n ? []\n : processSchemaType({\n context,\n dataExpression: 'item',\n plugin,\n schema: schema.items?.[0]\n ? schema.items[0]\n : {\n ...schema,\n type: undefined,\n },\n });\n\n if (!nodes.length) {\n return [];\n }\n\n // Ensure the map callback has a return statement for the item\n const mapCallbackStatements = ensureStatements(nodes);\n const hasReturnStatement = mapCallbackStatements.some((stmt) =>\n isNodeReturnStatement({ node: stmt }),\n );\n\n if (!hasReturnStatement) {\n mapCallbackStatements.push(\n compiler.returnStatement({\n expression: compiler.identifier({ text: 'item' }),\n }),\n );\n }\n\n return [\n compiler.assignment({\n left: dataExpression,\n right: compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: dataExpression,\n name: 'map',\n }),\n parameters: [\n compiler.arrowFunction({\n multiLine: true,\n parameters: [\n {\n name: 'item',\n type: 'any',\n },\n ],\n statements: mapCallbackStatements,\n }),\n ],\n }),\n }),\n ];\n }\n\n if (schema.type === 'object') {\n let nodes: Array<ts.Expression | ts.Statement> = [];\n const required = schema.required ?? [];\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n const propertyAccessExpression = compiler.propertyAccessExpression({\n expression: dataExpression || dataVariableName,\n name,\n });\n const propertyNodes = processSchemaType({\n context,\n dataExpression: propertyAccessExpression,\n plugin,\n schema: property,\n });\n if (!propertyNodes.length) {\n continue;\n }\n const noNullableTypesInSchema = !property.items?.find(\n (x) => x.type === 'null',\n );\n const requiredField = required.includes(name);\n // Cannot fully rely on required fields\n // Such value has to be present, but it doesn't guarantee that this value is not nullish\n if (requiredField && noNullableTypesInSchema) {\n nodes = nodes.concat(propertyNodes);\n } else {\n nodes.push(\n // todo: Probably, it would make more sense to go with if(x !== undefined && x !== null) instead of if(x)\n // this place influences all underlying transformers, while it's not exactly transformer itself\n // Keep in mind that !!0 === false, so it already makes output for Bigint undesirable\n compiler.ifStatement({\n expression: propertyAccessExpression,\n thenStatement: compiler.block({\n statements: ensureStatements(propertyNodes),\n }),\n }),\n );\n }\n }\n\n return nodes;\n }\n\n if (\n plugin.dates &&\n schema.type === 'string' &&\n (schema.format === 'date' || schema.format === 'date-time')\n ) {\n return dateExpressions({ dataExpression });\n }\n\n if (plugin.bigInt && schema.type === 'integer' && schema.format === 'int64') {\n return bigIntExpressions({ dataExpression });\n }\n\n if (schema.items) {\n if (schema.items.length === 1) {\n return processSchemaType({\n context,\n dataExpression: 'item',\n plugin,\n schema: schema.items[0]!,\n });\n }\n\n let arrayNodes: Array<ts.Expression | ts.Statement> = [];\n // process 2 items if one of them is null\n if (\n schema.logicalOperator === 'and' ||\n (schema.items.length === 2 &&\n schema.items.find(\n (item) => item.type === 'null' || item.type === 'void',\n ))\n ) {\n for (const item of schema.items) {\n const nodes = processSchemaType({\n context,\n dataExpression: dataExpression || 'item',\n plugin,\n schema: item,\n });\n if (nodes.length) {\n if (dataExpression) {\n arrayNodes = arrayNodes.concat(nodes);\n } else {\n const identifierItem = compiler.identifier({ text: 'item' });\n // processed means the item was transformed\n arrayNodes.push(\n compiler.ifStatement({\n expression: identifierItem,\n thenStatement: compiler.block({\n statements: ensureStatements(nodes),\n }),\n }),\n compiler.returnStatement({ expression: identifierItem }),\n );\n }\n }\n }\n return arrayNodes;\n }\n\n // assume enums do not contain transformable values\n if (schema.type !== 'enum') {\n console.warn(\n `❗️ Transformers warning: schema ${JSON.stringify(schema)} is too complex and won't be currently processed. This will likely produce an incomplete transformer which is not what you want. Please open an issue if you'd like this improved https://github.com/hey-api/openapi-ts/issues`,\n );\n }\n }\n\n return [];\n};\n\n// handles only response transformers for now\nexport const handler: Plugin.Handler<Config> = ({ context, plugin }) => {\n const file = context.createFile({\n exportFromIndex: plugin.exportFromIndex,\n id: transformersId,\n path: plugin.output,\n });\n\n context.subscribe('operation', ({ operation }) => {\n const { response } = operationResponsesMap(operation);\n\n if (!response) {\n return;\n }\n\n if (response.items && response.items.length > 1) {\n if (context.config.logs.level === 'debug') {\n console.warn(\n `❗️ Transformers warning: route ${`${operation.method.toUpperCase()} ${operation.path}`} has ${response.items.length} non-void success responses. This is currently not handled and we will not generate a response transformer. Please open an issue if you'd like this feature https://github.com/hey-api/openapi-ts/issues`,\n );\n }\n return;\n }\n\n const identifierResponse = context.file({ id: typesId })!.identifier({\n $ref: operationIrRef({ id: operation.id, type: 'response' }),\n namespace: 'type',\n });\n if (!identifierResponse.name) {\n return;\n }\n\n let identifierResponseTransformer = file.identifier({\n $ref: operationTransformerIrRef({ id: operation.id, type: 'response' }),\n create: true,\n namespace: 'value',\n });\n if (!identifierResponseTransformer.name) {\n return;\n }\n\n // TODO: parser - consider handling simple string response which is also a date\n const nodes = schemaResponseTransformerNodes({\n context,\n plugin,\n schema: response,\n });\n if (nodes.length) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierResponse.name,\n });\n const responseTransformerNode = compiler.constVariable({\n exportConst: true,\n expression: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n name: dataVariableName,\n // TODO: parser - add types, generate types without transforms\n type: compiler.keywordTypeNode({ keyword: 'any' }),\n },\n ],\n returnType: compiler.typeReferenceNode({\n typeArguments: [\n compiler.typeReferenceNode({\n typeName: identifierResponse.name,\n }),\n ],\n typeName: 'Promise',\n }),\n statements: ensureStatements(nodes),\n }),\n name: identifierResponseTransformer.name,\n });\n file.add(responseTransformerNode);\n } else {\n // the created schema response transformer was empty, do not generate\n // it and prevent any future attempts\n identifierResponseTransformer = file.blockIdentifier({\n $ref: operationTransformerIrRef({\n id: operation.id,\n type: 'response',\n }),\n namespace: 'value',\n });\n }\n });\n};\n","export const nuxtTypeComposable = 'TComposable';\nexport const nuxtTypeDefault = 'DefaultT';\nexport const nuxtTypeResponse = 'ResT';\n","import type {\n ClassElement,\n Comments,\n FunctionParameter,\n Node,\n} from '../../../compiler';\nimport { compiler } from '../../../compiler';\nimport type {\n FunctionTypeParameter,\n ObjectValue,\n} from '../../../compiler/types';\nimport { clientApi, clientModulePath } from '../../../generate/client';\nimport { TypeScriptFile } from '../../../generate/files';\nimport type { IR } from '../../../ir/types';\nimport { isOperationParameterRequired } from '../../../openApi';\nimport type {\n Client,\n Model,\n Operation,\n OperationParameter,\n Service,\n} from '../../../types/client';\nimport type { Config as ClientConfig } from '../../../types/config';\nimport {\n getConfig,\n isLegacyClient,\n legacyNameFromConfig,\n} from '../../../utils/config';\nimport { escapeComment, escapeName } from '../../../utils/escape';\nimport { reservedJavaScriptKeywordsRegExp } from '../../../utils/regexp';\nimport { stringCase } from '../../../utils/stringCase';\nimport { transformServiceName } from '../../../utils/transform';\nimport { setUniqueTypeName } from '../../../utils/type';\nimport { unique } from '../../../utils/unique';\nimport type { Plugin } from '../../types';\nimport { getClientPlugin } from '../client-core/utils';\nimport type { Config } from './types';\n\ntype OnNode = (node: Node) => void;\ntype OnImport = (name: string) => void;\n\nexport const generateImport = ({\n meta,\n onImport,\n ...setUniqueTypeNameArgs\n}: Pick<Parameters<typeof setUniqueTypeName>[0], 'client' | 'nameTransformer'> &\n Pick<Model, 'meta'> & {\n onImport: OnImport;\n }) => {\n // generate imports only for top-level models\n if (!meta) {\n // TODO: this used to return undefined. We could refactor this function to\n // return undefined again, but we will need to improve types so we can safely\n // do `const { name } = generateImport({ meta: ... })` (note when meta is defined\n // we guarantee the response to be an object). For now, nothing relies on this\n // response shape except for plugins, so it was acceptable to patch it that way\n return { created: false, name: '' };\n }\n\n const { created, name } = setUniqueTypeName({\n meta,\n ...setUniqueTypeNameArgs,\n });\n if (name) {\n onImport(name);\n }\n return { created, name };\n};\n\nexport const modelResponseTransformerTypeName = (name: string) =>\n `${name}ModelResponseTransformer`;\n\nexport const operationDataTypeName = (name: string) =>\n `${stringCase({\n case: 'PascalCase',\n value: name,\n })}Data`;\n\nexport const operationErrorTypeName = (name: string) =>\n `${stringCase({\n case: 'PascalCase',\n value: name,\n })}Error`;\n\n// operation response type ends with \"Response\", it's enough to append \"Transformer\"\nexport const operationResponseTransformerTypeName = (name: string) =>\n `${name}Transformer`;\n\nexport const operationResponseTypeName = (name: string) =>\n `${stringCase({\n case: 'PascalCase',\n value: name,\n })}Response`;\n\n/**\n * @param importedType unique type name returned from `setUniqueTypeName()`\n * @returns options type\n */\nexport const operationOptionsLegacyParserType = ({\n importedType,\n throwOnError,\n}: {\n importedType?: string | false;\n throwOnError?: string;\n}) => {\n const optionsName = clientApi.OptionsLegacyParser.name;\n // TODO: refactor this to be more generic, works for now\n if (throwOnError) {\n return `${optionsName}<${importedType || 'unknown'}, ${throwOnError}>`;\n }\n return importedType ? `${optionsName}<${importedType}>` : optionsName;\n};\n\nconst toOperationParamType = (\n client: Client,\n operation: Operation,\n): FunctionParameter[] => {\n const config = getConfig();\n\n const { name: importedType } = setUniqueTypeName({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationDataTypeName,\n });\n\n const isRequired = isOperationParameterRequired(operation.parameters);\n\n if (!isLegacyClient(config)) {\n return [\n {\n isRequired,\n name: 'options',\n type: operationOptionsLegacyParserType({\n importedType,\n throwOnError: 'ThrowOnError',\n }),\n },\n ];\n }\n\n if (!operation.parameters.length) {\n return [];\n }\n\n const getDefaultPrintable = (\n p: OperationParameter | Model,\n ): string | undefined => {\n if (p.default === undefined) {\n return undefined;\n }\n return JSON.stringify(p.default, null, 4);\n };\n\n // legacy configuration\n if (!config.useOptions) {\n return operation.parameters.map((p) => {\n const typePath = `${importedType}['${p.name}']`;\n return {\n default: p?.default,\n isRequired:\n (!p.isRequired && !getDefaultPrintable(p) ? '?' : '') === '',\n name: p.name,\n type: typePath,\n };\n });\n }\n\n return [\n {\n default: isRequired ? undefined : {},\n name: 'data',\n type: importedType,\n },\n ];\n};\n\nconst toOperationReturnType = (client: Client, operation: Operation) => {\n const config = getConfig();\n\n let returnType = compiler.typeNode('void');\n\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n\n // TODO: we should return nothing when successes don't exist\n // can't remove this logic without removing request/name config\n // as it complicates things\n if (successResponses.length) {\n const { name: importedType } = setUniqueTypeName({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationResponseTypeName,\n });\n returnType = compiler.typeUnionNode({\n types: [importedType],\n });\n }\n\n if (\n config.useOptions &&\n config.plugins['@hey-api/sdk']?.response === 'response'\n ) {\n returnType = compiler.typeNode('ApiResult', [returnType]);\n }\n\n const clientPlugin = getClientPlugin(config);\n if (clientPlugin.name === 'legacy/angular') {\n returnType = compiler.typeNode('Observable', [returnType]);\n } else {\n returnType = compiler.typeNode('CancelablePromise', [returnType]);\n }\n\n return returnType;\n};\n\nconst toOperationComment = (operation: Operation): Comments => {\n const config = getConfig();\n\n if (!isLegacyClient(config)) {\n const comment = [\n operation.deprecated && '@deprecated',\n operation.summary && escapeComment(operation.summary),\n operation.description && escapeComment(operation.description),\n ];\n return comment;\n }\n\n let params: string[] = [];\n\n if (operation.parameters.length) {\n if (config.useOptions) {\n params = [\n '@param data The data for the request.',\n ...operation.parameters.map(\n (parameter) =>\n `@param data.${parameter.name} ${parameter.description ? escapeComment(parameter.description) : ''}`,\n ),\n ];\n } else {\n params = operation.parameters.map(\n (parameter) =>\n `@param ${parameter.name} ${parameter.description ? escapeComment(parameter.description) : ''}`,\n );\n }\n }\n\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n\n const comment = [\n operation.deprecated && '@deprecated',\n operation.summary && escapeComment(operation.summary),\n operation.description && escapeComment(operation.description),\n ...params,\n ...successResponses.map(\n (response) =>\n `@returns ${response.type} ${response.description ? escapeComment(response.description) : ''}`,\n ),\n '@throws ApiError',\n ];\n return comment;\n};\n\nconst toRequestOptions = ({\n client,\n onClientImport,\n onImport,\n operation,\n}: {\n client: Client;\n onClientImport: OnImport | undefined;\n onImport: OnImport;\n operation: Operation;\n}) => {\n const config = getConfig();\n\n const name = operationResponseTypeName(operation.name);\n const { name: responseTransformerName } = setUniqueTypeName({\n client,\n meta: {\n $ref: `transformers/${name}`,\n name,\n },\n nameTransformer: operationResponseTransformerTypeName,\n });\n\n if (responseTransformerName) {\n onImport(responseTransformerName);\n }\n\n if (!isLegacyClient(config)) {\n let obj: ObjectValue[] = [\n {\n spread: 'options',\n },\n ];\n\n const bodyParameters = operation.parameters.filter(\n (parameter) => parameter.in === 'body' || parameter.in === 'formData',\n );\n const contents = bodyParameters\n .map(\n (parameter) =>\n parameter.mediaType ||\n (parameter.in === 'formData' ? 'multipart/form-data' : undefined),\n )\n .filter(Boolean)\n .filter(unique);\n if (contents.length === 1) {\n if (contents[0] === 'multipart/form-data') {\n obj = [\n ...obj,\n {\n spread: 'formDataBodySerializer',\n },\n {\n key: 'headers',\n value: [\n {\n // no need for Content-Type header, browser will set it automatically\n key: 'Content-Type',\n value: null,\n },\n {\n spread: 'options?.headers',\n },\n ],\n },\n ];\n onClientImport?.('formDataBodySerializer');\n }\n\n if (contents[0] === 'application/x-www-form-urlencoded') {\n obj = [\n ...obj,\n {\n spread: 'urlSearchParamsBodySerializer',\n },\n {\n key: 'headers',\n value: [\n {\n key: 'Content-Type',\n value: contents[0],\n },\n {\n spread: 'options?.headers',\n },\n ],\n },\n ];\n onClientImport?.('urlSearchParamsBodySerializer');\n }\n }\n\n // TODO: set parseAs to skip inference if every result has the same\n // content type. currently impossible because successes do not contain\n // header information\n\n obj = [\n ...obj,\n {\n key: 'url',\n value: operation.path,\n },\n ];\n\n if (responseTransformerName) {\n obj = [\n ...obj,\n {\n key: 'responseTransformer',\n value: responseTransformerName,\n },\n ];\n }\n\n return compiler.objectExpression({\n identifiers: ['responseTransformer'],\n obj,\n });\n }\n\n const toObj = (parameters: OperationParameter[]) =>\n parameters.reduce(\n (prev, curr) => {\n const key = curr.prop;\n const value = config.useOptions ? `data.${curr.name}` : curr.name;\n if (key === value) {\n prev[key] = key;\n } else if (escapeName(key) === key) {\n prev[key] = value;\n } else {\n prev[`'${key}'`] = value;\n }\n return prev;\n },\n {} as Record<string, unknown>,\n );\n\n const obj: Record<string, any> = {\n method: operation.method,\n url: operation.path,\n };\n\n if (operation.parametersPath.length) {\n obj.path = toObj(operation.parametersPath);\n }\n\n if (operation.parametersCookie.length) {\n obj.cookies = toObj(operation.parametersCookie);\n }\n\n if (operation.parametersHeader.length) {\n obj.headers = toObj(operation.parametersHeader);\n }\n\n if (operation.parametersQuery.length) {\n obj.query = toObj(operation.parametersQuery);\n }\n\n if (operation.parametersForm.length) {\n obj.formData = toObj(operation.parametersForm);\n }\n\n if (operation.parametersBody) {\n if (operation.parametersBody.in === 'formData') {\n if (config.useOptions) {\n obj.formData = `data.${operation.parametersBody.name}`;\n } else {\n obj.formData = operation.parametersBody.name;\n }\n }\n if (operation.parametersBody.in === 'body') {\n if (config.useOptions) {\n obj.body = `data.${operation.parametersBody.name}`;\n } else {\n obj.body = operation.parametersBody.name;\n }\n }\n }\n\n if (operation.parametersBody?.mediaType) {\n obj.mediaType = operation.parametersBody?.mediaType;\n }\n\n if (operation.responseHeader) {\n obj.responseHeader = operation.responseHeader;\n }\n\n if (responseTransformerName) {\n obj.responseTransformer = responseTransformerName;\n }\n\n const errorResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('error'),\n );\n if (errorResponses.length > 0) {\n const errors: Record<number | string, string> = {};\n errorResponses.forEach((response) => {\n errors[response.code] = response.description ?? '';\n });\n obj.errors = errors;\n }\n\n return compiler.objectExpression({\n identifiers: [\n 'body',\n 'cookies',\n 'formData',\n 'headers',\n 'path',\n 'query',\n 'responseTransformer',\n ],\n obj,\n shorthand: true,\n });\n};\n\nexport const serviceFunctionIdentifier = ({\n config,\n handleIllegal,\n id,\n operation,\n}: {\n config: ClientConfig;\n handleIllegal?: boolean;\n id: string;\n operation: IR.OperationObject | Operation;\n}) => {\n if (config.plugins['@hey-api/sdk']?.methodNameBuilder) {\n return config.plugins['@hey-api/sdk'].methodNameBuilder(operation);\n }\n\n if (handleIllegal && id.match(reservedJavaScriptKeywordsRegExp)) {\n return `${id}_`;\n }\n\n return id;\n};\n\nconst toOperationStatements = ({\n client,\n onClientImport,\n onImport,\n operation,\n}: {\n client: Client;\n onClientImport?: OnImport;\n onImport: OnImport;\n operation: Operation;\n}) => {\n const config = getConfig();\n\n const options = toRequestOptions({\n client,\n onClientImport,\n onImport,\n operation,\n });\n\n if (!isLegacyClient(config)) {\n const errorType = setUniqueTypeName({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationErrorTypeName,\n }).name;\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n const responseType = successResponses.length\n ? setUniqueTypeName({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationResponseTypeName,\n }).name\n : 'void';\n return [\n compiler.returnFunctionCall({\n args: [options],\n name: `(options?.client ?? client).${operation.method.toLocaleLowerCase()}`,\n types:\n errorType && responseType\n ? [responseType, errorType, 'ThrowOnError']\n : errorType\n ? ['unknown', errorType, 'ThrowOnError']\n : responseType\n ? [responseType, 'unknown', 'ThrowOnError']\n : [],\n }),\n ];\n }\n\n if (legacyNameFromConfig(config)) {\n return [\n compiler.returnFunctionCall({\n args: [options],\n name: 'this.httpRequest.request',\n }),\n ];\n }\n\n const clientPlugin = getClientPlugin(config);\n if (clientPlugin.name === 'legacy/angular') {\n return [\n compiler.returnFunctionCall({\n args: ['OpenAPI', 'this.http', options],\n name: '__request',\n }),\n ];\n }\n\n return [\n compiler.returnFunctionCall({\n args: ['OpenAPI', options],\n name: '__request',\n }),\n ];\n};\n\nconst processService = ({\n client,\n onClientImport,\n onImport,\n onNode,\n service,\n}: {\n client: Client;\n onClientImport: OnImport;\n onImport: OnImport;\n onNode: OnNode;\n service: Service;\n}) => {\n const config = getConfig();\n\n const clientPlugin = getClientPlugin(config);\n const isLegacy = isLegacyClient(config);\n\n for (const operation of service.operations) {\n if (operation.parameters.length) {\n generateImport({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationDataTypeName,\n onImport,\n });\n }\n\n if (!isLegacy) {\n generateImport({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationErrorTypeName,\n onImport,\n });\n }\n\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n if (successResponses.length) {\n generateImport({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationResponseTypeName,\n onImport,\n });\n }\n }\n\n const throwOnErrorTypeGeneric: FunctionTypeParameter = {\n default:\n ('throwOnError' in clientPlugin ? clientPlugin.throwOnError : false) ??\n false,\n extends: 'boolean',\n name: 'ThrowOnError',\n };\n\n if (\n !config.plugins['@hey-api/sdk']?.asClass &&\n !legacyNameFromConfig(config)\n ) {\n for (const operation of service.operations) {\n const compileFunctionParams = {\n parameters: toOperationParamType(client, operation),\n returnType: !isLegacy\n ? undefined\n : toOperationReturnType(client, operation),\n statements: toOperationStatements({\n client,\n onClientImport,\n onImport,\n operation,\n }),\n types: !isLegacy ? [throwOnErrorTypeGeneric] : undefined,\n };\n const expression =\n clientPlugin.name === 'legacy/angular'\n ? compiler.anonymousFunction(compileFunctionParams)\n : compiler.arrowFunction(compileFunctionParams);\n const statement = compiler.constVariable({\n comment: toOperationComment(operation),\n exportConst: true,\n expression,\n name: serviceFunctionIdentifier({\n config,\n handleIllegal: true,\n id: operation.name,\n operation,\n }),\n });\n onNode(statement);\n }\n return;\n }\n\n let members: ClassElement[] = service.operations.map((operation) => {\n const node = compiler.methodDeclaration({\n accessLevel: 'public',\n comment: toOperationComment(operation),\n isStatic:\n legacyNameFromConfig(config) === undefined &&\n clientPlugin.name !== 'legacy/angular',\n name: serviceFunctionIdentifier({\n config,\n id: operation.name,\n operation,\n }),\n parameters: toOperationParamType(client, operation),\n returnType: !isLegacy\n ? undefined\n : toOperationReturnType(client, operation),\n statements: toOperationStatements({\n client,\n onClientImport,\n onImport,\n operation,\n }),\n types: !isLegacy ? [throwOnErrorTypeGeneric] : undefined,\n });\n return node;\n });\n\n if (!members.length) {\n return;\n }\n\n // Push constructor to front if needed\n if (legacyNameFromConfig(config)) {\n members = [\n compiler.constructorDeclaration({\n multiLine: false,\n parameters: [\n {\n accessLevel: 'public',\n isReadOnly: true,\n name: 'httpRequest',\n type: 'BaseHttpRequest',\n },\n ],\n }),\n ...members,\n ];\n } else if (clientPlugin.name === 'legacy/angular') {\n members = [\n compiler.constructorDeclaration({\n multiLine: false,\n parameters: [\n {\n accessLevel: 'public',\n isReadOnly: true,\n name: 'http',\n type: 'HttpClient',\n },\n ],\n }),\n ...members,\n ];\n }\n\n const statement = compiler.classDeclaration({\n decorator:\n clientPlugin.name === 'legacy/angular'\n ? { args: [{ providedIn: 'root' }], name: 'Injectable' }\n : undefined,\n members,\n name: transformServiceName({\n config,\n name: service.name,\n }),\n });\n onNode(statement);\n};\n\nexport const handlerLegacy: Plugin.LegacyHandler<Config> = ({\n client,\n files,\n}) => {\n const config = getConfig();\n\n const isLegacy = isLegacyClient(config);\n\n const sdkOutput = 'sdk';\n\n files.sdk = new TypeScriptFile({\n dir: config.output.path,\n name: `${sdkOutput}.ts`,\n });\n\n // Import required packages and core files.\n if (!isLegacy) {\n files.sdk.import({\n module: clientModulePath({ config, sourceOutput: sdkOutput }),\n name: 'createClient',\n });\n files.sdk.import({\n module: clientModulePath({ config, sourceOutput: sdkOutput }),\n name: 'createConfig',\n });\n files.sdk.import({\n ...clientApi.OptionsLegacyParser,\n module: clientModulePath({ config, sourceOutput: sdkOutput }),\n });\n } else {\n const clientPlugin = getClientPlugin(config);\n if (clientPlugin.name === 'legacy/angular') {\n files.sdk.import({\n module: '@angular/core',\n name: 'Injectable',\n });\n\n if (!legacyNameFromConfig(config)) {\n files.sdk.import({\n module: '@angular/common/http',\n name: 'HttpClient',\n });\n }\n\n files.sdk.import({\n asType: true,\n module: 'rxjs',\n name: 'Observable',\n });\n } else {\n files.sdk.import({\n asType: true,\n module: './core/CancelablePromise',\n name: 'CancelablePromise',\n });\n }\n\n if (config.plugins['@hey-api/sdk']?.response === 'response') {\n files.sdk.import({\n asType: true,\n module: './core/ApiResult',\n name: 'ApiResult',\n });\n }\n\n if (legacyNameFromConfig(config)) {\n const clientPlugin = getClientPlugin(config);\n files.sdk.import({\n asType: clientPlugin.name !== 'legacy/angular',\n module: './core/BaseHttpRequest',\n name: 'BaseHttpRequest',\n });\n } else {\n files.sdk.import({\n module: './core/OpenAPI',\n name: 'OpenAPI',\n });\n files.sdk.import({\n alias: '__request',\n module: './core/request',\n name: 'request',\n });\n }\n }\n\n // define client first\n if (!isLegacy) {\n const clientPlugin = getClientPlugin(config);\n const statement = compiler.constVariable({\n exportConst: true,\n expression: compiler.callExpression({\n functionName: 'createClient',\n parameters: [\n compiler.callExpression({\n functionName: 'createConfig',\n parameters: [\n 'throwOnError' in clientPlugin && clientPlugin.throwOnError\n ? compiler.objectExpression({\n obj: [\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n })\n : undefined,\n ],\n }),\n ],\n }),\n name: 'client',\n });\n files.sdk.add(statement);\n }\n\n for (const service of client.services) {\n processService({\n client,\n onClientImport: (imported) => {\n files.sdk!.import({\n module: clientModulePath({ config, sourceOutput: sdkOutput }),\n name: imported,\n });\n },\n onImport: (imported) => {\n files.sdk!.import({\n // this detection could be done safer, but it shouldn't cause any issues\n asType: !imported.endsWith('Transformer'),\n module: `./${files.types!.nameWithoutExtension()}`,\n name: imported,\n });\n },\n onNode: (node) => {\n files.sdk!.add(node);\n },\n service,\n });\n }\n};\n","import { compiler } from '../../../compiler';\nimport { clientModulePath } from '../../../generate/client';\nimport type { FileImportResult } from '../../../generate/files';\nimport type { IR } from '../../../ir/types';\nimport type { Plugin } from '../../types';\nimport { getClientPlugin } from '../client-core/utils';\nimport { nuxtTypeDefault, nuxtTypeResponse } from './constants';\nimport { sdkId } from './plugin';\nimport type { Config } from './types';\n\nexport const createTypeOptions = ({\n clientOptions,\n context,\n plugin,\n}: {\n clientOptions: FileImportResult;\n context: IR.Context;\n plugin: Plugin.Instance<Config>;\n}) => {\n const file = context.file({ id: sdkId })!;\n const client = getClientPlugin(context.config);\n const isNuxtClient = client.name === '@hey-api/client-nuxt';\n\n const clientModule = clientModulePath({\n config: context.config,\n sourceOutput: file.nameWithoutExtension(),\n });\n const tDataShape = file.import({\n asType: true,\n module: clientModule,\n name: 'TDataShape',\n });\n const clientType = file.import({\n asType: true,\n module: clientModule,\n name: 'Client',\n });\n\n const typeOptions = compiler.typeAliasDeclaration({\n exportType: true,\n name: 'Options',\n type: compiler.typeIntersectionNode({\n types: [\n compiler.typeReferenceNode({\n typeArguments: isNuxtClient\n ? [\n compiler.typeReferenceNode({ typeName: 'TComposable' }),\n compiler.typeReferenceNode({ typeName: 'TData' }),\n compiler.typeReferenceNode({ typeName: nuxtTypeResponse }),\n compiler.typeReferenceNode({ typeName: nuxtTypeDefault }),\n ]\n : [\n compiler.typeReferenceNode({ typeName: 'TData' }),\n compiler.typeReferenceNode({ typeName: 'ThrowOnError' }),\n ],\n typeName: clientOptions.name,\n }),\n compiler.typeInterfaceNode({\n properties: [\n {\n comment: [\n 'You can provide a client instance returned by `createClient()` instead of',\n 'individual options. This might be also useful if you want to implement a',\n 'custom client.',\n ],\n isRequired: !plugin.client,\n name: 'client',\n type: compiler.typeReferenceNode({ typeName: clientType.name }),\n },\n {\n comment: [\n 'You can pass arbitrary values through the `meta` object. This can be',\n \"used to access values that aren't defined as part of the SDK function.\",\n ],\n isRequired: false,\n name: 'meta',\n type: compiler.typeReferenceNode({\n typeArguments: [\n compiler.keywordTypeNode({ keyword: 'string' }),\n compiler.keywordTypeNode({ keyword: 'unknown' }),\n ],\n typeName: 'Record',\n }),\n },\n ],\n useLegacyResolution: false,\n }),\n ],\n }),\n typeParameters: isNuxtClient\n ? [\n compiler.typeParameterDeclaration({\n constraint: compiler.typeReferenceNode({ typeName: 'Composable' }),\n name: 'TComposable',\n }),\n compiler.typeParameterDeclaration({\n constraint: compiler.typeReferenceNode({\n typeName: tDataShape.name,\n }),\n defaultType: compiler.typeReferenceNode({\n typeName: tDataShape.name,\n }),\n name: 'TData',\n }),\n compiler.typeParameterDeclaration({\n defaultType: compiler.keywordTypeNode({ keyword: 'unknown' }),\n name: nuxtTypeResponse,\n }),\n compiler.typeParameterDeclaration({\n defaultType: compiler.keywordTypeNode({ keyword: 'undefined' }),\n name: nuxtTypeDefault,\n }),\n ]\n : [\n compiler.typeParameterDeclaration({\n constraint: compiler.typeReferenceNode({\n typeName: tDataShape.name,\n }),\n defaultType: compiler.typeReferenceNode({\n typeName: tDataShape.name,\n }),\n name: 'TData',\n }),\n compiler.typeParameterDeclaration({\n constraint: compiler.keywordTypeNode({ keyword: 'boolean' }),\n defaultType: compiler.keywordTypeNode({ keyword: 'boolean' }),\n name: 'ThrowOnError',\n }),\n ],\n });\n\n file.add(typeOptions);\n};\n","import type ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport type { ObjectValue } from '../../../compiler/types';\nimport { clientApi, clientModulePath } from '../../../generate/client';\nimport type { TypeScriptFile } from '../../../generate/files';\nimport {\n hasOperationDataRequired,\n statusCodeToGroup,\n} from '../../../ir/operation';\nimport type { IR } from '../../../ir/types';\nimport { escapeComment } from '../../../utils/escape';\nimport { getServiceName } from '../../../utils/postprocess';\nimport { transformServiceName } from '../../../utils/transform';\nimport { operationIrRef } from '../../shared/utils/ref';\nimport type { Plugin } from '../../types';\nimport { zodId } from '../../zod/plugin';\nimport { clientId, getClientPlugin } from '../client-core/utils';\nimport {\n operationTransformerIrRef,\n transformersId,\n} from '../transformers/plugin';\nimport {\n importIdentifierData,\n importIdentifierError,\n importIdentifierResponse,\n} from '../typescript/ref';\nimport { nuxtTypeComposable, nuxtTypeDefault } from './constants';\nimport { serviceFunctionIdentifier } from './plugin-legacy';\nimport { createTypeOptions } from './typeOptions';\nimport type { Config } from './types';\n\n// copy-pasted from @hey-api/client-core\nexport interface Auth {\n /**\n * Which part of the request do we use to send the auth?\n *\n * @default 'header'\n */\n in?: 'header' | 'query' | 'cookie';\n /**\n * Header or query parameter name.\n *\n * @default 'Authorization'\n */\n name?: string;\n scheme?: 'basic' | 'bearer';\n type: 'apiKey' | 'http';\n}\n\nexport const operationOptionsType = ({\n context,\n file,\n operation,\n throwOnError,\n}: {\n context: IR.Context;\n file: TypeScriptFile;\n operation: IR.OperationObject;\n throwOnError?: string;\n}) => {\n const identifierData = importIdentifierData({ context, file, operation });\n const identifierResponse = importIdentifierResponse({\n context,\n file,\n operation,\n });\n\n const optionsName = clientApi.Options.name;\n\n const client = getClientPlugin(context.config);\n if (client.name === '@hey-api/client-nuxt') {\n return `${optionsName}<${nuxtTypeComposable}, ${identifierData.name || 'unknown'}, ${identifierResponse.name || 'unknown'}, ${nuxtTypeDefault}>`;\n }\n\n // TODO: refactor this to be more generic, works for now\n if (throwOnError) {\n return `${optionsName}<${identifierData.name || 'unknown'}, ${throwOnError}>`;\n }\n return identifierData.name\n ? `${optionsName}<${identifierData.name}>`\n : optionsName;\n};\n\nexport const sdkId = 'sdk';\n\n/**\n * Infers `responseType` value from provided response content type. This is\n * an adapted version of `getParseAs()` from the Fetch API client.\n *\n * From Axios documentation:\n * `responseType` indicates the type of data that the server will respond with\n * options are: 'arraybuffer', 'document', 'json', 'text', 'stream'\n * browser only: 'blob'\n */\nexport const getResponseType = (\n contentType: string | null | undefined,\n):\n | 'arraybuffer'\n | 'blob'\n | 'document'\n | 'json'\n | 'stream'\n | 'text'\n | undefined => {\n if (!contentType) {\n return;\n }\n\n const cleanContent = contentType.split(';')[0]?.trim();\n\n if (!cleanContent) {\n return;\n }\n\n if (\n cleanContent.startsWith('application/json') ||\n cleanContent.endsWith('+json')\n ) {\n return 'json';\n }\n\n // Axios does not handle form data out of the box\n // if (cleanContent === 'multipart/form-data') {\n // return 'formData';\n // }\n\n if (\n ['application/', 'audio/', 'image/', 'video/'].some((type) =>\n cleanContent.startsWith(type),\n )\n ) {\n return 'blob';\n }\n\n if (cleanContent.startsWith('text/')) {\n return 'text';\n }\n};\n\n// TODO: parser - handle more security types\nconst securitySchemeObjectToAuthObject = ({\n securitySchemeObject,\n}: {\n securitySchemeObject: IR.SecurityObject;\n}): Auth | undefined => {\n if (securitySchemeObject.type === 'openIdConnect') {\n return {\n scheme: 'bearer',\n type: 'http',\n };\n }\n\n if (securitySchemeObject.type === 'oauth2') {\n if (\n securitySchemeObject.flows.password ||\n securitySchemeObject.flows.authorizationCode ||\n securitySchemeObject.flows.clientCredentials ||\n securitySchemeObject.flows.implicit\n ) {\n return {\n scheme: 'bearer',\n type: 'http',\n };\n }\n\n return;\n }\n\n if (securitySchemeObject.type === 'apiKey') {\n if (securitySchemeObject.in === 'header') {\n return {\n name: securitySchemeObject.name,\n type: 'apiKey',\n };\n }\n\n if (\n securitySchemeObject.in === 'query' ||\n securitySchemeObject.in == 'cookie'\n ) {\n return {\n in: securitySchemeObject.in,\n name: securitySchemeObject.name,\n type: 'apiKey',\n };\n }\n\n return;\n }\n\n if (securitySchemeObject.type === 'http') {\n const scheme = securitySchemeObject.scheme.toLowerCase();\n if (scheme === 'bearer' || scheme === 'basic') {\n return {\n scheme: scheme as 'bearer' | 'basic',\n type: 'http',\n };\n }\n\n return;\n }\n};\n\nconst operationAuth = ({\n operation,\n plugin,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n plugin: Plugin.Instance<Config>;\n}): Array<Auth> => {\n if (!operation.security || !plugin.auth) {\n return [];\n }\n\n const auth: Array<Auth> = [];\n\n for (const securitySchemeObject of operation.security) {\n const authObject = securitySchemeObjectToAuthObject({\n securitySchemeObject,\n });\n if (authObject) {\n auth.push(authObject);\n } else {\n console.warn(\n `❗️ SDK warning: unsupported security scheme. Please open an issue if you'd like it added https://github.com/hey-api/openapi-ts/issues\\n${JSON.stringify(securitySchemeObject, null, 2)}`,\n );\n }\n }\n\n return auth;\n};\n\nconst operationStatements = ({\n context,\n isRequiredOptions,\n operation,\n plugin,\n}: {\n context: IR.Context;\n isRequiredOptions: boolean;\n operation: IR.OperationObject;\n plugin: Plugin.Instance<Config>;\n}): Array<ts.Statement> => {\n const file = context.file({ id: sdkId })!;\n const sdkOutput = file.nameWithoutExtension();\n\n const identifierError = importIdentifierError({ context, file, operation });\n const identifierResponse = importIdentifierResponse({\n context,\n file,\n operation,\n });\n\n // TODO: transform parameters\n // const query = {\n // BarBaz: options.query.bar_baz,\n // qux_quux: options.query.qux_quux,\n // fooBar: options.query.foo_bar,\n // };\n\n // if (operation.parameters) {\n // for (const name in operation.parameters.query) {\n // const parameter = operation.parameters.query[name]\n // if (parameter.name !== fieldName({ context, name: parameter.name })) {\n // console.warn(parameter.name)\n // }\n // }\n // }\n\n const requestOptions: ObjectValue[] = [];\n\n if (operation.body) {\n switch (operation.body.type) {\n case 'form-data':\n requestOptions.push({ spread: 'formDataBodySerializer' });\n file.import({\n module: clientModulePath({\n config: context.config,\n sourceOutput: sdkOutput,\n }),\n name: 'formDataBodySerializer',\n });\n break;\n case 'json':\n // jsonBodySerializer is the default, no need to specify\n break;\n case 'text':\n // ensure we don't use any serializer by default\n requestOptions.push({\n key: 'bodySerializer',\n value: null,\n });\n break;\n case 'url-search-params':\n requestOptions.push({ spread: 'urlSearchParamsBodySerializer' });\n file.import({\n module: clientModulePath({\n config: context.config,\n sourceOutput: sdkOutput,\n }),\n name: 'urlSearchParamsBodySerializer',\n });\n break;\n }\n }\n\n const client = getClientPlugin(context.config);\n if (client.name === '@hey-api/client-axios') {\n // try to infer `responseType` option for Axios. We don't need this in\n // Fetch API client because it automatically detects the correct response\n // during runtime.\n for (const statusCode in operation.responses) {\n // this doesn't handle default status code for now\n if (statusCodeToGroup({ statusCode }) === '2XX') {\n const response = operation.responses[statusCode];\n const responseType = getResponseType(response?.mediaType);\n // json is the default, skip it\n if (responseType && responseType !== 'json') {\n requestOptions.push({\n key: 'responseType',\n value: responseType,\n });\n }\n }\n }\n }\n\n // TODO: parser - set parseAs to skip inference if every response has the same\n // content type. currently impossible because successes do not contain\n // header information\n\n const auth = operationAuth({ context, operation, plugin });\n if (auth.length) {\n requestOptions.push({\n key: 'security',\n value: compiler.arrayLiteralExpression({ elements: auth }),\n });\n }\n\n for (const name in operation.parameters?.query) {\n const parameter = operation.parameters.query[name]!;\n if (\n (parameter.schema.type === 'array' ||\n parameter.schema.type === 'tuple') &&\n (parameter.style !== 'form' || !parameter.explode)\n ) {\n // override the default settings for `querySerializer`\n requestOptions.push({\n key: 'querySerializer',\n value: [\n {\n key: 'array',\n value: [\n {\n key: 'explode',\n value: false,\n },\n {\n key: 'style',\n value: 'form',\n },\n ],\n },\n ],\n });\n break;\n }\n }\n\n if (plugin.transformer === '@hey-api/transformers') {\n const identifierTransformer = context\n .file({ id: transformersId })!\n .identifier({\n $ref: operationTransformerIrRef({ id: operation.id, type: 'response' }),\n namespace: 'value',\n });\n\n if (identifierTransformer.name) {\n file.import({\n module: file.relativePathToFile({\n context,\n id: transformersId,\n }),\n name: identifierTransformer.name,\n });\n\n requestOptions.push({\n key: 'responseTransformer',\n value: identifierTransformer.name,\n });\n }\n }\n\n if (plugin.validator === 'zod') {\n const identifierSchema = context.file({ id: zodId })!.identifier({\n $ref: operationIrRef({\n case: 'camelCase',\n id: operation.id,\n type: 'response',\n }),\n namespace: 'value',\n });\n\n if (identifierSchema.name) {\n file.import({\n module: file.relativePathToFile({\n context,\n id: zodId,\n }),\n name: identifierSchema.name,\n });\n\n requestOptions.push({\n key: 'responseValidator',\n value: compiler.arrowFunction({\n async: true,\n parameters: [\n {\n name: 'data',\n },\n ],\n statements: [\n compiler.returnStatement({\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: identifierSchema.name,\n }),\n name: compiler.identifier({ text: 'parseAsync' }),\n }),\n parameters: [compiler.identifier({ text: 'data' })],\n }),\n }),\n }),\n ],\n }),\n });\n }\n }\n\n requestOptions.push({\n key: 'url',\n value: operation.path,\n });\n\n // options must go last to allow overriding parameters above\n requestOptions.push({ spread: 'options' });\n if (operation.body) {\n requestOptions.push({\n key: 'headers',\n value: [\n {\n key: 'Content-Type',\n // form-data does not need Content-Type header, browser will set it automatically\n value:\n operation.body.type === 'form-data'\n ? null\n : operation.body.mediaType,\n },\n {\n spread: 'options?.headers',\n },\n ],\n });\n }\n\n const isNuxtClient = client.name === '@hey-api/client-nuxt';\n const responseType = identifierResponse.name || 'unknown';\n const errorType = identifierError.name || 'unknown';\n\n const heyApiClient = plugin.client\n ? file.import({\n alias: '_heyApiClient',\n module: file.relativePathToFile({\n context,\n id: clientId,\n }),\n name: 'client',\n })\n : undefined;\n\n const optionsClient = compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'options' }),\n isOptional: !isRequiredOptions,\n name: 'client',\n });\n\n return [\n compiler.returnFunctionCall({\n args: [\n compiler.objectExpression({\n identifiers: ['responseTransformer'],\n obj: requestOptions,\n }),\n ],\n name: compiler.propertyAccessExpression({\n expression: heyApiClient?.name\n ? compiler.binaryExpression({\n left: optionsClient,\n operator: '??',\n right: compiler.identifier({ text: heyApiClient.name }),\n })\n : optionsClient,\n name: compiler.identifier({ text: operation.method }),\n }),\n types: isNuxtClient\n ? [\n nuxtTypeComposable,\n `${responseType} | ${nuxtTypeDefault}`,\n errorType,\n nuxtTypeDefault,\n ]\n : [responseType, errorType, 'ThrowOnError'],\n }),\n ];\n};\n\nconst generateClassSdk = ({\n context,\n plugin,\n}: {\n context: IR.Context;\n plugin: Plugin.Instance<Config>;\n}) => {\n const client = getClientPlugin(context.config);\n const isNuxtClient = client.name === '@hey-api/client-nuxt';\n const file = context.file({ id: sdkId })!;\n const sdks = new Map<string, Array<ts.MethodDeclaration>>();\n\n context.subscribe('operation', ({ operation }) => {\n const isRequiredOptions =\n !plugin.client || isNuxtClient || hasOperationDataRequired(operation);\n const identifierResponse = importIdentifierResponse({\n context,\n file,\n operation,\n });\n const node = compiler.methodDeclaration({\n accessLevel: 'public',\n comment: [\n operation.deprecated && '@deprecated',\n operation.summary && escapeComment(operation.summary),\n operation.description && escapeComment(operation.description),\n ],\n isStatic: true,\n name: serviceFunctionIdentifier({\n config: context.config,\n handleIllegal: false,\n id: operation.id,\n operation,\n }),\n parameters: [\n {\n isRequired: isRequiredOptions,\n name: 'options',\n type: operationOptionsType({\n context,\n file,\n operation,\n throwOnError: isNuxtClient ? undefined : 'ThrowOnError',\n }),\n },\n ],\n returnType: undefined,\n statements: operationStatements({\n context,\n isRequiredOptions,\n operation,\n plugin,\n }),\n types: isNuxtClient\n ? [\n {\n // default: compiler.ots.string('$fetch'),\n extends: compiler.typeNode('Composable'),\n name: nuxtTypeComposable,\n },\n {\n default: identifierResponse.name\n ? compiler.typeReferenceNode({\n typeName: identifierResponse.name,\n })\n : compiler.typeNode('undefined'),\n extends: identifierResponse.name\n ? compiler.typeReferenceNode({\n typeName: identifierResponse.name,\n })\n : undefined,\n name: nuxtTypeDefault,\n },\n ]\n : [\n {\n default:\n ('throwOnError' in client ? client.throwOnError : false) ??\n false,\n extends: 'boolean',\n name: 'ThrowOnError',\n },\n ],\n });\n\n const uniqueTags = Array.from(new Set(operation.tags));\n if (!uniqueTags.length) {\n uniqueTags.push('default');\n }\n\n for (const tag of uniqueTags) {\n const name = getServiceName(tag);\n const nodes = sdks.get(name) ?? [];\n nodes.push(node);\n sdks.set(name, nodes);\n }\n });\n\n context.subscribe('after', () => {\n for (const [name, nodes] of sdks) {\n const node = compiler.classDeclaration({\n decorator: undefined,\n members: nodes,\n name: transformServiceName({\n config: context.config,\n name,\n }),\n });\n file.add(node);\n }\n });\n};\n\nconst generateFlatSdk = ({\n context,\n plugin,\n}: {\n context: IR.Context;\n plugin: Plugin.Instance<Config>;\n}) => {\n const client = getClientPlugin(context.config);\n const isNuxtClient = client.name === '@hey-api/client-nuxt';\n const file = context.file({ id: sdkId })!;\n\n context.subscribe('operation', ({ operation }) => {\n const isRequiredOptions =\n !plugin.client || isNuxtClient || hasOperationDataRequired(operation);\n const identifierResponse = importIdentifierResponse({\n context,\n file,\n operation,\n });\n const node = compiler.constVariable({\n comment: [\n operation.deprecated && '@deprecated',\n operation.summary && escapeComment(operation.summary),\n operation.description && escapeComment(operation.description),\n ],\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired: isRequiredOptions,\n name: 'options',\n type: operationOptionsType({\n context,\n file,\n operation,\n throwOnError: isNuxtClient ? undefined : 'ThrowOnError',\n }),\n },\n ],\n returnType: undefined,\n statements: operationStatements({\n context,\n isRequiredOptions,\n operation,\n plugin,\n }),\n types: isNuxtClient\n ? [\n {\n // default: compiler.ots.string('$fetch'),\n extends: compiler.typeNode('Composable'),\n name: nuxtTypeComposable,\n },\n {\n default: identifierResponse.name\n ? compiler.typeReferenceNode({\n typeName: identifierResponse.name,\n })\n : compiler.typeNode('undefined'),\n extends: identifierResponse.name\n ? compiler.typeReferenceNode({\n typeName: identifierResponse.name,\n })\n : undefined,\n name: nuxtTypeDefault,\n },\n ]\n : [\n {\n default:\n ('throwOnError' in client ? client.throwOnError : false) ??\n false,\n extends: 'boolean',\n name: 'ThrowOnError',\n },\n ],\n }),\n name: serviceFunctionIdentifier({\n config: context.config,\n handleIllegal: true,\n id: operation.id,\n operation,\n }),\n });\n file.add(node);\n });\n};\n\nexport const handler: Plugin.Handler<Config> = ({ context, plugin }) => {\n const file = context.createFile({\n exportFromIndex: plugin.exportFromIndex,\n id: sdkId,\n path: plugin.output,\n });\n\n // import required packages and core files\n const clientModule = clientModulePath({\n config: context.config,\n sourceOutput: file.nameWithoutExtension(),\n });\n const clientOptions = file.import({\n ...clientApi.Options,\n alias: 'ClientOptions',\n module: clientModule,\n });\n\n const client = getClientPlugin(context.config);\n const isNuxtClient = client.name === '@hey-api/client-nuxt';\n if (isNuxtClient) {\n file.import({\n asType: true,\n module: clientModule,\n name: 'Composable',\n });\n }\n\n createTypeOptions({\n clientOptions,\n context,\n plugin,\n });\n\n if (plugin.asClass) {\n generateClassSdk({ context, plugin });\n } else {\n generateFlatSdk({ context, plugin });\n }\n};\n","import type { Plugin } from '../../types';\nimport { handler } from './plugin';\nimport { handlerLegacy } from './plugin-legacy';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _dependencies: ['@hey-api/typescript'],\n _handler: handler,\n _handlerLegacy: handlerLegacy,\n _infer: (config, context) => {\n if (config.client) {\n if (typeof config.client === 'boolean') {\n config.client = context.pluginByTag(\n 'client',\n '🚫 client needs to be set to generate SDKs - which HTTP client do you want to use?',\n ) as unknown as typeof config.client;\n }\n\n context.ensureDependency(config.client);\n }\n\n if (config.transformer) {\n if (typeof config.transformer === 'boolean') {\n config.transformer = context.pluginByTag(\n 'transformer',\n ) as unknown as typeof config.transformer;\n }\n\n context.ensureDependency(config.transformer);\n }\n\n if (config.validator) {\n if (typeof config.validator === 'boolean') {\n config.validator = context.pluginByTag(\n 'validator',\n ) as unknown as typeof config.validator;\n }\n\n context.ensureDependency(config.validator);\n }\n },\n asClass: false,\n auth: true,\n client: true,\n exportFromIndex: true,\n name: '@hey-api/sdk',\n operationId: true,\n output: 'sdk',\n response: 'body',\n serviceNameBuilder: '{{name}}Service',\n};\n\n/**\n * Type helper for `@hey-api/sdk` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { EnumDeclaration } from 'typescript';\n\nimport { type Comments, compiler, type Node } from '../../../compiler';\nimport { TypeScriptFile } from '../../../generate/files';\nimport { isOperationParameterRequired } from '../../../openApi';\nimport type {\n Client,\n Method,\n Model,\n OperationParameter,\n} from '../../../types/client';\nimport { getConfig, isLegacyClient } from '../../../utils/config';\nimport { enumEntry, enumUnionType } from '../../../utils/enum';\nimport { escapeComment } from '../../../utils/escape';\nimport { sortByName, sorterByName } from '../../../utils/sort';\nimport {\n setUniqueTypeName,\n type SetUniqueTypeNameResult,\n toType,\n} from '../../../utils/type';\nimport type { Plugin } from '../../types';\nimport {\n operationDataTypeName,\n operationErrorTypeName,\n operationResponseTypeName,\n} from '../sdk/plugin-legacy';\nimport type { Config } from './types';\n\nexport interface TypesProps {\n client: Client;\n model: Model;\n onNode: (node: Node) => void;\n onRemoveNode?: VoidFunction;\n}\n\nconst treeName = '$OpenApiTs';\n\nexport const emptyModel: Model = {\n $refs: [],\n base: '',\n description: null,\n enum: [],\n enums: [],\n export: 'interface',\n imports: [],\n in: '',\n isDefinition: false,\n isNullable: false,\n isReadOnly: false,\n isRequired: false,\n link: null,\n name: '',\n properties: [],\n template: null,\n type: '',\n};\n\nconst generateEnum = ({\n comments,\n leadingComment,\n meta,\n obj,\n onNode,\n ...setUniqueTypeNameArgs\n}: Omit<Parameters<typeof compiler.enumDeclaration>[0], 'name'> &\n Pick<Parameters<typeof setUniqueTypeName>[0], 'client' | 'nameTransformer'> &\n Pick<Model, 'meta'> &\n Pick<TypesProps, 'onNode'>) => {\n // generate types only for top-level models\n if (!meta) {\n return;\n }\n\n const { created, name } = setUniqueTypeName({\n create: true,\n meta,\n ...setUniqueTypeNameArgs,\n });\n if (created) {\n const node = compiler.enumDeclaration({\n comments,\n leadingComment,\n name,\n obj,\n });\n onNode(node);\n }\n};\n\nexport const generateType = ({\n comment,\n meta,\n onCreated,\n onNode,\n type,\n ...setUniqueTypeNameArgs\n}: Omit<Parameters<typeof compiler.typeAliasDeclaration>[0], 'name'> &\n Pick<Parameters<typeof setUniqueTypeName>[0], 'client' | 'nameTransformer'> &\n Pick<Model, 'meta'> &\n Pick<TypesProps, 'onNode'> & {\n onCreated?: (name: string) => void;\n }): SetUniqueTypeNameResult => {\n // generate types only for top-level models\n if (!meta) {\n return {\n created: false,\n name: '',\n };\n }\n\n const result = setUniqueTypeName({\n create: true,\n meta,\n ...setUniqueTypeNameArgs,\n });\n const { created, name } = result;\n if (created) {\n const node = compiler.typeAliasDeclaration({\n comment,\n exportType: true,\n name,\n type,\n });\n onNode(node);\n\n onCreated?.(name);\n }\n return result;\n};\n\nconst processComposition = (props: TypesProps) => {\n const config = getConfig();\n\n const enumDeclarations = [] as EnumDeclaration[];\n\n processType(props);\n\n props.model.enums.forEach((enumerator) => {\n if (\n config.plugins['@hey-api/typescript']?.enums !== 'typescript+namespace'\n ) {\n return processEnum({\n ...props,\n model: enumerator,\n });\n }\n\n return processScopedEnum({\n ...props,\n model: enumerator,\n onNode: (node) => {\n enumDeclarations.push(node as EnumDeclaration);\n },\n });\n });\n\n if (enumDeclarations.length) {\n props.onNode(\n compiler.namespaceDeclaration({\n name: props.model.name,\n statements: enumDeclarations,\n }),\n );\n }\n};\n\nconst processEnum = ({ client, model, onNode }: TypesProps) => {\n const config = getConfig();\n\n const properties: Record<string | number, unknown> = {};\n const comments: Record<string | number, Comments> = {};\n model.enum.forEach((enumerator) => {\n const { key, value } = enumEntry(enumerator);\n properties[key] = value;\n const comment = enumerator.customDescription || enumerator.description;\n if (comment) {\n comments[key] = [escapeComment(comment)];\n }\n });\n\n const comment = [\n model.description && escapeComment(model.description),\n model.deprecated && '@deprecated',\n ];\n\n if (\n config.plugins['@hey-api/typescript']?.enums === 'typescript' ||\n config.plugins['@hey-api/typescript']?.enums === 'typescript+namespace'\n ) {\n generateEnum({\n client,\n comments,\n leadingComment: comment,\n meta: model.meta,\n obj: properties,\n onNode,\n });\n return;\n }\n\n generateType({\n client,\n comment,\n meta: model.meta,\n onCreated: (name) => {\n // create a separate JavaScript object export\n if (config.plugins['@hey-api/typescript']?.enums === 'javascript') {\n const expression = compiler.objectExpression({\n multiLine: true,\n obj: Object.entries(properties).map(([key, value]) => ({\n comments: comments[key],\n key,\n value,\n })),\n unescape: true,\n });\n const node = compiler.constVariable({\n assertion: 'const',\n comment,\n exportConst: true,\n expression,\n name,\n });\n onNode(node);\n }\n },\n onNode,\n type: enumUnionType(model.enum),\n });\n};\n\nconst processScopedEnum = ({ model, onNode }: TypesProps) => {\n const properties: Record<string | number, unknown> = {};\n const comments: Record<string | number, Comments> = {};\n model.enum.forEach((enumerator) => {\n const { key, value } = enumEntry(enumerator);\n properties[key] = value;\n const comment = enumerator.customDescription || enumerator.description;\n if (comment) {\n comments[key] = [escapeComment(comment)];\n }\n });\n onNode(\n compiler.enumDeclaration({\n comments,\n leadingComment: [\n model.description && escapeComment(model.description),\n model.deprecated && '@deprecated',\n ],\n name: model.meta?.name || model.name,\n obj: properties,\n }),\n );\n};\n\nconst processType = ({ client, model, onNode }: TypesProps) => {\n generateType({\n client,\n comment: [\n model.description && escapeComment(model.description),\n model.deprecated && '@deprecated',\n ],\n meta: model.meta,\n onNode,\n type: toType(model),\n });\n};\n\nconst processModel = (props: TypesProps) => {\n switch (props.model.export) {\n case 'all-of':\n case 'any-of':\n case 'one-of':\n case 'interface':\n return processComposition(props);\n case 'enum':\n return processEnum(props);\n default:\n return processType(props);\n }\n};\n\ninterface MethodMap {\n $ref?: string;\n req?: OperationParameter[];\n res?: Record<number | string, Model>;\n}\n\ntype PathMap = {\n [method in Method]?: MethodMap;\n};\n\ntype PathsMap = Record<string, PathMap>;\n\nconst processServiceTypes = ({\n client,\n onNode,\n}: Pick<TypesProps, 'client' | 'onNode'>) => {\n const pathsMap: PathsMap = {};\n\n const config = getConfig();\n\n if (\n !config.plugins['@hey-api/sdk'] &&\n !config.plugins['@hey-api/typescript']?.tree\n ) {\n return;\n }\n\n const isLegacy = isLegacyClient(config);\n\n for (const service of client.services) {\n for (const operation of service.operations) {\n if (!operation.parameters.length && !operation.responses.length) {\n continue;\n }\n\n if (!pathsMap[operation.path]) {\n pathsMap[operation.path] = {};\n }\n const pathMap = pathsMap[operation.path]!;\n\n if (!pathMap[operation.method]) {\n pathMap[operation.method] = {};\n }\n const methodMap = pathMap[operation.method]!;\n methodMap.$ref = operation.name;\n\n if (operation.responses.length > 0) {\n if (!methodMap.res) {\n methodMap.res = {};\n }\n\n if (Array.isArray(methodMap.res)) {\n continue;\n }\n\n operation.responses.forEach((response) => {\n methodMap.res![response.code] = response;\n });\n }\n\n if (operation.parameters.length > 0) {\n let bodyParameters: OperationParameter = {\n mediaType: null,\n ...emptyModel,\n in: 'body',\n name: 'body',\n prop: 'body',\n };\n let bodyParameter = operation.parameters.filter(\n (parameter) => parameter.in === 'body',\n );\n if (!bodyParameter.length) {\n bodyParameter = operation.parameters.filter(\n (parameter) => parameter.in === 'formData',\n );\n }\n\n if (bodyParameter.length === 1) {\n bodyParameters = {\n ...emptyModel,\n ...bodyParameter[0]!,\n in: 'body',\n isRequired: bodyParameter[0]!.isRequired,\n name: 'body',\n prop: 'body',\n };\n // assume we have multiple formData parameters from Swagger 2.0\n } else if (bodyParameter.length > 1) {\n bodyParameters = {\n ...emptyModel,\n in: 'body',\n isRequired: bodyParameter.some((parameter) => parameter.isRequired),\n mediaType: 'multipart/form-data',\n name: 'body',\n prop: 'body',\n properties: bodyParameter,\n };\n }\n\n const headerParameters: OperationParameter = {\n ...emptyModel,\n in: 'header',\n isRequired: isOperationParameterRequired(\n operation.parameters.filter(\n (parameter) => parameter.in === 'header',\n ),\n ),\n mediaType: null,\n name: isLegacy ? 'header' : 'headers',\n prop: isLegacy ? 'header' : 'headers',\n properties: operation.parameters\n .filter((parameter) => parameter.in === 'header')\n .sort(sorterByName),\n };\n const pathParameters: OperationParameter = {\n ...emptyModel,\n in: 'path',\n isRequired: isOperationParameterRequired(\n operation.parameters.filter((parameter) => parameter.in === 'path'),\n ),\n mediaType: null,\n name: 'path',\n prop: 'path',\n properties: operation.parameters\n .filter((parameter) => parameter.in === 'path')\n .sort(sorterByName),\n };\n const queryParameters: OperationParameter = {\n ...emptyModel,\n in: 'query',\n isRequired: isOperationParameterRequired(\n operation.parameters.filter(\n (parameter) => parameter.in === 'query',\n ),\n ),\n mediaType: null,\n name: 'query',\n prop: 'query',\n properties: operation.parameters\n .filter((parameter) => parameter.in === 'query')\n .sort(sorterByName),\n };\n const operationProperties = !isLegacy\n ? [\n bodyParameters,\n headerParameters,\n pathParameters,\n queryParameters,\n ].filter(\n (param) =>\n param.properties.length ||\n param.$refs.length ||\n param.mediaType,\n )\n : sortByName([...operation.parameters]);\n\n methodMap.req = operationProperties;\n\n // create type export for operation data\n generateType({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationDataTypeName,\n onNode,\n type: toType({\n ...emptyModel,\n isRequired: true,\n properties: operationProperties,\n }),\n });\n }\n\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n\n if (successResponses.length > 0) {\n // create type export for operation response\n generateType({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationResponseTypeName,\n onNode,\n type: toType({\n ...emptyModel,\n export: 'any-of',\n isRequired: true,\n properties: successResponses,\n }),\n });\n\n const errorResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('error'),\n );\n\n if (!isLegacy) {\n // create type export for operation error\n generateType({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationErrorTypeName,\n onNode,\n type: toType(\n errorResponses.length\n ? {\n ...emptyModel,\n export: 'one-of',\n isRequired: true,\n properties: errorResponses,\n }\n : {\n ...emptyModel,\n base: 'unknown',\n isRequired: true,\n type: 'unknown',\n },\n ),\n });\n }\n }\n }\n }\n\n const properties = Object.entries(pathsMap).map(([path, pathMap]) => {\n const pathParameters = Object.entries(pathMap)\n .map(([_method, methodMap]) => {\n const method = _method as Method;\n\n let methodParameters: Model[] = [];\n\n if (methodMap.req) {\n const operationName = methodMap.$ref!;\n const { name: base } = setUniqueTypeName({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operationName,\n name: operationName,\n },\n nameTransformer: operationDataTypeName,\n });\n const reqKey: Model = {\n ...emptyModel,\n base,\n export: 'reference',\n isRequired: true,\n name: 'req',\n properties: [],\n type: base,\n };\n methodParameters = [...methodParameters, reqKey];\n }\n\n if (methodMap.res) {\n const reqResParameters = Object.entries(methodMap.res).map(\n ([code, base]) => {\n // TODO: move query params into separate query key\n const value: Model = {\n ...emptyModel,\n ...base,\n isRequired: true,\n name: String(code),\n };\n return value;\n },\n );\n\n const resKey: Model = {\n ...emptyModel,\n isRequired: true,\n name: 'res',\n properties: reqResParameters,\n };\n methodParameters = [...methodParameters, resKey];\n }\n\n const methodKey: Model = {\n ...emptyModel,\n isRequired: true,\n name: method.toLocaleLowerCase(),\n properties: methodParameters,\n };\n return methodKey;\n })\n .filter(Boolean);\n const pathKey: Model = {\n ...emptyModel,\n isRequired: true,\n name: `'${path}'`,\n properties: pathParameters as Model[],\n };\n return pathKey;\n });\n\n if (config.plugins['@hey-api/typescript']?.tree) {\n generateType({\n client,\n meta: {\n $ref: '@hey-api/openapi-ts',\n name: treeName,\n },\n onNode,\n type: toType({\n ...emptyModel,\n properties,\n }),\n });\n }\n};\n\nexport const handlerLegacy: Plugin.LegacyHandler<Config> = ({\n client,\n files,\n}) => {\n const config = getConfig();\n\n files.types = new TypeScriptFile({\n dir: config.output.path,\n name: 'types.ts',\n });\n\n const onNode: TypesProps['onNode'] = (node) => {\n files.types?.add(node);\n };\n\n for (const model of client.models) {\n processModel({ client, model, onNode });\n }\n\n processServiceTypes({ client, onNode });\n};\n","import type ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport { getOperationKey } from '../../../openApi/common/parser/operation';\nimport type { ModelMeta, OperationResponse } from '../../../types/client';\nimport { getConfig } from '../../../utils/config';\nimport { isModelDate, unsetUniqueTypeName } from '../../../utils/type';\nimport type { Plugin } from '../../types';\nimport {\n modelResponseTransformerTypeName,\n operationResponseTransformerTypeName,\n operationResponseTypeName,\n} from '../sdk/plugin-legacy';\nimport { generateType, type TypesProps } from '../typescript/plugin-legacy';\nimport type { Config } from './types';\n\ninterface ModelProps extends TypesProps {\n meta?: ModelMeta;\n path: Array<string>;\n}\n\nconst dataVariableName = 'data';\n\nconst isVoidResponse = (response: OperationResponse) =>\n response.base === 'unknown' &&\n response.export === 'generic' &&\n response.type === 'unknown';\n\nconst getRefModels = ({\n client,\n model,\n}: Pick<TypesProps, 'client' | 'model'>) => {\n const refModels = model.$refs.map((ref) => {\n const refModel = client.models.find((model) => model.meta?.$ref === ref);\n if (!refModel) {\n throw new Error(\n `Ref ${ref} could not be found. Transformers cannot be generated without having access to all refs.`,\n );\n }\n return refModel;\n });\n return refModels;\n};\n\nconst ensureModelResponseTransformerExists = (\n props: Omit<ModelProps, 'path'>,\n) => {\n const modelName = props.model.meta!.name;\n\n const { name } = generateType({\n ...props,\n meta: {\n $ref: `transformers/${modelName}`,\n name: modelName,\n },\n nameTransformer: modelResponseTransformerTypeName,\n onCreated: (name) => {\n const statements = processModel({\n ...props,\n meta: {\n $ref: `transformers/${modelName}`,\n name,\n },\n path: [dataVariableName],\n });\n generateResponseTransformer({\n ...props,\n async: false,\n name,\n statements,\n });\n },\n type: `(${dataVariableName}: any) => ${modelName}`,\n });\n\n const result = {\n created: Boolean(props.client.types[name]),\n name,\n };\n return result;\n};\n\nconst processArray = (props: ModelProps) => {\n const { model } = props;\n const refModels = getRefModels(props);\n\n if (refModels.length === 1) {\n const { created, name: nameModelResponseTransformer } =\n ensureModelResponseTransformerExists({ ...props, model: refModels[0]! });\n\n if (!created) {\n return [];\n }\n\n return [\n compiler.transformArrayMutation({\n path: props.path,\n transformerName: nameModelResponseTransformer,\n }),\n ];\n }\n\n if (\n isModelDate(model) ||\n (model.link &&\n !Array.isArray(model.link) &&\n model.link.export === 'any-of' &&\n model.link.properties.find((property) => isModelDate(property)))\n ) {\n return [\n compiler.transformArrayMap({\n path: props.path,\n transformExpression: compiler.conditionalExpression({\n condition: compiler.identifier({ text: 'item' }),\n whenFalse: compiler.identifier({ text: 'item' }),\n whenTrue: compiler.transformNewDate({\n parameterName: 'item',\n }),\n }),\n }),\n ];\n }\n\n // Not transform for this type\n return [];\n};\n\nconst processProperty = (props: ModelProps) => {\n const { model } = props;\n const path = [...props.path, model.name];\n\n if (\n model.type === 'string' &&\n model.export !== 'array' &&\n isModelDate(model)\n ) {\n return [compiler.transformDateMutation({ path })];\n }\n\n // otherwise we recurse in case it's an object/array, and if it's not that will just bail with []\n return processModel({\n ...props,\n model,\n path,\n });\n};\n\nconst processModel = (props: ModelProps): ts.Statement[] => {\n const { model } = props;\n\n switch (model.export) {\n case 'array':\n return processArray(props);\n case 'interface':\n return model.properties.flatMap((property) =>\n processProperty({ ...props, model: property }),\n );\n case 'reference': {\n if (model.$refs.length !== 1) {\n return [];\n }\n const refModels = getRefModels(props);\n\n const { created, name: nameModelResponseTransformer } =\n ensureModelResponseTransformerExists({\n ...props,\n model: refModels[0]!,\n });\n\n if (!created) {\n return [];\n }\n\n return model.in === 'response'\n ? [\n compiler.expressionToStatement({\n expression: compiler.callExpression({\n functionName: nameModelResponseTransformer,\n parameters: [dataVariableName],\n }),\n }),\n ]\n : compiler.transformFunctionMutation({\n path: props.path,\n transformerName: nameModelResponseTransformer,\n });\n }\n // unsupported\n default:\n return [];\n }\n};\n\nconst generateResponseTransformer = ({\n async,\n client,\n name,\n onNode,\n onRemoveNode,\n statements,\n}: Pick<TypesProps, 'client' | 'onNode' | 'onRemoveNode'> & {\n async: boolean;\n name: string;\n statements: Array<ts.Statement>;\n}) => {\n const result = {\n created: false,\n name,\n };\n\n if (!statements.length) {\n // clean up created type for response transformer if it turns out\n // the transformer was never generated\n unsetUniqueTypeName({\n client,\n name,\n });\n onRemoveNode?.();\n return result;\n }\n\n const expression = compiler.arrowFunction({\n async,\n multiLine: true,\n parameters: [\n {\n name: dataVariableName,\n },\n ],\n statements: [\n ...statements,\n compiler.returnVariable({\n expression: dataVariableName,\n }),\n ],\n });\n const statement = compiler.constVariable({\n exportConst: true,\n expression,\n name,\n typeName: name,\n });\n onNode(statement);\n\n return {\n created: true,\n name,\n };\n};\n\n// handles only response transformers for now\nexport const handlerLegacy: Plugin.LegacyHandler<Config> = ({\n client,\n files,\n}) => {\n const config = getConfig();\n\n const onNode: TypesProps['onNode'] = (node) => {\n files.types?.add(node);\n };\n const onRemoveNode: TypesProps['onRemoveNode'] = () => {\n files.types?.removeNode();\n };\n\n for (const service of client.services) {\n for (const operation of service.operations) {\n const successResponses = operation.responses.filter((response) =>\n response.responseTypes.includes('success'),\n );\n\n if (!successResponses.length) {\n continue;\n }\n\n const nonVoidResponses = successResponses.filter(\n (response) => !isVoidResponse(response),\n );\n\n if (!nonVoidResponses.length) {\n continue;\n }\n\n if (nonVoidResponses.length > 1) {\n if (config.logs.level === 'debug') {\n console.warn(\n `❗️ Transformers warning: route ${getOperationKey(operation)} has ${nonVoidResponses.length} non-void success responses. This is currently not handled and we will not generate a response transformer. Please open an issue if you'd like this feature https://github.com/hey-api/openapi-ts/issues`,\n );\n }\n continue;\n }\n\n const name = operationResponseTypeName(operation.name);\n generateType({\n client,\n meta: {\n $ref: `transformers/${name}`,\n name,\n },\n nameTransformer: operationResponseTransformerTypeName,\n onCreated: (nameCreated) => {\n const statements =\n successResponses.length > 1\n ? successResponses.flatMap((response) => {\n const statements = processModel({\n client,\n meta: {\n $ref: `transformers/${name}`,\n name,\n },\n model: response,\n onNode,\n onRemoveNode,\n path: [dataVariableName],\n });\n\n // assume unprocessed responses are void\n if (!statements.length) {\n return [];\n }\n\n return [\n compiler.ifStatement({\n expression: compiler.safeAccessExpression(['data']),\n thenStatement: compiler.block({ statements }),\n }),\n ];\n })\n : processModel({\n client,\n meta: {\n $ref: `transformers/${name}`,\n name,\n },\n model: successResponses[0]!,\n onNode,\n onRemoveNode,\n path: [dataVariableName],\n });\n generateResponseTransformer({\n async: true,\n client,\n name: nameCreated,\n onNode,\n onRemoveNode,\n statements,\n });\n },\n onNode,\n type: `(${dataVariableName}: any) => Promise<${name}>`,\n });\n }\n }\n};\n","import type { Plugin } from '../../types';\nimport { handler } from './plugin';\nimport { handlerLegacy } from './plugin-legacy';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _dependencies: ['@hey-api/typescript'],\n _handler: handler,\n _handlerLegacy: handlerLegacy,\n _tags: ['transformer'],\n bigInt: true,\n dates: true,\n exportFromIndex: false,\n name: '@hey-api/transformers',\n output: 'transformers',\n};\n\n/**\n * Type helper for `@hey-api/transformers`, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import ts from 'typescript';\n\nimport type { IR } from '../../../ir/types';\nimport { numberRegExp } from '../../../utils/regexp';\nimport { stringCase } from '../../../utils/stringCase';\n\n/**\n * Returns final field name for object properties. This might differ from the\n * original value as applying case transform function might alter it.\n */\nexport const fieldName = ({\n context,\n name,\n}: {\n context: IR.Context;\n name: string;\n}) => {\n numberRegExp.lastIndex = 0;\n if (numberRegExp.test(name)) {\n return ts.factory.createNumericLiteral(name);\n }\n\n // if (typeof context.config.output.case === 'function') {\n // return context.config.output.case({ value: name });\n // }\n\n return stringCase({ case: context.config.output.case, value: name });\n};\n","import ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport type { Identifier } from '../../../generate/files';\nimport type { IR } from '../../../ir/types';\nimport { parseUrl } from '../../../utils/url';\nimport type { Plugin } from '../../types';\nimport { getClientBaseUrlKey, getClientPlugin } from '../client-core/utils';\nimport { typesId } from './ref';\nimport type { Config } from './types';\n\nconst stringType = compiler.keywordTypeNode({ keyword: 'string' });\n\nconst serverToBaseUrlType = ({ server }: { server: IR.ServerObject }) => {\n const url = parseUrl(server.url);\n\n if (url.protocol && url.host) {\n return compiler.literalTypeNode({\n literal: compiler.stringLiteral({ text: server.url }),\n });\n }\n\n return compiler.templateLiteralType({\n value: [\n url.protocol || stringType,\n '://',\n url.host || stringType,\n url.port ? `:${url.port}` : '',\n url.path || '',\n ],\n });\n};\n\nexport const createClientOptions = ({\n context,\n identifier,\n servers,\n}: {\n context: IR.Context;\n identifier: Identifier;\n plugin: Plugin.Instance<Config>;\n servers: ReadonlyArray<IR.ServerObject>;\n}) => {\n const file = context.file({ id: typesId })!;\n\n if (!identifier.name) {\n return;\n }\n\n const client = getClientPlugin(context.config);\n\n const types: Array<ts.TypeNode> = servers.map((server) =>\n serverToBaseUrlType({ server }),\n );\n\n if (!servers.length) {\n types.push(stringType);\n } else if (!('strictBaseUrl' in client && client.strictBaseUrl)) {\n types.push(\n compiler.typeIntersectionNode({\n types: [stringType, ts.factory.createTypeLiteralNode([])],\n }),\n );\n }\n\n const typeClientOptions = compiler.typeAliasDeclaration({\n exportType: true,\n name: identifier.name,\n type: compiler.typeInterfaceNode({\n properties: [\n {\n name: getClientBaseUrlKey(context.config),\n type: compiler.typeUnionNode({ types }),\n },\n ],\n useLegacyResolution: false,\n }),\n });\n\n file.add(typeClientOptions);\n};\n","import ts from 'typescript';\n\nimport type { Property } from '../../../compiler';\nimport { compiler } from '../../../compiler';\nimport { operationResponsesMap } from '../../../ir/operation';\nimport { deduplicateSchema } from '../../../ir/schema';\nimport type { IR } from '../../../ir/types';\nimport { escapeComment } from '../../../utils/escape';\nimport { irRef, isRefOpenApiComponent } from '../../../utils/ref';\nimport { numberRegExp } from '../../../utils/regexp';\nimport { stringCase } from '../../../utils/stringCase';\nimport { fieldName } from '../../shared/utils/case';\nimport { operationIrRef } from '../../shared/utils/ref';\nimport type { Plugin } from '../../types';\nimport { createClientOptions } from './clientOptions';\nimport { typesId } from './ref';\nimport type { Config } from './types';\n\ninterface SchemaWithType<T extends Required<IR.SchemaObject>['type']>\n extends Omit<IR.SchemaObject, 'type'> {\n type: Extract<Required<IR.SchemaObject>['type'], T>;\n}\n\ninterface State {\n /**\n * If set, we keep the specified properties (read-only or write-only) and\n * strip the other type.\n */\n accessScope?: 'read' | 'write';\n}\n\nconst parseSchemaJsDoc = ({ schema }: { schema: IR.SchemaObject }) => {\n const comments = [\n schema.description && escapeComment(schema.description),\n schema.deprecated && '@deprecated',\n ].filter(Boolean);\n\n if (!comments.length) {\n return;\n }\n\n return comments;\n};\n\nconst scopeToRef = ({\n $ref,\n accessScope,\n plugin,\n}: {\n $ref: string;\n accessScope?: 'read' | 'write';\n plugin: Plugin.Instance<Config>;\n}) => {\n if (!accessScope) {\n return $ref;\n }\n\n const refParts = $ref.split('/');\n const name = refParts.pop()!;\n const nameBuilder =\n accessScope === 'read'\n ? plugin.readableNameBuilder\n : plugin.writableNameBuilder;\n const processedName = processNameBuilder({ name, nameBuilder });\n refParts.push(processedName);\n return refParts.join('/');\n};\n\nconst processNameBuilder = ({\n name,\n nameBuilder,\n}: {\n name: string;\n nameBuilder: string | undefined;\n}) => {\n if (!nameBuilder) {\n return name;\n }\n\n return nameBuilder.replace('{{name}}', name);\n};\n\nconst shouldSkipSchema = ({\n schema,\n state,\n}: {\n schema: IR.SchemaObject;\n state: State | undefined;\n}) =>\n Boolean(\n state?.accessScope &&\n schema.accessScope &&\n state.accessScope !== schema.accessScope,\n );\n\nconst addJavaScriptEnum = ({\n $ref,\n context,\n plugin,\n schema,\n}: {\n $ref: string;\n context: IR.Context;\n plugin: Plugin.Instance<Config>;\n schema: SchemaWithType<'enum'>;\n}) => {\n const file = context.file({ id: typesId })!;\n const identifier = file.identifier({\n $ref,\n create: true,\n namespace: 'value',\n });\n\n // TODO: parser - this is the old parser behavior where we would NOT\n // print nested enum identifiers if they already exist. This is a\n // blocker for referencing these identifiers within the file as\n // we cannot guarantee just because they have a duplicate identifier,\n // they have a duplicate value.\n if (!identifier.created) {\n return;\n }\n\n const enumObject = schemaToEnumObject({ plugin, schema });\n\n const expression = compiler.objectExpression({\n multiLine: true,\n obj: enumObject.obj,\n });\n const node = compiler.constVariable({\n assertion: 'const',\n comment: parseSchemaJsDoc({ schema }),\n exportConst: true,\n expression,\n name: identifier.name || '',\n });\n return node;\n};\n\nconst schemaToEnumObject = ({\n plugin,\n schema,\n}: {\n plugin: Plugin.Instance<Config>;\n schema: IR.SchemaObject;\n}) => {\n const typeofItems: Array<\n | 'bigint'\n | 'boolean'\n | 'function'\n | 'number'\n | 'object'\n | 'string'\n | 'symbol'\n | 'undefined'\n > = [];\n\n const obj = (schema.items ?? []).map((item) => {\n const typeOfItemConst = typeof item.const;\n\n if (!typeofItems.includes(typeOfItemConst)) {\n // track types of enum values because some modes support\n // only enums with string and number types\n typeofItems.push(typeOfItemConst);\n }\n\n let key: string | undefined;\n if (item.title) {\n key = item.title;\n } else if (typeOfItemConst === 'number' || typeOfItemConst === 'string') {\n key = `${item.const}`;\n } else if (typeOfItemConst === 'boolean') {\n key = item.const ? 'true' : 'false';\n } else if (item.const === null) {\n key = 'null';\n }\n\n if (key) {\n key = stringCase({\n case: plugin.enumsCase,\n stripLeadingSeparators: false,\n value: key,\n });\n\n numberRegExp.lastIndex = 0;\n // TypeScript enum keys cannot be numbers\n if (\n numberRegExp.test(key) &&\n (plugin.enums === 'typescript' ||\n plugin.enums === 'typescript+namespace')\n ) {\n key = `_${key}`;\n }\n }\n\n return {\n comments: parseSchemaJsDoc({ schema: item }),\n key,\n value: item.const,\n };\n });\n\n return {\n obj,\n typeofItems,\n };\n};\n\nconst addTypeEnum = ({\n $ref,\n context,\n plugin,\n schema,\n state,\n}: {\n $ref: string;\n context: IR.Context;\n plugin: Plugin.Instance<Config>;\n schema: SchemaWithType<'enum'>;\n state: State | undefined;\n}): ts.TypeAliasDeclaration | undefined => {\n const file = context.file({ id: typesId })!;\n const identifier = file.identifier({\n $ref,\n create: true,\n namespace: 'type',\n });\n\n // TODO: parser - this is the old parser behavior where we would NOT\n // print nested enum identifiers if they already exist. This is a\n // blocker for referencing these identifiers within the file as\n // we cannot guarantee just because they have a duplicate identifier,\n // they have a duplicate value.\n if (\n !identifier.created &&\n !isRefOpenApiComponent($ref) &&\n plugin.enums !== 'typescript+namespace'\n ) {\n return;\n }\n\n const type = schemaToType({\n context,\n plugin,\n schema: {\n ...schema,\n type: undefined,\n },\n state,\n });\n\n if (type) {\n const node = compiler.typeAliasDeclaration({\n comment: parseSchemaJsDoc({ schema }),\n exportType: true,\n name: identifier.name || '',\n type,\n });\n return node;\n }\n};\n\nconst addTypeScriptEnum = ({\n $ref,\n context,\n plugin,\n schema,\n state,\n}: {\n $ref: string;\n context: IR.Context;\n plugin: Plugin.Instance<Config>;\n schema: SchemaWithType<'enum'>;\n state: State | undefined;\n}) => {\n const file = context.file({ id: typesId })!;\n const identifier = file.identifier({\n $ref,\n create: true,\n namespace: 'value',\n });\n\n // TODO: parser - this is the old parser behavior where we would NOT\n // print nested enum identifiers if they already exist. This is a\n // blocker for referencing these identifiers within the file as\n // we cannot guarantee just because they have a duplicate identifier,\n // they have a duplicate value.\n if (!identifier.created && plugin.enums !== 'typescript+namespace') {\n return;\n }\n\n const enumObject = schemaToEnumObject({ plugin, schema });\n\n // TypeScript enums support only string and number values so we need to fallback to types\n if (\n enumObject.typeofItems.filter(\n (type) => type !== 'number' && type !== 'string',\n ).length\n ) {\n const node = addTypeEnum({\n $ref,\n context,\n plugin,\n schema,\n state,\n });\n return node;\n }\n\n const node = compiler.enumDeclaration({\n leadingComment: parseSchemaJsDoc({ schema }),\n name: identifier.name || '',\n obj: enumObject.obj,\n });\n return node;\n};\n\nconst arrayTypeToIdentifier = ({\n context,\n namespace,\n plugin,\n schema,\n state,\n}: {\n context: IR.Context;\n namespace: Array<ts.Statement>;\n plugin: Plugin.Instance<Config>;\n schema: SchemaWithType<'array'>;\n state: State | undefined;\n}): ts.TypeNode => {\n if (!schema.items) {\n return compiler.typeArrayNode(\n compiler.keywordTypeNode({\n keyword: 'unknown',\n }),\n );\n }\n\n schema = deduplicateSchema({ schema });\n\n const itemTypes: Array<ts.TypeNode> = [];\n\n // at least one item is guaranteed (or at least was before read/write only)\n for (const item of schema.items!) {\n const type = schemaToType({\n context,\n namespace,\n plugin,\n schema: item,\n state,\n });\n\n if (type) {\n itemTypes.push(type);\n }\n }\n\n if (itemTypes.length === 1) {\n return compiler.typeArrayNode(itemTypes[0]!);\n }\n\n if (schema.logicalOperator === 'and') {\n return compiler.typeArrayNode(\n compiler.typeIntersectionNode({ types: itemTypes }),\n );\n }\n\n return compiler.typeArrayNode(compiler.typeUnionNode({ types: itemTypes }));\n};\n\nconst booleanTypeToIdentifier = ({\n schema,\n}: {\n context: IR.Context;\n namespace: Array<ts.Statement>;\n schema: SchemaWithType<'boolean'>;\n}): ts.TypeNode => {\n if (schema.const !== undefined) {\n return compiler.literalTypeNode({\n literal: compiler.ots.boolean(schema.const as boolean),\n });\n }\n\n return compiler.keywordTypeNode({\n keyword: 'boolean',\n });\n};\n\nconst enumTypeToIdentifier = ({\n $ref,\n context,\n namespace,\n plugin,\n schema,\n state,\n}: {\n $ref?: string;\n context: IR.Context;\n namespace: Array<ts.Statement>;\n plugin: Plugin.Instance<Config>;\n schema: SchemaWithType<'enum'>;\n state: State | undefined;\n}): ts.TypeNode | undefined => {\n const file = context.file({ id: typesId })!;\n const isRefComponent = $ref ? isRefOpenApiComponent($ref) : false;\n const shouldExportEnum = isRefComponent || Boolean(plugin.exportInlineEnums);\n\n if ($ref && shouldExportEnum) {\n // when enums are disabled (default), emit only reusable components\n // as types, otherwise the output would be broken if we skipped all enums\n if (!plugin.enums) {\n const typeNode = addTypeEnum({\n $ref,\n context,\n plugin,\n schema,\n state,\n });\n if (typeNode) {\n file.add(typeNode);\n }\n }\n\n if (plugin.enums === 'javascript') {\n const typeNode = addTypeEnum({\n $ref,\n context,\n plugin,\n schema,\n state,\n });\n if (typeNode) {\n file.add(typeNode);\n }\n\n const objectNode = addJavaScriptEnum({\n $ref,\n context,\n plugin,\n schema,\n });\n if (objectNode) {\n file.add(objectNode);\n }\n }\n\n if (plugin.enums === 'typescript') {\n const enumNode = addTypeScriptEnum({\n $ref,\n context,\n plugin,\n schema,\n state,\n });\n if (enumNode) {\n file.add(enumNode);\n }\n }\n\n if (plugin.enums === 'typescript+namespace') {\n const enumNode = addTypeScriptEnum({\n $ref,\n context,\n plugin,\n schema,\n state,\n });\n if (enumNode) {\n if (isRefComponent) {\n file.add(enumNode);\n } else {\n // emit enum inside TypeScript namespace\n namespace.push(enumNode);\n }\n }\n }\n }\n\n const type = schemaToType({\n context,\n plugin,\n schema: {\n ...schema,\n type: undefined,\n },\n state,\n });\n return type;\n};\n\nconst numberTypeToIdentifier = ({\n context,\n schema,\n}: {\n context: IR.Context;\n namespace: Array<ts.Statement>;\n schema: SchemaWithType<'integer' | 'number'>;\n}): ts.TypeNode => {\n if (schema.const !== undefined) {\n return compiler.literalTypeNode({\n literal: compiler.ots.number(schema.const as number),\n });\n }\n\n if (schema.type === 'integer' && schema.format === 'int64') {\n // TODO: parser - add ability to skip type transformers\n if (context.config.plugins['@hey-api/transformers']?.bigInt) {\n return compiler.typeReferenceNode({ typeName: 'bigint' });\n }\n }\n\n return compiler.keywordTypeNode({\n keyword: 'number',\n });\n};\n\nconst objectTypeToIdentifier = ({\n context,\n namespace,\n plugin,\n schema,\n state,\n}: {\n context: IR.Context;\n namespace: Array<ts.Statement>;\n plugin: Plugin.Instance<Config>;\n schema: SchemaWithType<'object'>;\n state: State | undefined;\n}): ts.TypeNode | undefined => {\n // TODO: parser - handle constants\n let indexProperty: Property | undefined;\n const schemaProperties: Array<Property> = [];\n let indexPropertyItems: Array<IR.SchemaObject> = [];\n const required = schema.required ?? [];\n let hasOptionalProperties = false;\n let hasSkippedProperties = false;\n\n for (const name in schema.properties) {\n const property = schema.properties[name]!;\n\n const skip = shouldSkipSchema({\n schema: property,\n state,\n });\n\n if (skip) {\n hasSkippedProperties = true;\n continue;\n }\n\n const isRequired = required.includes(name);\n schemaProperties.push({\n comment: parseSchemaJsDoc({ schema: property }),\n isReadOnly: property.accessScope === 'read',\n isRequired,\n name: fieldName({ context, name }),\n type: schemaToType({\n $ref: `${irRef}${name}`,\n context,\n namespace,\n plugin,\n schema: property,\n state,\n }),\n });\n indexPropertyItems.push(property);\n\n if (!isRequired) {\n hasOptionalProperties = true;\n }\n }\n\n if (\n schema.additionalProperties &&\n (schema.additionalProperties.type !== 'never' || !indexPropertyItems.length)\n ) {\n if (schema.additionalProperties.type === 'never') {\n indexPropertyItems = [schema.additionalProperties];\n } else {\n indexPropertyItems.unshift(schema.additionalProperties);\n }\n\n if (hasOptionalProperties) {\n indexPropertyItems.push({\n type: 'undefined',\n });\n }\n\n indexProperty = {\n isRequired: true,\n name: 'key',\n type: schemaToType({\n context,\n namespace,\n plugin,\n schema:\n indexPropertyItems.length === 1\n ? indexPropertyItems[0]!\n : {\n items: indexPropertyItems,\n logicalOperator: 'or',\n },\n state,\n }),\n };\n }\n\n if (hasSkippedProperties && !schemaProperties.length && !indexProperty) {\n return;\n }\n\n return compiler.typeInterfaceNode({\n indexProperty,\n properties: schemaProperties,\n useLegacyResolution: false,\n });\n};\n\nconst stringTypeToIdentifier = ({\n context,\n schema,\n}: {\n context: IR.Context;\n namespace: Array<ts.Statement>;\n schema: SchemaWithType<'string'>;\n}): ts.TypeNode => {\n if (schema.const !== undefined) {\n return compiler.literalTypeNode({\n literal: compiler.stringLiteral({ text: schema.const as string }),\n });\n }\n\n if (schema.format) {\n if (schema.format === 'binary') {\n return compiler.typeUnionNode({\n types: [\n compiler.typeReferenceNode({\n typeName: 'Blob',\n }),\n compiler.typeReferenceNode({\n typeName: 'File',\n }),\n ],\n });\n }\n\n if (schema.format === 'date-time' || schema.format === 'date') {\n // TODO: parser - add ability to skip type transformers\n if (context.config.plugins['@hey-api/transformers']?.dates) {\n return compiler.typeReferenceNode({ typeName: 'Date' });\n }\n }\n }\n\n return compiler.keywordTypeNode({\n keyword: 'string',\n });\n};\n\nconst tupleTypeToIdentifier = ({\n context,\n namespace,\n plugin,\n schema,\n state,\n}: {\n context: IR.Context;\n namespace: Array<ts.Statement>;\n plugin: Plugin.Instance<Config>;\n schema: SchemaWithType<'tuple'>;\n state: State | undefined;\n}): ts.TypeNode => {\n let itemTypes: Array<ts.Expression | ts.TypeNode> = [];\n\n if (schema.const && Array.isArray(schema.const)) {\n itemTypes = schema.const.map((value) => {\n const expression = compiler.valueToExpression({ value });\n return expression ?? compiler.identifier({ text: 'unknown' });\n });\n } else if (schema.items) {\n for (const item of schema.items) {\n const type = schemaToType({\n context,\n namespace,\n plugin,\n schema: item,\n state,\n });\n\n if (type) {\n itemTypes.push(type);\n }\n }\n }\n\n return compiler.typeTupleNode({\n types: itemTypes,\n });\n};\n\nconst schemaTypeToIdentifier = ({\n $ref,\n context,\n namespace,\n plugin,\n schema,\n state,\n}: {\n $ref?: string;\n context: IR.Context;\n namespace: Array<ts.Statement>;\n plugin: Plugin.Instance<Config>;\n schema: IR.SchemaObject;\n state: State | undefined;\n}): ts.TypeNode | undefined => {\n switch (schema.type as Required<IR.SchemaObject>['type']) {\n case 'array':\n return arrayTypeToIdentifier({\n context,\n namespace,\n plugin,\n schema: schema as SchemaWithType<'array'>,\n state,\n });\n case 'boolean':\n return booleanTypeToIdentifier({\n context,\n namespace,\n schema: schema as SchemaWithType<'boolean'>,\n });\n case 'enum':\n return enumTypeToIdentifier({\n $ref,\n context,\n namespace,\n plugin,\n schema: schema as SchemaWithType<'enum'>,\n state,\n });\n case 'integer':\n case 'number':\n return numberTypeToIdentifier({\n context,\n namespace,\n schema: schema as SchemaWithType<'integer' | 'number'>,\n });\n case 'never':\n return compiler.keywordTypeNode({\n keyword: 'never',\n });\n case 'null':\n return compiler.literalTypeNode({\n literal: compiler.null(),\n });\n case 'object':\n return objectTypeToIdentifier({\n context,\n namespace,\n plugin,\n schema: schema as SchemaWithType<'object'>,\n state,\n });\n case 'string':\n return stringTypeToIdentifier({\n context,\n namespace,\n schema: schema as SchemaWithType<'string'>,\n });\n case 'tuple':\n return tupleTypeToIdentifier({\n context,\n namespace,\n plugin,\n schema: schema as SchemaWithType<'tuple'>,\n state,\n });\n case 'undefined':\n return compiler.keywordTypeNode({\n keyword: 'undefined',\n });\n case 'unknown':\n return compiler.keywordTypeNode({\n keyword: 'unknown',\n });\n case 'void':\n return compiler.keywordTypeNode({\n keyword: 'void',\n });\n }\n};\n\nconst irParametersToIrSchema = ({\n parameters,\n}: {\n parameters: Record<string, IR.ParameterObject>;\n}): IR.SchemaObject => {\n const irSchema: IR.SchemaObject = {\n type: 'object',\n };\n\n if (parameters) {\n const properties: Record<string, IR.SchemaObject> = {};\n const required: Array<string> = [];\n\n for (const name in parameters) {\n const parameter = parameters[name]!;\n\n properties[name] = deduplicateSchema({\n schema: parameter.schema,\n });\n\n if (parameter.required) {\n required.push(name);\n }\n }\n\n irSchema.properties = properties;\n\n if (required.length) {\n irSchema.required = required;\n }\n }\n\n return irSchema;\n};\n\nconst operationToDataType = ({\n context,\n operation,\n plugin,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n plugin: Plugin.Instance<Config>;\n}) => {\n const file = context.file({ id: typesId })!;\n const data: IR.SchemaObject = {\n type: 'object',\n };\n const dataRequired: Array<string> = [];\n\n if (!data.properties) {\n data.properties = {};\n }\n\n if (operation.body) {\n data.properties.body = operation.body.schema;\n\n if (operation.body.required) {\n dataRequired.push('body');\n }\n } else {\n data.properties.body = {\n type: 'never',\n };\n }\n\n // TODO: parser - handle cookie parameters\n\n // do not set headers to never so we can always pass arbitrary values\n if (operation.parameters?.header) {\n data.properties.headers = irParametersToIrSchema({\n parameters: operation.parameters.header,\n });\n\n if (data.properties.headers.required) {\n dataRequired.push('headers');\n }\n }\n\n if (operation.parameters?.path) {\n data.properties.path = irParametersToIrSchema({\n parameters: operation.parameters.path,\n });\n\n if (data.properties.path.required) {\n dataRequired.push('path');\n }\n } else {\n data.properties.path = {\n type: 'never',\n };\n }\n\n if (operation.parameters?.query) {\n data.properties.query = irParametersToIrSchema({\n parameters: operation.parameters.query,\n });\n\n if (data.properties.query.required) {\n dataRequired.push('query');\n }\n } else {\n data.properties.query = {\n type: 'never',\n };\n }\n\n data.properties.url = {\n const: operation.path,\n type: 'string',\n };\n dataRequired.push('url');\n\n data.required = dataRequired;\n\n const identifier = file.identifier({\n $ref: operationIrRef({ id: operation.id, type: 'data' }),\n create: true,\n namespace: 'type',\n });\n const type = schemaToType({\n context,\n plugin,\n schema: data,\n state:\n plugin.readOnlyWriteOnlyBehavior === 'off'\n ? undefined\n : {\n accessScope: 'write',\n },\n });\n\n if (type) {\n const node = compiler.typeAliasDeclaration({\n exportType: true,\n name: identifier.name || '',\n type,\n });\n file.add(node);\n }\n};\n\nconst operationToType = ({\n context,\n operation,\n plugin,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n plugin: Plugin.Instance<Config>;\n}) => {\n operationToDataType({\n context,\n operation,\n plugin,\n });\n\n const file = context.file({ id: typesId })!;\n\n const { error, errors, response, responses } =\n operationResponsesMap(operation);\n\n if (errors) {\n const identifierErrors = file.identifier({\n $ref: operationIrRef({ id: operation.id, type: 'errors' }),\n create: true,\n namespace: 'type',\n });\n if (identifierErrors.name) {\n const type = schemaToType({\n context,\n plugin,\n schema: errors,\n state:\n plugin.readOnlyWriteOnlyBehavior === 'off'\n ? undefined\n : {\n accessScope: 'read',\n },\n });\n\n if (type) {\n const node = compiler.typeAliasDeclaration({\n exportType: true,\n name: identifierErrors.name,\n type,\n });\n file.add(node);\n }\n\n if (error) {\n const identifierError = file.identifier({\n $ref: operationIrRef({ id: operation.id, type: 'error' }),\n create: true,\n namespace: 'type',\n });\n if (identifierError.name) {\n const errorsType = compiler.typeReferenceNode({\n typeName: identifierErrors.name,\n });\n const keyofType = ts.factory.createTypeOperatorNode(\n ts.SyntaxKind.KeyOfKeyword,\n errorsType,\n );\n const node = compiler.typeAliasDeclaration({\n exportType: true,\n name: identifierError.name,\n type: compiler.indexedAccessTypeNode({\n indexType: keyofType,\n objectType: errorsType,\n }),\n });\n file.add(node);\n }\n }\n }\n }\n\n if (responses) {\n const identifierResponses = file.identifier({\n $ref: operationIrRef({ id: operation.id, type: 'responses' }),\n create: true,\n namespace: 'type',\n });\n if (identifierResponses.name) {\n const type = schemaToType({\n context,\n plugin,\n schema: responses,\n state:\n plugin.readOnlyWriteOnlyBehavior === 'off'\n ? undefined\n : {\n accessScope: 'read',\n },\n });\n\n if (type) {\n const node = compiler.typeAliasDeclaration({\n exportType: true,\n name: identifierResponses.name,\n type,\n });\n file.add(node);\n }\n\n if (response) {\n const identifierResponse = file.identifier({\n $ref: operationIrRef({ id: operation.id, type: 'response' }),\n create: true,\n namespace: 'type',\n });\n if (identifierResponse.name) {\n const responsesType = compiler.typeReferenceNode({\n typeName: identifierResponses.name,\n });\n const keyofType = ts.factory.createTypeOperatorNode(\n ts.SyntaxKind.KeyOfKeyword,\n responsesType,\n );\n const node = compiler.typeAliasDeclaration({\n exportType: true,\n name: identifierResponse.name,\n type: compiler.indexedAccessTypeNode({\n indexType: keyofType,\n objectType: responsesType,\n }),\n });\n file.add(node);\n }\n }\n }\n }\n};\n\nexport const schemaToType = ({\n $ref,\n context,\n namespace = [],\n plugin,\n schema,\n state,\n}: {\n $ref?: string;\n context: IR.Context;\n namespace?: Array<ts.Statement>;\n plugin: Plugin.Instance<Config>;\n schema: IR.SchemaObject;\n state: State | undefined;\n}): ts.TypeNode | undefined => {\n const file = context.file({ id: typesId })!;\n\n let type: ts.TypeNode | undefined;\n\n if (schema.$ref) {\n const refSchema = context.resolveIrRef<IR.SchemaObject>(schema.$ref);\n const finalRef = scopeToRef({\n $ref: schema.$ref,\n accessScope: refSchema.accessScopes?.length\n ? state?.accessScope\n : undefined,\n plugin,\n });\n const identifier = file.identifier({\n $ref: finalRef,\n create: true,\n namespace: 'type',\n });\n type = compiler.typeReferenceNode({\n typeName: identifier.name || '',\n });\n } else if (schema.type) {\n type = schemaTypeToIdentifier({\n $ref,\n context,\n namespace,\n plugin,\n schema,\n state,\n });\n } else if (schema.items) {\n schema = deduplicateSchema({ schema });\n if (schema.items) {\n const itemTypes: Array<ts.TypeNode> = [];\n\n for (const item of schema.items) {\n const type = schemaToType({\n context,\n namespace,\n plugin,\n schema: item,\n state,\n });\n if (type) {\n itemTypes.push(type);\n }\n }\n\n type =\n schema.logicalOperator === 'and'\n ? compiler.typeIntersectionNode({ types: itemTypes })\n : compiler.typeUnionNode({ types: itemTypes });\n } else {\n type = schemaToType({\n context,\n namespace,\n plugin,\n schema,\n state,\n });\n }\n } else {\n // catch-all fallback for failed schemas\n type = schemaTypeToIdentifier({\n context,\n namespace,\n plugin,\n schema: {\n type: 'unknown',\n },\n state,\n });\n }\n\n // emit nodes only if $ref points to a reusable component\n if ($ref && isRefOpenApiComponent($ref)) {\n // emit namespace if it has any members\n if (namespace.length) {\n const identifier = file.identifier({\n $ref,\n create: true,\n namespace: 'value',\n });\n const node = compiler.namespaceDeclaration({\n name: identifier.name || '',\n statements: namespace,\n });\n file.add(node);\n }\n\n // enum handler emits its own artifacts\n if (schema.type !== 'enum' && type) {\n const identifier = file.identifier({\n $ref,\n create: true,\n namespace: 'type',\n });\n const node = compiler.typeAliasDeclaration({\n comment: parseSchemaJsDoc({ schema }),\n exportType: true,\n name: identifier.name || '',\n type,\n });\n file.add(node);\n }\n }\n\n return type;\n};\n\nexport const handler: Plugin.Handler<Config> = ({ context, plugin }) => {\n const file = context.createFile({\n exportFromIndex: plugin.exportFromIndex,\n id: typesId,\n identifierCase: plugin.identifierCase,\n path: plugin.output,\n });\n\n // reserve identifier for ClientOptions\n const clientOptions = file.identifier({\n $ref: 'ClientOptions',\n create: true,\n namespace: 'type',\n });\n\n context.subscribe('schema', ({ $ref, schema }) => {\n if (\n !schema.accessScopes?.length ||\n plugin.readOnlyWriteOnlyBehavior === 'off'\n ) {\n schemaToType({\n $ref,\n context,\n plugin,\n schema,\n state: undefined,\n });\n return;\n }\n\n // we need both scopes because as soon as the schema contains one,\n // it cannot be used for both payloads and responses\n schemaToType({\n $ref: scopeToRef({\n $ref,\n accessScope: 'read',\n plugin,\n }),\n context,\n plugin,\n schema,\n state: {\n accessScope: 'read',\n },\n });\n schemaToType({\n $ref: scopeToRef({\n $ref,\n accessScope: 'write',\n plugin,\n }),\n context,\n plugin,\n schema,\n state: {\n accessScope: 'write',\n },\n });\n });\n\n context.subscribe('parameter', ({ $ref, parameter }) => {\n schemaToType({\n $ref,\n context,\n plugin,\n schema: parameter.schema,\n state: undefined,\n });\n });\n\n context.subscribe('requestBody', ({ $ref, requestBody }) => {\n schemaToType({\n $ref,\n context,\n plugin,\n schema: requestBody.schema,\n state:\n plugin.readOnlyWriteOnlyBehavior === 'off'\n ? undefined\n : {\n accessScope: 'write',\n },\n });\n });\n\n context.subscribe('operation', ({ operation }) => {\n operationToType({\n context,\n operation,\n plugin,\n });\n });\n\n const servers: Array<IR.ServerObject> = [];\n\n context.subscribe('server', ({ server }) => {\n servers.push(server);\n });\n\n context.subscribe('after', () => {\n createClientOptions({\n context,\n identifier: clientOptions,\n plugin,\n servers,\n });\n });\n};\n","import type { Plugin } from '../../types';\nimport { handler } from './plugin';\nimport { handlerLegacy } from './plugin-legacy';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _handler: handler,\n _handlerLegacy: handlerLegacy,\n enums: false,\n enumsCase: 'SCREAMING_SNAKE_CASE',\n exportFromIndex: true,\n exportInlineEnums: false,\n identifierCase: 'PascalCase',\n name: '@hey-api/typescript',\n output: 'types',\n readOnlyWriteOnlyBehavior: 'split',\n readableNameBuilder: '{{name}}Readable',\n style: 'preserve',\n tree: false,\n writableNameBuilder: '{{name}}Writable',\n};\n\n/**\n * Type helper for `@hey-api/typescript` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { ImportExportItemObject } from '../../../compiler/utils';\nimport type { IR } from '../../../ir/types';\nimport { getClientPlugin } from '../../@hey-api/client-core/utils';\nimport { operationOptionsType } from '../../@hey-api/sdk/plugin';\nimport {\n importIdentifierError,\n importIdentifierResponse,\n} from '../../@hey-api/typescript/ref';\nimport type { PluginInstance } from './types';\n\nexport const useTypeData = ({\n context,\n operation,\n plugin,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n plugin: PluginInstance;\n}) => {\n const file = context.file({ id: plugin.name })!;\n\n const typeData = operationOptionsType({\n context,\n file,\n operation,\n });\n return typeData;\n};\n\nexport const useTypeError = ({\n context,\n operation,\n plugin,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n plugin: PluginInstance;\n}) => {\n const file = context.file({ id: plugin.name })!;\n const identifierError = importIdentifierError({ context, file, operation });\n let typeError: ImportExportItemObject = {\n asType: true,\n name: identifierError.name || '',\n };\n if (!typeError.name) {\n typeError = file.import({\n asType: true,\n module: plugin.name,\n name: 'DefaultError',\n });\n }\n const client = getClientPlugin(context.config);\n if (client.name === '@hey-api/client-axios') {\n const axiosError = file.import({\n asType: true,\n module: 'axios',\n name: 'AxiosError',\n });\n typeError = {\n ...axiosError,\n name: `${axiosError.name}<${typeError.name}>`,\n };\n }\n return typeError;\n};\n\nexport const useTypeResponse = ({\n context,\n operation,\n plugin,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n plugin: PluginInstance;\n}) => {\n const file = context.file({ id: plugin.name })!;\n const identifierResponse = importIdentifierResponse({\n context,\n file,\n operation,\n });\n const typeResponse = identifierResponse.name || 'unknown';\n return typeResponse;\n};\n","import { compiler, type Property } from '../../../compiler';\nimport { clientApi } from '../../../generate/client';\nimport { hasOperationDataRequired } from '../../../ir/operation';\nimport type { IR } from '../../../ir/types';\nimport { getClientBaseUrlKey } from '../../@hey-api/client-core/utils';\nimport { serviceFunctionIdentifier } from '../../@hey-api/sdk/plugin-legacy';\nimport type { PluginInstance } from './types';\nimport { useTypeData } from './useType';\n\nconst createQueryKeyFn = 'createQueryKey';\nexport const queryKeyName = 'QueryKey';\nconst TOptionsType = 'TOptions';\n\nconst infiniteIdentifier = compiler.identifier({ text: 'infinite' });\nconst optionsIdentifier = compiler.identifier({ text: 'options' });\n\nexport const createQueryKeyFunction = ({\n context,\n plugin,\n}: {\n context: IR.Context;\n plugin: PluginInstance;\n}) => {\n const file = context.file({ id: plugin.name })!;\n\n const identifierCreateQueryKey = file.identifier({\n $ref: `#/ir/${createQueryKeyFn}`,\n create: true,\n namespace: 'value',\n });\n\n if (identifierCreateQueryKey.name) {\n const returnType = compiler.indexedAccessTypeNode({\n indexType: compiler.literalTypeNode({\n literal: compiler.ots.number(0),\n }),\n objectType: compiler.typeReferenceNode({\n typeArguments: [compiler.typeReferenceNode({ typeName: TOptionsType })],\n typeName: queryKeyName,\n }),\n });\n\n const fn = compiler.constVariable({\n expression: compiler.arrowFunction({\n multiLine: true,\n parameters: [\n {\n name: 'id',\n type: compiler.typeReferenceNode({ typeName: 'string' }),\n },\n {\n isRequired: false,\n name: 'options',\n type: compiler.typeReferenceNode({ typeName: TOptionsType }),\n },\n {\n isRequired: false,\n name: 'infinite',\n type: compiler.typeReferenceNode({ typeName: 'boolean' }),\n },\n ],\n returnType: compiler.typeTupleNode({\n types: [returnType],\n }),\n statements: [\n compiler.constVariable({\n assertion: returnType,\n expression: compiler.objectExpression({\n multiLine: false,\n obj: [\n {\n key: '_id',\n value: compiler.identifier({ text: 'id' }),\n },\n {\n key: getClientBaseUrlKey(context.config),\n value: compiler.identifier({\n text: `(options?.client ?? _heyApiClient).getConfig().${getClientBaseUrlKey(context.config)}`,\n }),\n },\n ],\n }),\n name: 'params',\n typeName: returnType,\n }),\n compiler.ifStatement({\n expression: infiniteIdentifier,\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: '_infinite',\n }),\n right: infiniteIdentifier,\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: optionsIdentifier,\n isOptional: true,\n name: compiler.identifier({ text: 'body' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'body',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'body',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: optionsIdentifier,\n isOptional: true,\n name: compiler.identifier({ text: 'headers' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'headers',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'headers',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: optionsIdentifier,\n isOptional: true,\n name: compiler.identifier({ text: 'path' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'path',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'path',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: optionsIdentifier,\n isOptional: true,\n name: compiler.identifier({ text: 'query' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'query',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'query',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.returnStatement({\n expression: compiler.arrayLiteralExpression({\n elements: [compiler.identifier({ text: 'params' })],\n }),\n }),\n ],\n types: [\n {\n extends: compiler.typeReferenceNode({\n typeName: compiler.identifier({\n text: clientApi.Options.name,\n }),\n }),\n name: TOptionsType,\n },\n ],\n }),\n name: identifierCreateQueryKey.name,\n });\n file.add(fn);\n }\n};\n\nconst createQueryKeyLiteral = ({\n context,\n id,\n isInfinite,\n plugin,\n}: {\n context: IR.Context;\n id: string;\n isInfinite?: boolean;\n plugin: PluginInstance;\n}) => {\n const file = context.file({ id: plugin.name })!;\n const identifierCreateQueryKey = file.identifier({\n $ref: `#/ir/${createQueryKeyFn}`,\n namespace: 'value',\n });\n const createQueryKeyCallExpression = compiler.callExpression({\n functionName: identifierCreateQueryKey.name || '',\n parameters: [\n compiler.ots.string(id),\n 'options',\n isInfinite ? compiler.ots.boolean(true) : undefined,\n ],\n });\n return createQueryKeyCallExpression;\n};\n\nexport const createQueryKeyType = ({\n context,\n plugin,\n}: {\n context: IR.Context;\n plugin: PluginInstance;\n}) => {\n const file = context.file({ id: plugin.name })!;\n\n const properties: Property[] = [\n {\n name: '_id',\n type: compiler.keywordTypeNode({\n keyword: 'string',\n }),\n },\n {\n isRequired: false,\n name: '_infinite',\n type: compiler.keywordTypeNode({\n keyword: 'boolean',\n }),\n },\n ];\n\n const queryKeyType = compiler.typeAliasDeclaration({\n exportType: true,\n name: queryKeyName,\n type: compiler.typeTupleNode({\n types: [\n compiler.typeIntersectionNode({\n types: [\n compiler.typeReferenceNode({\n typeName: `Pick<${TOptionsType}, '${getClientBaseUrlKey(context.config)}' | 'body' | 'headers' | 'path' | 'query'>`,\n }),\n compiler.typeInterfaceNode({\n properties,\n useLegacyResolution: true,\n }),\n ],\n }),\n ],\n }),\n typeParameters: [\n {\n extends: compiler.typeReferenceNode({\n typeName: compiler.identifier({\n text: clientApi.Options.name,\n }),\n }),\n name: TOptionsType,\n },\n ],\n });\n file.add(queryKeyType);\n};\n\nexport const queryKeyFunctionIdentifier = ({\n context,\n isInfinite,\n operation,\n}: {\n context: IR.Context;\n isInfinite?: boolean;\n operation: IR.OperationObject;\n}) =>\n `${serviceFunctionIdentifier({\n config: context.config,\n id: operation.id,\n operation,\n })}${isInfinite ? 'Infinite' : ''}QueryKey`;\n\nexport const queryKeyStatement = ({\n context,\n isInfinite,\n operation,\n plugin,\n typeQueryKey,\n}: {\n context: IR.Context;\n isInfinite: boolean;\n operation: IR.OperationObject;\n plugin: PluginInstance;\n typeQueryKey?: string;\n}) => {\n const file = context.file({ id: plugin.name })!;\n const typeData = useTypeData({ context, operation, plugin });\n const name = queryKeyFunctionIdentifier({\n context,\n isInfinite,\n operation,\n });\n const identifierQueryKey = file.identifier({\n $ref: `#/queryKey/${name}`,\n create: true,\n namespace: 'value',\n });\n const statement = compiler.constVariable({\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired: hasOperationDataRequired(operation),\n name: 'options',\n type: typeData,\n },\n ],\n returnType: isInfinite ? typeQueryKey : undefined,\n statements: createQueryKeyLiteral({\n context,\n id: operation.id,\n isInfinite,\n plugin,\n }),\n }),\n name: identifierQueryKey.name || '',\n });\n return statement;\n};\n","import ts from 'typescript';\n\nimport { compiler } from '../../../compiler';\nimport { tsNodeToString } from '../../../compiler/utils';\nimport { clientApi } from '../../../generate/client';\nimport {\n hasOperationDataRequired,\n operationPagination,\n} from '../../../ir/operation';\nimport type { IR } from '../../../ir/types';\nimport { serviceFunctionIdentifier } from '../../@hey-api/sdk/plugin-legacy';\nimport { schemaToType } from '../../@hey-api/typescript/plugin';\nimport {\n createQueryKeyFunction,\n createQueryKeyType,\n queryKeyFunctionIdentifier,\n queryKeyName,\n queryKeyStatement,\n} from './queryKey';\nimport type { PluginInstance, PluginState } from './types';\nimport { useTypeData, useTypeError, useTypeResponse } from './useType';\n\nconst createInfiniteParamsFn = 'createInfiniteParams';\nconst infiniteQueryOptionsFn = 'infiniteQueryOptions';\n\nconst createInfiniteParamsFunction = ({\n context,\n plugin,\n}: {\n context: IR.Context;\n plugin: PluginInstance;\n}) => {\n const file = context.file({ id: plugin.name })!;\n\n const fn = compiler.constVariable({\n expression: compiler.arrowFunction({\n multiLine: true,\n parameters: [\n {\n name: 'queryKey',\n type: compiler.typeReferenceNode({\n typeName: `QueryKey<${clientApi.Options.name}>`,\n }),\n },\n {\n name: 'page',\n type: compiler.typeReferenceNode({ typeName: 'K' }),\n },\n ],\n statements: [\n compiler.constVariable({\n expression: compiler.identifier({\n text: 'queryKey[0]',\n }),\n name: 'params',\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'body' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'body',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n assertion: 'any',\n spread: 'queryKey[0].body',\n },\n {\n assertion: 'any',\n spread: 'page.body',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'headers' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'headers',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'queryKey[0].headers',\n },\n {\n spread: 'page.headers',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'path' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'path',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n assertion: 'any',\n spread: 'queryKey[0].path',\n },\n {\n assertion: 'any',\n spread: 'page.path',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'query' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'query',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n assertion: 'any',\n spread: 'queryKey[0].query',\n },\n {\n assertion: 'any',\n spread: 'page.query',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.returnVariable({\n expression: compiler.asExpression({\n expression: compiler.asExpression({\n expression: compiler.identifier({ text: 'params' }),\n type: compiler.keywordTypeNode({ keyword: 'unknown' }),\n }),\n type: ts.factory.createTypeQueryNode(\n compiler.identifier({ text: 'page' }),\n ),\n }),\n }),\n ],\n types: [\n {\n extends: compiler.typeReferenceNode({\n typeName: compiler.identifier({\n text: `Pick<QueryKey<${clientApi.Options.name}>[0], 'body' | 'headers' | 'path' | 'query'>`,\n }),\n }),\n name: 'K',\n },\n ],\n }),\n name: createInfiniteParamsFn,\n });\n file.add(fn);\n};\n\nconst infiniteQueryOptionsFunctionIdentifier = ({\n context,\n operation,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n}) =>\n `${serviceFunctionIdentifier({\n config: context.config,\n id: operation.id,\n operation,\n })}InfiniteOptions`;\n\nexport const createInfiniteQueryOptions = ({\n context,\n operation,\n plugin,\n queryFn,\n state,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n plugin: PluginInstance;\n queryFn: string;\n state: PluginState;\n}) => {\n if (\n !plugin.infiniteQueryOptions ||\n !(['get', 'post'] as (typeof operation.method)[]).includes(operation.method)\n ) {\n return state;\n }\n\n const pagination = operationPagination({ context, operation });\n\n if (!pagination) {\n return state;\n }\n\n const file = context.file({ id: plugin.name })!;\n const isRequired = hasOperationDataRequired(operation);\n\n if (!state.hasInfiniteQueries) {\n state.hasInfiniteQueries = true;\n\n if (!state.hasCreateQueryKeyParamsFunction) {\n createQueryKeyType({ context, plugin });\n createQueryKeyFunction({ context, plugin });\n state.hasCreateQueryKeyParamsFunction = true;\n }\n\n if (!state.hasCreateInfiniteParamsFunction) {\n createInfiniteParamsFunction({ context, plugin });\n state.hasCreateInfiniteParamsFunction = true;\n }\n\n file.import({\n module: plugin.name,\n name: infiniteQueryOptionsFn,\n });\n\n state.typeInfiniteData = file.import({\n asType: true,\n module: plugin.name,\n name: 'InfiniteData',\n });\n }\n\n state.hasUsedQueryFn = true;\n\n const typeData = useTypeData({ context, operation, plugin });\n const typeError = useTypeError({ context, operation, plugin });\n const typeResponse = useTypeResponse({ context, operation, plugin });\n\n const typeQueryKey = `${queryKeyName}<${typeData}>`;\n const typePageObjectParam = `Pick<${typeQueryKey}[0], 'body' | 'headers' | 'path' | 'query'>`;\n // TODO: parser - this is a bit clunky, need to compile type to string because\n // `compiler.returnFunctionCall()` accepts only strings, should be cleaned up\n const type = schemaToType({\n context,\n plugin: context.config.plugins['@hey-api/typescript'] as Parameters<\n typeof schemaToType\n >[0]['plugin'],\n schema: pagination.schema,\n state: undefined,\n });\n const typePageParam = type\n ? `${tsNodeToString({\n node: type,\n unescape: true,\n })} | ${typePageObjectParam}`\n : `${typePageObjectParam}`;\n\n const node = queryKeyStatement({\n context,\n isInfinite: true,\n operation,\n plugin,\n typeQueryKey,\n });\n file.add(node);\n\n const infiniteQueryKeyName = queryKeyFunctionIdentifier({\n context,\n isInfinite: true,\n operation,\n });\n const identifierQueryKey = file.identifier({\n $ref: `#/queryKey/${infiniteQueryKeyName}`,\n namespace: 'value',\n });\n\n const statement = compiler.constVariable({\n // TODO: describe options, same as the actual function call\n comment: [],\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired,\n name: 'options',\n type: typeData,\n },\n ],\n statements: [\n compiler.returnFunctionCall({\n args: [\n compiler.objectExpression({\n comments: [\n {\n jsdoc: false,\n lines: ['@ts-ignore'],\n },\n ],\n obj: [\n {\n key: 'queryFn',\n value: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n destructure: [\n {\n name: 'pageParam',\n },\n {\n name: 'queryKey',\n },\n {\n name: 'signal',\n },\n ],\n },\n ],\n statements: [\n compiler.constVariable({\n comment: [\n {\n jsdoc: false,\n lines: ['@ts-ignore'],\n },\n ],\n expression: compiler.conditionalExpression({\n condition: compiler.binaryExpression({\n left: compiler.typeOfExpression({\n text: 'pageParam',\n }),\n operator: '===',\n right: compiler.ots.string('object'),\n }),\n whenFalse: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n key: pagination.in,\n value: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n key: pagination.name,\n value: compiler.identifier({\n text: 'pageParam',\n }),\n },\n ],\n }),\n },\n ],\n }),\n whenTrue: compiler.identifier({\n text: 'pageParam',\n }),\n }),\n name: 'page',\n typeName: typePageObjectParam,\n }),\n compiler.constVariable({\n expression: compiler.callExpression({\n functionName: createInfiniteParamsFn,\n parameters: ['queryKey', 'page'],\n }),\n name: 'params',\n }),\n compiler.constVariable({\n destructure: true,\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: queryFn,\n parameters: [\n compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'options',\n },\n {\n spread: 'params',\n },\n {\n key: 'signal',\n shorthand: true,\n value: compiler.identifier({\n text: 'signal',\n }),\n },\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n }),\n ],\n }),\n }),\n name: 'data',\n }),\n compiler.returnVariable({\n expression: 'data',\n }),\n ],\n }),\n },\n {\n key: 'queryKey',\n value: compiler.callExpression({\n functionName: identifierQueryKey.name || '',\n parameters: ['options'],\n }),\n },\n ],\n }),\n ],\n name: infiniteQueryOptionsFn,\n // TODO: better types syntax\n types: [\n typeResponse,\n typeError.name,\n `${typeof state.typeInfiniteData === 'string' ? state.typeInfiniteData : state.typeInfiniteData.name}<${typeResponse}>`,\n typeQueryKey,\n typePageParam,\n ],\n }),\n ],\n }),\n name: infiniteQueryOptionsFunctionIdentifier({\n context,\n operation,\n }),\n });\n file.add(statement);\n};\n","import { compiler } from '../../../compiler';\nimport type { IR } from '../../../ir/types';\nimport { serviceFunctionIdentifier } from '../../@hey-api/sdk/plugin-legacy';\nimport type { PluginInstance, PluginState } from './types';\nimport { useTypeData, useTypeError, useTypeResponse } from './useType';\n\nconst mutationOptionsFn = 'mutationOptions';\n\nconst mutationOptionsFunctionIdentifier = ({\n context,\n operation,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n}) =>\n `${serviceFunctionIdentifier({\n config: context.config,\n id: operation.id,\n operation,\n })}Mutation`;\n\nexport const createMutationOptions = ({\n context,\n operation,\n plugin,\n queryFn,\n state,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n plugin: PluginInstance;\n queryFn: string;\n state: PluginState;\n}) => {\n if (\n !plugin.mutationOptions ||\n !(\n ['delete', 'patch', 'post', 'put'] as (typeof operation.method)[]\n ).includes(operation.method)\n ) {\n return state;\n }\n\n const mutationsType =\n plugin.name === '@tanstack/angular-query-experimental' ||\n plugin.name === '@tanstack/svelte-query' ||\n plugin.name === '@tanstack/solid-query'\n ? 'MutationOptions'\n : 'UseMutationOptions';\n\n const file = context.file({ id: plugin.name })!;\n\n if (!state.hasMutations) {\n state.hasMutations = true;\n\n file.import({\n asType: true,\n module: plugin.name,\n name: mutationsType,\n });\n }\n\n state.hasUsedQueryFn = true;\n\n const typeData = useTypeData({ context, operation, plugin });\n const typeError = useTypeError({ context, operation, plugin });\n const typeResponse = useTypeResponse({ context, operation, plugin });\n // TODO: better types syntax\n const mutationType = `${mutationsType}<${typeResponse}, ${typeError.name}, ${typeData}>`;\n\n const expression = compiler.arrowFunction({\n parameters: [\n {\n isRequired: false,\n name: 'options',\n type: `Partial<${typeData}>`,\n },\n ],\n returnType: mutationType,\n statements: [\n compiler.constVariable({\n expression: compiler.objectExpression({\n obj: [\n {\n key: 'mutationFn',\n value: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n name: 'localOptions',\n },\n ],\n statements: [\n compiler.constVariable({\n destructure: true,\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: queryFn,\n parameters: [\n compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'options',\n },\n {\n spread: 'localOptions',\n },\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n }),\n ],\n }),\n }),\n name: 'data',\n }),\n compiler.returnVariable({\n expression: 'data',\n }),\n ],\n }),\n },\n ],\n }),\n name: mutationOptionsFn,\n typeName: mutationType,\n }),\n compiler.returnVariable({\n expression: mutationOptionsFn,\n }),\n ],\n });\n const statement = compiler.constVariable({\n // TODO: describe options, same as the actual function call\n comment: [],\n exportConst: true,\n expression,\n name: mutationOptionsFunctionIdentifier({ context, operation }),\n });\n file.add(statement);\n\n return state;\n};\n","import { compiler } from '../../../compiler';\nimport { hasOperationDataRequired } from '../../../ir/operation';\nimport type { IR } from '../../../ir/types';\nimport { serviceFunctionIdentifier } from '../../@hey-api/sdk/plugin-legacy';\nimport {\n createQueryKeyFunction,\n createQueryKeyType,\n queryKeyFunctionIdentifier,\n queryKeyStatement,\n} from './queryKey';\nimport type { PluginInstance, PluginState } from './types';\nimport { useTypeData } from './useType';\n\nconst queryOptionsFn = 'queryOptions';\n\nconst queryOptionsFunctionIdentifier = ({\n context,\n operation,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n}) =>\n `${serviceFunctionIdentifier({\n config: context.config,\n id: operation.id,\n operation,\n })}Options`;\n\nexport const createQueryOptions = ({\n context,\n operation,\n plugin,\n queryFn,\n state,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n plugin: PluginInstance;\n queryFn: string;\n state: PluginState;\n}) => {\n if (\n !plugin.queryOptions ||\n !(['get', 'post'] as (typeof operation.method)[]).includes(operation.method)\n ) {\n return state;\n }\n\n const file = context.file({ id: plugin.name })!;\n const isRequired = hasOperationDataRequired(operation);\n\n if (!state.hasQueries) {\n state.hasQueries = true;\n\n if (!state.hasCreateQueryKeyParamsFunction) {\n createQueryKeyType({ context, plugin });\n createQueryKeyFunction({ context, plugin });\n state.hasCreateQueryKeyParamsFunction = true;\n }\n\n file.import({\n module: plugin.name,\n name: queryOptionsFn,\n });\n }\n\n state.hasUsedQueryFn = true;\n\n const node = queryKeyStatement({\n context,\n isInfinite: false,\n operation,\n plugin,\n });\n file.add(node);\n\n const typeData = useTypeData({ context, operation, plugin });\n\n const queryKeyName = queryKeyFunctionIdentifier({\n context,\n isInfinite: false,\n operation,\n });\n const identifierQueryKey = file.identifier({\n $ref: `#/queryKey/${queryKeyName}`,\n namespace: 'value',\n });\n\n const statement = compiler.constVariable({\n // TODO: describe options, same as the actual function call\n comment: [],\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired,\n name: 'options',\n type: typeData,\n },\n ],\n statements: [\n compiler.returnFunctionCall({\n args: [\n compiler.objectExpression({\n obj: [\n {\n key: 'queryFn',\n value: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n destructure: [\n {\n name: 'queryKey',\n },\n {\n name: 'signal',\n },\n ],\n },\n ],\n statements: [\n compiler.constVariable({\n destructure: true,\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: queryFn,\n parameters: [\n compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'options',\n },\n {\n spread: 'queryKey[0]',\n },\n {\n key: 'signal',\n shorthand: true,\n value: compiler.identifier({\n text: 'signal',\n }),\n },\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n }),\n ],\n }),\n }),\n name: 'data',\n }),\n compiler.returnVariable({\n expression: 'data',\n }),\n ],\n }),\n },\n {\n key: 'queryKey',\n value: compiler.callExpression({\n functionName: identifierQueryKey.name || '',\n parameters: ['options'],\n }),\n },\n ],\n }),\n ],\n name: queryOptionsFn,\n }),\n ],\n }),\n name: queryOptionsFunctionIdentifier({ context, operation }),\n // TODO: add type error\n // TODO: AxiosError<PutSubmissionMetaError>\n });\n file.add(statement);\n\n return state;\n};\n","import { clientApi } from '../../../generate/client';\nimport { getServiceName } from '../../../utils/postprocess';\nimport { transformServiceName } from '../../../utils/transform';\nimport { clientId } from '../../@hey-api/client-core/utils';\nimport { sdkId } from '../../@hey-api/sdk/plugin';\nimport { serviceFunctionIdentifier } from '../../@hey-api/sdk/plugin-legacy';\nimport { createInfiniteQueryOptions } from './infiniteQueryOptions';\nimport { createMutationOptions } from './mutationOptions';\nimport { createQueryOptions } from './queryOptions';\nimport type { PluginHandler, PluginState } from './types';\n\nexport const handler: PluginHandler = ({ context, plugin }) => {\n const file = context.createFile({\n exportFromIndex: plugin.exportFromIndex,\n id: plugin.name,\n path: plugin.output,\n });\n\n const state: PluginState = {\n hasCreateInfiniteParamsFunction: false,\n hasCreateQueryKeyParamsFunction: false,\n hasInfiniteQueries: false,\n hasMutations: false,\n hasQueries: false,\n hasUsedQueryFn: false,\n typeInfiniteData: undefined!,\n };\n\n context.subscribe('before', () => {\n file.import({\n ...clientApi.Options,\n module: file.relativePathToFile({ context, id: sdkId }),\n });\n });\n\n context.subscribe('operation', ({ operation }) => {\n state.hasUsedQueryFn = false;\n\n const queryFn = [\n context.config.plugins['@hey-api/sdk']?.asClass &&\n transformServiceName({\n config: context.config,\n name: getServiceName(operation.tags?.[0] || 'default'),\n }),\n serviceFunctionIdentifier({\n config: context.config,\n handleIllegal: !context.config.plugins['@hey-api/sdk']?.asClass,\n id: operation.id,\n operation,\n }),\n ]\n .filter(Boolean)\n .join('.');\n\n createQueryOptions({\n context,\n operation,\n plugin,\n queryFn,\n state,\n });\n\n createInfiniteQueryOptions({\n context,\n operation,\n plugin,\n queryFn,\n state,\n });\n\n createMutationOptions({\n context,\n operation,\n plugin,\n queryFn,\n state,\n });\n\n if (state.hasUsedQueryFn) {\n file.import({\n module: file.relativePathToFile({ context, id: sdkId }),\n name: queryFn.split('.')[0]!,\n });\n }\n });\n\n context.subscribe('after', () => {\n if (state.hasQueries || state.hasInfiniteQueries) {\n file.import({\n alias: '_heyApiClient',\n module: file.relativePathToFile({ context, id: clientId }),\n name: 'client',\n });\n }\n });\n};\n","import ts from 'typescript';\n\nimport { compiler, type Property } from '../../../compiler';\nimport type { ImportExportItem } from '../../../compiler/module';\nimport type { ImportExportItemObject } from '../../../compiler/utils';\nimport { clientApi, clientModulePath } from '../../../generate/client';\nimport { relativeModulePath } from '../../../generate/utils';\nimport { getPaginationKeywordsRegExp } from '../../../ir/pagination';\nimport type { IR } from '../../../ir/types';\nimport { isOperationParameterRequired } from '../../../openApi';\nimport { getOperationKey } from '../../../openApi/common/parser/operation';\nimport type {\n Client,\n Method,\n Model,\n Operation,\n OperationParameter,\n} from '../../../types/client';\nimport type { Config } from '../../../types/config';\nimport type { Files } from '../../../types/utils';\nimport { getConfig, isLegacyClient } from '../../../utils/config';\nimport { transformServiceName } from '../../../utils/transform';\nimport {\n getClientBaseUrlKey,\n getClientPlugin,\n} from '../../@hey-api/client-core/utils';\nimport {\n generateImport,\n operationDataTypeName,\n operationErrorTypeName,\n operationOptionsLegacyParserType,\n operationResponseTypeName,\n serviceFunctionIdentifier,\n} from '../../@hey-api/sdk/plugin-legacy';\nimport type { Plugin } from '../../types';\nimport type { Config as AngularQueryConfig } from '../angular-query-experimental';\nimport type { Config as ReactQueryConfig } from '../react-query';\nimport type { Config as SolidQueryConfig } from '../solid-query';\nimport type { Config as SvelteQueryConfig } from '../svelte-query';\nimport type { Config as VueQueryConfig } from '../vue-query';\n\nconst toInfiniteQueryOptionsName = (operation: Operation) =>\n `${serviceFunctionIdentifier({\n config: getConfig(),\n id: operation.name,\n operation,\n })}InfiniteOptions`;\n\nconst toMutationOptionsName = (operation: Operation) =>\n `${serviceFunctionIdentifier({\n config: getConfig(),\n id: operation.name,\n operation,\n })}Mutation`;\n\nconst toQueryOptionsName = ({\n config,\n id,\n operation,\n}: {\n config: Config;\n id: string;\n operation: IR.OperationObject | Operation;\n}) =>\n `${serviceFunctionIdentifier({\n config,\n id,\n operation,\n })}Options`;\n\nconst toQueryKeyName = ({\n config,\n id,\n isInfinite,\n operation,\n}: {\n config: Config;\n id: string;\n isInfinite?: boolean;\n operation: IR.OperationObject | Operation;\n}) =>\n `${serviceFunctionIdentifier({\n config,\n id,\n operation,\n })}${isInfinite ? 'Infinite' : ''}QueryKey`;\n\nconst getPaginationIn = (parameter: OperationParameter) => {\n switch (parameter.in) {\n case 'formData':\n return 'body';\n case 'header':\n return 'headers';\n default:\n return parameter.in;\n }\n};\n\nconst createInfiniteParamsFn = 'createInfiniteParams';\nconst createQueryKeyFn = 'createQueryKey';\nconst infiniteQueryOptionsFn = 'infiniteQueryOptions';\nconst mutationOptionsFn = 'mutationOptions';\nconst queryKeyName = 'QueryKey';\nconst queryOptionsFn = 'queryOptions';\nconst TOptionsType = 'TOptions';\n\nconst createInfiniteParamsFunction = ({\n file,\n}: {\n file: Files[keyof Files];\n}) => {\n const fn = compiler.constVariable({\n expression: compiler.arrowFunction({\n multiLine: true,\n parameters: [\n {\n name: 'queryKey',\n type: compiler.typeNode(\n `QueryKey<${clientApi.OptionsLegacyParser.name}>`,\n ),\n },\n {\n name: 'page',\n type: compiler.typeNode('K'),\n },\n ],\n statements: [\n compiler.constVariable({\n expression: compiler.identifier({\n text: 'queryKey[0]',\n }),\n name: 'params',\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'body' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'body',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n assertion: 'any',\n spread: 'queryKey[0].body',\n },\n {\n assertion: 'any',\n spread: 'page.body',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'headers' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'headers',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'queryKey[0].headers',\n },\n {\n spread: 'page.headers',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'path' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'path',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'queryKey[0].path',\n },\n {\n spread: 'page.path',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({\n text: 'page',\n }),\n name: compiler.identifier({ text: 'query' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'query',\n }),\n right: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'queryKey[0].query',\n },\n {\n spread: 'page.query',\n },\n ],\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.returnVariable({\n expression: ts.factory.createAsExpression(\n ts.factory.createAsExpression(\n compiler.identifier({ text: 'params' }),\n ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\n ),\n ts.factory.createTypeQueryNode(\n compiler.identifier({ text: 'page' }),\n ),\n ),\n }),\n ],\n types: [\n {\n extends: compiler.typeReferenceNode({\n typeName: compiler.identifier({\n text: `Pick<QueryKey<${clientApi.OptionsLegacyParser.name}>[0], 'body' | 'headers' | 'path' | 'query'>`,\n }),\n }),\n name: 'K',\n },\n ],\n }),\n name: createInfiniteParamsFn,\n });\n file.add(fn);\n};\n\nconst createQueryKeyFunction = ({ file }: { file: Files[keyof Files] }) => {\n const returnType = compiler.indexedAccessTypeNode({\n indexType: compiler.typeNode(0),\n objectType: compiler.typeNode(queryKeyName, [\n compiler.typeNode(TOptionsType),\n ]),\n });\n\n const infiniteIdentifier = compiler.identifier({ text: 'infinite' });\n\n const fn = compiler.constVariable({\n expression: compiler.arrowFunction({\n multiLine: true,\n parameters: [\n {\n name: 'id',\n type: compiler.typeNode('string'),\n },\n {\n isRequired: false,\n name: 'options',\n type: compiler.typeNode(TOptionsType),\n },\n {\n isRequired: false,\n name: 'infinite',\n type: compiler.typeNode('boolean'),\n },\n ],\n returnType,\n statements: [\n compiler.constVariable({\n assertion: returnType,\n expression: compiler.objectExpression({\n multiLine: false,\n obj: [\n {\n key: '_id',\n value: compiler.identifier({ text: 'id' }),\n },\n {\n key: getClientBaseUrlKey(getConfig()),\n value: compiler.identifier({\n text: `(options?.client ?? _heyApiClient).getConfig().${getClientBaseUrlKey(getConfig())}`,\n }),\n },\n ],\n }),\n name: 'params',\n typeName: returnType,\n }),\n compiler.ifStatement({\n expression: infiniteIdentifier,\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: '_infinite',\n }),\n right: infiniteIdentifier,\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'options' }),\n isOptional: true,\n name: compiler.identifier({ text: 'body' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'body',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'body',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'options' }),\n isOptional: true,\n name: compiler.identifier({ text: 'headers' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'headers',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'headers',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'options' }),\n isOptional: true,\n name: compiler.identifier({ text: 'path' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'path',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'path',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.ifStatement({\n expression: compiler.propertyAccessExpression({\n expression: compiler.identifier({ text: 'options' }),\n isOptional: true,\n name: compiler.identifier({ text: 'query' }),\n }),\n thenStatement: compiler.block({\n statements: [\n compiler.expressionToStatement({\n expression: compiler.binaryExpression({\n left: compiler.propertyAccessExpression({\n expression: 'params',\n name: 'query',\n }),\n right: compiler.propertyAccessExpression({\n expression: 'options',\n name: 'query',\n }),\n }),\n }),\n ],\n }),\n }),\n compiler.returnVariable({\n expression: 'params',\n }),\n ],\n types: [\n {\n extends: compiler.typeReferenceNode({\n typeName: compiler.identifier({\n text: clientApi.OptionsLegacyParser.name,\n }),\n }),\n name: TOptionsType,\n },\n ],\n }),\n name: createQueryKeyFn,\n });\n file.add(fn);\n};\n\nconst createQueryKeyType = ({ file }: { file: Files[keyof Files] }) => {\n const properties: Property[] = [\n {\n name: '_id',\n type: compiler.keywordTypeNode({\n keyword: 'string',\n }),\n },\n {\n isRequired: false,\n name: '_infinite',\n type: compiler.keywordTypeNode({\n keyword: 'boolean',\n }),\n },\n ];\n\n const queryKeyType = compiler.typeAliasDeclaration({\n name: queryKeyName,\n type: compiler.typeTupleNode({\n types: [\n compiler.typeIntersectionNode({\n types: [\n compiler.typeReferenceNode({\n typeName: `Pick<${TOptionsType}, '${getClientBaseUrlKey(getConfig())}' | 'body' | 'headers' | 'path' | 'query'>`,\n }),\n compiler.typeInterfaceNode({\n properties,\n useLegacyResolution: true,\n }),\n ],\n }),\n ],\n }),\n typeParameters: [\n {\n extends: compiler.typeReferenceNode({\n typeName: compiler.identifier({\n text: clientApi.OptionsLegacyParser.name,\n }),\n }),\n name: TOptionsType,\n },\n ],\n });\n file.add(queryKeyType);\n};\n\nconst createTypeData = ({\n client,\n file,\n operation,\n typesModulePath,\n}: {\n client: Client;\n file: Files[keyof Files];\n operation: Operation;\n typesModulePath: string;\n}) => {\n const { name: nameTypeData } = generateImport({\n client,\n meta: operation.parameters.length\n ? {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n }\n : undefined,\n nameTransformer: operationDataTypeName,\n onImport: (name) => {\n file.import({\n asType: true,\n module: typesModulePath,\n name,\n });\n },\n });\n\n const typeData = operationOptionsLegacyParserType({\n importedType: nameTypeData,\n });\n\n return { typeData };\n};\n\nconst createTypeError = ({\n client,\n file,\n operation,\n pluginName,\n typesModulePath,\n}: {\n client: Client;\n file: Files[keyof Files];\n operation: Operation;\n pluginName: string;\n typesModulePath: string;\n}) => {\n const config = getConfig();\n\n const { name: nameTypeError } = generateImport({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationErrorTypeName,\n onImport: (name) => {\n file.import({\n asType: true,\n module: typesModulePath,\n name,\n });\n },\n });\n\n let typeError: ImportExportItemObject = {\n asType: true,\n name: nameTypeError,\n };\n if (!typeError.name) {\n typeError = file.import({\n asType: true,\n module: pluginName,\n name: 'DefaultError',\n });\n }\n\n const clientPlugin = getClientPlugin(config);\n if (clientPlugin.name === '@hey-api/client-axios') {\n const axiosError = file.import({\n asType: true,\n module: 'axios',\n name: 'AxiosError',\n });\n typeError = {\n ...axiosError,\n name: `${axiosError.name}<${typeError.name}>`,\n };\n }\n\n return { typeError };\n};\n\nconst createTypeResponse = ({\n client,\n file,\n operation,\n typesModulePath,\n}: {\n client: Client;\n file: Files[keyof Files];\n operation: Operation;\n typesModulePath: string;\n}) => {\n const { name: nameTypeResponse } = generateImport({\n client,\n meta: {\n // TODO: this should be exact ref to operation for consistency,\n // but name should work too as operation ID is unique\n $ref: operation.name,\n name: operation.name,\n },\n nameTransformer: operationResponseTypeName,\n onImport: (imported) => {\n file.import({\n asType: true,\n module: typesModulePath,\n name: imported,\n });\n },\n });\n\n const typeResponse = nameTypeResponse || 'void';\n\n return { typeResponse };\n};\n\nconst createQueryKeyLiteral = ({\n id,\n isInfinite,\n}: {\n id: string;\n isInfinite?: boolean;\n}) => {\n const queryKeyLiteral = compiler.arrayLiteralExpression({\n elements: [\n compiler.callExpression({\n functionName: createQueryKeyFn,\n parameters: [\n compiler.ots.string(id),\n 'options',\n isInfinite ? compiler.ots.boolean(true) : undefined,\n ],\n }),\n ],\n multiLine: false,\n });\n return queryKeyLiteral;\n};\n\nexport const handlerLegacy: Plugin.LegacyHandler<\n | ReactQueryConfig\n | AngularQueryConfig\n | SolidQueryConfig\n | SvelteQueryConfig\n | VueQueryConfig\n> = ({ client, files, plugin }) => {\n const config = getConfig();\n\n if (isLegacyClient(config)) {\n throw new Error('🚫 TanStack Query plugin does not support legacy clients');\n }\n\n const file = files[plugin.name]!;\n\n file.import({\n ...clientApi.OptionsLegacyParser,\n module: clientModulePath({ config, sourceOutput: plugin.output }),\n });\n\n const typesModulePath = relativeModulePath({\n moduleOutput: files.types!.nameWithoutExtension(),\n sourceOutput: plugin.output,\n });\n\n const mutationsType =\n plugin.name === '@tanstack/angular-query-experimental' ||\n plugin.name === '@tanstack/svelte-query' ||\n plugin.name === '@tanstack/solid-query'\n ? 'MutationOptions'\n : 'UseMutationOptions';\n\n let typeInfiniteData!: ImportExportItem;\n let hasCreateInfiniteParamsFunction = false;\n let hasCreateQueryKeyParamsFunction = false;\n let hasInfiniteQueries = false;\n let hasMutations = false;\n let hasQueries = false;\n\n const processedOperations = new Map<string, boolean>();\n\n for (const service of client.services) {\n for (const operation of service.operations) {\n // track processed operations to avoid creating duplicates\n const operationKey = getOperationKey(operation);\n if (processedOperations.has(operationKey)) {\n continue;\n }\n processedOperations.set(operationKey, true);\n\n const queryFn = [\n config.plugins['@hey-api/sdk']?.asClass &&\n transformServiceName({\n config,\n name: service.name,\n }),\n serviceFunctionIdentifier({\n config,\n handleIllegal: !config.plugins['@hey-api/sdk']?.asClass,\n id: operation.name,\n operation,\n }),\n ]\n .filter(Boolean)\n .join('.');\n let hasUsedQueryFn = false;\n\n // queries\n if (\n plugin.queryOptions &&\n (['GET', 'POST'] as ReadonlyArray<Method>).includes(operation.method)\n ) {\n if (!hasQueries) {\n hasQueries = true;\n\n if (!hasCreateQueryKeyParamsFunction) {\n createQueryKeyType({ file });\n createQueryKeyFunction({ file });\n hasCreateQueryKeyParamsFunction = true;\n }\n\n file.import({\n module: plugin.name,\n name: queryOptionsFn,\n });\n }\n\n hasUsedQueryFn = true;\n\n const { typeData } = createTypeData({\n client,\n file,\n operation,\n typesModulePath,\n });\n\n const isRequired = isOperationParameterRequired(operation.parameters);\n\n const queryKeyStatement = compiler.constVariable({\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired,\n name: 'options',\n type: typeData,\n },\n ],\n statements: createQueryKeyLiteral({\n id: operation.name,\n }),\n }),\n name: toQueryKeyName({\n config,\n id: operation.name,\n operation,\n }),\n });\n file.add(queryKeyStatement);\n\n const statement = compiler.constVariable({\n // TODO: describe options, same as the actual function call\n comment: [],\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired,\n name: 'options',\n type: typeData,\n },\n ],\n statements: [\n compiler.returnFunctionCall({\n args: [\n compiler.objectExpression({\n obj: [\n {\n key: 'queryFn',\n value: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n destructure: [\n {\n name: 'queryKey',\n },\n {\n name: 'signal',\n },\n ],\n },\n ],\n statements: [\n compiler.constVariable({\n destructure: true,\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: queryFn,\n parameters: [\n compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'options',\n },\n {\n spread: 'queryKey[0]',\n },\n {\n key: 'signal',\n shorthand: true,\n value: compiler.identifier({\n text: 'signal',\n }),\n },\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n }),\n ],\n }),\n }),\n name: 'data',\n }),\n compiler.returnVariable({\n expression: 'data',\n }),\n ],\n }),\n },\n {\n key: 'queryKey',\n value: compiler.callExpression({\n functionName: toQueryKeyName({\n config,\n id: operation.name,\n operation,\n }),\n parameters: ['options'],\n }),\n },\n ],\n }),\n ],\n name: queryOptionsFn,\n }),\n ],\n }),\n name: toQueryOptionsName({\n config,\n id: operation.name,\n operation,\n }),\n // TODO: add type error\n // TODO: AxiosError<PutSubmissionMetaError>\n });\n file.add(statement);\n }\n\n // infinite queries\n if (\n plugin.infiniteQueryOptions &&\n (['GET', 'POST'] as ReadonlyArray<Method>).includes(operation.method)\n ) {\n // the actual pagination field might be nested inside parameter, e.g. body\n let paginationField!: Model | OperationParameter;\n\n const paginationParameter = operation.parameters.find((parameter) => {\n const paginationRegExp = getPaginationKeywordsRegExp(\n config.input.pagination,\n );\n if (paginationRegExp.test(parameter.name)) {\n paginationField = parameter;\n return true;\n }\n\n if (parameter.in !== 'body') {\n return;\n }\n\n if (parameter.export === 'reference') {\n const ref = parameter.$refs[0];\n const refModel = client.models.find(\n (model) => model.meta?.$ref === ref,\n );\n return refModel?.properties.find((property) => {\n const paginationRegExp = getPaginationKeywordsRegExp(\n config.input.pagination,\n );\n if (paginationRegExp.test(property.name)) {\n paginationField = property;\n return true;\n }\n });\n }\n\n return parameter.properties.find((property) => {\n const paginationRegExp = getPaginationKeywordsRegExp(\n config.input.pagination,\n );\n if (paginationRegExp.test(property.name)) {\n paginationField = property;\n return true;\n }\n });\n });\n\n if (paginationParameter && paginationField) {\n if (!hasInfiniteQueries) {\n hasInfiniteQueries = true;\n\n if (!hasCreateQueryKeyParamsFunction) {\n createQueryKeyType({ file });\n createQueryKeyFunction({ file });\n hasCreateQueryKeyParamsFunction = true;\n }\n\n if (!hasCreateInfiniteParamsFunction) {\n createInfiniteParamsFunction({ file });\n hasCreateInfiniteParamsFunction = true;\n }\n\n file.import({\n module: plugin.name,\n name: infiniteQueryOptionsFn,\n });\n\n typeInfiniteData = file.import({\n asType: true,\n module: plugin.name,\n name: 'InfiniteData',\n });\n }\n\n hasUsedQueryFn = true;\n\n const { typeData } = createTypeData({\n client,\n file,\n operation,\n typesModulePath,\n });\n const { typeError } = createTypeError({\n client,\n file,\n operation,\n pluginName: plugin.name,\n typesModulePath,\n });\n const { typeResponse } = createTypeResponse({\n client,\n file,\n operation,\n typesModulePath,\n });\n\n const isRequired = isOperationParameterRequired(operation.parameters);\n\n const typeQueryKey = `${queryKeyName}<${typeData}>`;\n const typePageObjectParam = `Pick<${typeQueryKey}[0], 'body' | 'headers' | 'path' | 'query'>`;\n const typePageParam = `${paginationField.base} | ${typePageObjectParam}`;\n\n const queryKeyStatement = compiler.constVariable({\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired,\n name: 'options',\n type: typeData,\n },\n ],\n returnType: typeQueryKey,\n statements: createQueryKeyLiteral({\n id: operation.name,\n isInfinite: true,\n }),\n }),\n name: toQueryKeyName({\n config,\n id: operation.name,\n isInfinite: true,\n operation,\n }),\n });\n file.add(queryKeyStatement);\n\n const statement = compiler.constVariable({\n // TODO: describe options, same as the actual function call\n comment: [],\n exportConst: true,\n expression: compiler.arrowFunction({\n parameters: [\n {\n isRequired,\n name: 'options',\n type: typeData,\n },\n ],\n statements: [\n compiler.returnFunctionCall({\n args: [\n compiler.objectExpression({\n comments: [\n {\n jsdoc: false,\n lines: ['@ts-ignore'],\n },\n ],\n obj: [\n {\n key: 'queryFn',\n value: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n destructure: [\n {\n name: 'pageParam',\n },\n {\n name: 'queryKey',\n },\n {\n name: 'signal',\n },\n ],\n },\n ],\n statements: [\n compiler.constVariable({\n comment: [\n {\n jsdoc: false,\n lines: ['@ts-ignore'],\n },\n ],\n expression: compiler.conditionalExpression({\n condition: compiler.binaryExpression({\n left: compiler.typeOfExpression({\n text: 'pageParam',\n }),\n operator: '===',\n right: compiler.ots.string('object'),\n }),\n whenFalse: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n key: getPaginationIn(\n paginationParameter,\n ),\n value: compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n key: paginationField.name,\n value: compiler.identifier({\n text: 'pageParam',\n }),\n },\n ],\n }),\n },\n ],\n }),\n whenTrue: compiler.identifier({\n text: 'pageParam',\n }),\n }),\n name: 'page',\n typeName: typePageObjectParam,\n }),\n compiler.constVariable({\n expression: compiler.callExpression({\n functionName: 'createInfiniteParams',\n parameters: ['queryKey', 'page'],\n }),\n name: 'params',\n }),\n compiler.constVariable({\n destructure: true,\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: queryFn,\n parameters: [\n compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'options',\n },\n {\n spread: 'params',\n },\n {\n key: 'signal',\n shorthand: true,\n value: compiler.identifier({\n text: 'signal',\n }),\n },\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n }),\n ],\n }),\n }),\n name: 'data',\n }),\n compiler.returnVariable({\n expression: 'data',\n }),\n ],\n }),\n },\n {\n key: 'queryKey',\n value: compiler.callExpression({\n functionName: toQueryKeyName({\n config,\n id: operation.name,\n isInfinite: true,\n operation,\n }),\n parameters: ['options'],\n }),\n },\n ],\n }),\n ],\n name: infiniteQueryOptionsFn,\n // TODO: better types syntax\n types: [\n typeResponse,\n typeError.name,\n `${typeof typeInfiniteData === 'string' ? typeInfiniteData : typeInfiniteData.name}<${typeResponse}>`,\n typeQueryKey,\n typePageParam,\n ],\n }),\n ],\n }),\n name: toInfiniteQueryOptionsName(operation),\n });\n file.add(statement);\n }\n }\n\n // mutations\n if (\n plugin.mutationOptions &&\n (['DELETE', 'PATCH', 'POST', 'PUT'] as ReadonlyArray<Method>).includes(\n operation.method,\n )\n ) {\n if (!hasMutations) {\n hasMutations = true;\n\n file.import({\n asType: true,\n module: plugin.name,\n name: mutationsType,\n });\n }\n\n hasUsedQueryFn = true;\n\n const { typeData } = createTypeData({\n client,\n file,\n operation,\n typesModulePath,\n });\n const { typeError } = createTypeError({\n client,\n file,\n operation,\n pluginName: plugin.name,\n typesModulePath,\n });\n const { typeResponse } = createTypeResponse({\n client,\n file,\n operation,\n typesModulePath,\n });\n\n const expression = compiler.arrowFunction({\n parameters: [\n {\n isRequired: false,\n name: 'options',\n type: `Partial<${typeData}>`,\n },\n ],\n statements: [\n compiler.constVariable({\n expression: compiler.objectExpression({\n obj: [\n {\n key: 'mutationFn',\n value: compiler.arrowFunction({\n async: true,\n multiLine: true,\n parameters: [\n {\n name: 'localOptions',\n },\n ],\n statements: [\n compiler.constVariable({\n destructure: true,\n expression: compiler.awaitExpression({\n expression: compiler.callExpression({\n functionName: queryFn,\n parameters: [\n compiler.objectExpression({\n multiLine: true,\n obj: [\n {\n spread: 'options',\n },\n {\n spread: 'localOptions',\n },\n {\n key: 'throwOnError',\n value: true,\n },\n ],\n }),\n ],\n }),\n }),\n name: 'data',\n }),\n compiler.returnVariable({\n expression: 'data',\n }),\n ],\n }),\n },\n ],\n }),\n name: mutationOptionsFn,\n // TODO: better types syntax\n typeName: `${mutationsType}<${typeResponse}, ${typeError.name}, ${typeData}>`,\n }),\n compiler.returnVariable({\n expression: mutationOptionsFn,\n }),\n ],\n });\n const statement = compiler.constVariable({\n // TODO: describe options, same as the actual function call\n comment: [],\n exportConst: true,\n expression,\n name: toMutationOptionsName(operation),\n });\n file.add(statement);\n }\n\n if (hasQueries || hasInfiniteQueries) {\n file.import({\n alias: '_heyApiClient',\n module: relativeModulePath({\n moduleOutput: files.client!.nameWithoutExtension(),\n sourceOutput: plugin.output,\n }),\n name: 'client',\n });\n }\n\n if (hasUsedQueryFn) {\n file.import({\n module: relativeModulePath({\n moduleOutput: files.sdk!.nameWithoutExtension(),\n sourceOutput: plugin.output,\n }),\n name: queryFn.split('.')[0]!,\n });\n }\n }\n }\n};\n","import type { Plugin } from '../../types';\nimport { handler } from '../query-core/plugin';\nimport { handlerLegacy } from '../query-core/plugin-legacy';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _dependencies: ['@hey-api/sdk', '@hey-api/typescript'],\n _handler: handler,\n _handlerLegacy: handlerLegacy,\n exportFromIndex: false,\n infiniteQueryOptions: true,\n mutationOptions: true,\n name: '@tanstack/angular-query-experimental',\n output: '@tanstack/angular-query-experimental',\n queryOptions: true,\n};\n\n/**\n * Type helper for `@tanstack/angular-query-experimental` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../../types';\nimport { handler } from '../query-core/plugin';\nimport { handlerLegacy } from '../query-core/plugin-legacy';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _dependencies: ['@hey-api/sdk', '@hey-api/typescript'],\n _handler: handler,\n _handlerLegacy: handlerLegacy,\n exportFromIndex: false,\n infiniteQueryOptions: true,\n mutationOptions: true,\n name: '@tanstack/react-query',\n output: '@tanstack/react-query',\n queryOptions: true,\n};\n\n/**\n * Type helper for `@tanstack/react-query` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../../types';\nimport { handler } from '../query-core/plugin';\nimport { handlerLegacy } from '../query-core/plugin-legacy';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _dependencies: ['@hey-api/sdk', '@hey-api/typescript'],\n _handler: handler,\n _handlerLegacy: handlerLegacy,\n exportFromIndex: false,\n infiniteQueryOptions: true,\n mutationOptions: true,\n name: '@tanstack/solid-query',\n output: '@tanstack/solid-query',\n queryOptions: true,\n};\n\n/**\n * Type helper for `@tanstack/solid-query` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../../types';\nimport { handler } from '../query-core/plugin';\nimport { handlerLegacy } from '../query-core/plugin-legacy';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _dependencies: ['@hey-api/sdk', '@hey-api/typescript'],\n _handler: handler,\n _handlerLegacy: handlerLegacy,\n exportFromIndex: false,\n infiniteQueryOptions: true,\n mutationOptions: true,\n name: '@tanstack/svelte-query',\n output: '@tanstack/svelte-query',\n queryOptions: true,\n};\n\n/**\n * Type helper for `@tanstack/svelte-query` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../../types';\nimport { handler } from '../query-core/plugin';\nimport { handlerLegacy } from '../query-core/plugin-legacy';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _dependencies: ['@hey-api/sdk', '@hey-api/typescript'],\n _handler: handler,\n _handlerLegacy: handlerLegacy,\n exportFromIndex: false,\n infiniteQueryOptions: true,\n mutationOptions: true,\n name: '@tanstack/vue-query',\n output: '@tanstack/vue-query',\n queryOptions: true,\n};\n\n/**\n * Type helper for `@tanstack/vue-query` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type ts from 'typescript';\n\nimport { compiler, type Property } from '../../compiler';\nimport { operationResponsesMap } from '../../ir/operation';\nimport { hasParameterGroupObjectRequired } from '../../ir/parameter';\nimport type { IR } from '../../ir/types';\nimport { typesId } from '../@hey-api/typescript/ref';\nimport { operationIrRef } from '../shared/utils/ref';\nimport type { Plugin } from '../types';\nimport type { Config } from './types';\n\nconst fastifyId = 'fastify';\n\nconst operationToRouteHandler = ({\n context,\n operation,\n}: {\n context: IR.Context;\n operation: IR.OperationObject;\n}): Property | undefined => {\n const file = context.file({ id: fastifyId })!;\n const fileTypes = context.file({ id: typesId })!;\n\n const properties: Array<Property> = [];\n\n const identifierData = fileTypes.identifier({\n $ref: operationIrRef({ id: operation.id, type: 'data' }),\n namespace: 'type',\n });\n if (identifierData.name) {\n if (operation.body) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierData.name,\n });\n properties.push({\n isRequired: operation.body.required,\n name: 'Body',\n type: `${identifierData.name}['body']`,\n });\n }\n\n if (operation.parameters) {\n if (operation.parameters.header) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierData.name,\n });\n properties.push({\n isRequired: hasParameterGroupObjectRequired(\n operation.parameters.header,\n ),\n name: 'Headers',\n type: `${identifierData.name}['headers']`,\n });\n }\n\n if (operation.parameters.path) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierData.name,\n });\n properties.push({\n isRequired: hasParameterGroupObjectRequired(\n operation.parameters.path,\n ),\n name: 'Params',\n type: `${identifierData.name}['path']`,\n });\n }\n\n if (operation.parameters.query) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierData.name,\n });\n properties.push({\n isRequired: hasParameterGroupObjectRequired(\n operation.parameters.query,\n ),\n name: 'Querystring',\n type: `${identifierData.name}['query']`,\n });\n }\n }\n }\n\n const { errors, responses } = operationResponsesMap(operation);\n\n let errorsTypeReference: ts.TypeReferenceNode | undefined = undefined;\n const identifierErrors = fileTypes.identifier({\n $ref: operationIrRef({ id: operation.id, type: 'errors' }),\n namespace: 'type',\n });\n if (identifierErrors.name && errors && errors.properties) {\n const keys = Object.keys(errors.properties);\n if (keys.length) {\n const hasDefaultResponse = keys.includes('default');\n if (!hasDefaultResponse) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierErrors.name,\n });\n errorsTypeReference = compiler.typeReferenceNode({\n typeName: identifierErrors.name,\n });\n } else if (keys.length > 1) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierErrors.name,\n });\n const errorsType = compiler.typeReferenceNode({\n typeName: identifierErrors.name,\n });\n const defaultType = compiler.literalTypeNode({\n literal: compiler.stringLiteral({ text: 'default' }),\n });\n errorsTypeReference = compiler.typeReferenceNode({\n typeArguments: [errorsType, defaultType],\n typeName: 'Omit',\n });\n }\n }\n }\n\n let responsesTypeReference: ts.TypeReferenceNode | undefined = undefined;\n const identifierResponses = fileTypes.identifier({\n $ref: operationIrRef({ id: operation.id, type: 'responses' }),\n namespace: 'type',\n });\n if (identifierResponses.name && responses && responses.properties) {\n const keys = Object.keys(responses.properties);\n if (keys.length) {\n const hasDefaultResponse = keys.includes('default');\n if (!hasDefaultResponse) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierResponses.name,\n });\n responsesTypeReference = compiler.typeReferenceNode({\n typeName: identifierResponses.name,\n });\n } else if (keys.length > 1) {\n file.import({\n asType: true,\n module: file.relativePathToFile({ context, id: typesId }),\n name: identifierResponses.name,\n });\n const responsesType = compiler.typeReferenceNode({\n typeName: identifierResponses.name,\n });\n const defaultType = compiler.literalTypeNode({\n literal: compiler.stringLiteral({ text: 'default' }),\n });\n responsesTypeReference = compiler.typeReferenceNode({\n typeArguments: [responsesType, defaultType],\n typeName: 'Omit',\n });\n }\n }\n }\n\n const replyTypes = [errorsTypeReference, responsesTypeReference].filter(\n Boolean,\n );\n if (replyTypes.length) {\n properties.push({\n name: 'Reply',\n type: compiler.typeIntersectionNode({\n types: replyTypes,\n }),\n });\n }\n\n if (!properties.length) {\n return;\n }\n\n const routeHandler: Property = {\n name: operation.id,\n type: compiler.typeNode('RouteHandler', [\n compiler.typeInterfaceNode({\n properties,\n useLegacyResolution: false,\n }),\n ]),\n };\n return routeHandler;\n};\n\nexport const handler: Plugin.Handler<Config> = ({ context, plugin }) => {\n const file = context.createFile({\n exportFromIndex: plugin.exportFromIndex,\n id: fastifyId,\n path: plugin.output,\n });\n\n const routeHandlers: Array<Property> = [];\n\n context.subscribe('operation', ({ operation }) => {\n const routeHandler = operationToRouteHandler({ context, operation });\n if (routeHandler) {\n routeHandlers.push(routeHandler);\n }\n });\n\n context.subscribe('after', () => {\n const identifier = file.identifier({\n $ref: 'RouteHandlers',\n create: true,\n namespace: 'type',\n });\n\n if (!identifier.name) {\n return;\n }\n\n if (routeHandlers.length) {\n file.import({\n asType: true,\n module: 'fastify',\n name: 'RouteHandler',\n });\n }\n\n file.add(\n compiler.typeAliasDeclaration({\n exportType: true,\n name: identifier.name,\n type: compiler.typeInterfaceNode({\n properties: routeHandlers,\n useLegacyResolution: false,\n }),\n }),\n );\n });\n};\n","import type { Plugin } from '../types';\nimport { handler } from './plugin';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _dependencies: ['@hey-api/typescript'],\n _handler: handler,\n _handlerLegacy: () => {},\n exportFromIndex: false,\n name: 'fastify',\n output: 'fastify',\n};\n\n/**\n * Type helper for `fastify` plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import type { Plugin } from '../types';\nimport { handler } from './plugin';\nimport type { Config } from './types';\n\nexport const defaultConfig: Plugin.Config<Config> = {\n _handler: handler,\n _handlerLegacy: () => {},\n _tags: ['validator'],\n exportFromIndex: false,\n name: 'zod',\n output: 'zod',\n};\n\n/**\n * Type helper for Zod plugin, returns {@link Plugin.Config} object\n */\nexport const defineConfig: Plugin.DefineConfig<Config> = (config) => ({\n ...defaultConfig,\n ...config,\n});\n","import {\n type Config as HeyApiClientAxios,\n defaultConfig as heyApiClientAxios,\n} from './@hey-api/client-axios';\nimport {\n type Config as HeyApiClientFetch,\n defaultConfig as heyApiClientFetch,\n} from './@hey-api/client-fetch';\nimport {\n type Config as HeyApiClientNext,\n defaultConfig as heyApiClientNext,\n} from './@hey-api/client-next';\nimport {\n type Config as HeyApiClientNuxt,\n defaultConfig as heyApiClientNuxt,\n} from './@hey-api/client-nuxt';\nimport {\n type Config as HeyApiLegacyAngular,\n defaultConfig as heyApiLegacyAngular,\n} from './@hey-api/legacy-angular';\nimport {\n type Config as HeyApiLegacyAxios,\n defaultConfig as heyApiLegacyAxios,\n} from './@hey-api/legacy-axios';\nimport {\n type Config as HeyApiLegacyFetch,\n defaultConfig as heyApiLegacyFetch,\n} from './@hey-api/legacy-fetch';\nimport {\n type Config as HeyApiLegacyNode,\n defaultConfig as heyApiLegacyNode,\n} from './@hey-api/legacy-node';\nimport {\n type Config as HeyApiLegacyXhr,\n defaultConfig as heyApiLegacyXhr,\n} from './@hey-api/legacy-xhr';\nimport {\n type Config as HeyApiSchemas,\n defaultConfig as heyApiSchemas,\n} from './@hey-api/schemas';\nimport {\n type Config as HeyApiSdk,\n defaultConfig as heyApiSdk,\n} from './@hey-api/sdk';\nimport {\n type Config as HeyApiTransformers,\n defaultConfig as heyApiTransformers,\n} from './@hey-api/transformers';\nimport {\n type Config as HeyApiTypeScript,\n defaultConfig as heyApiTypeScript,\n} from './@hey-api/typescript';\nimport {\n type Config as TanStackAngularQueryExperimental,\n defaultConfig as tanStackAngularQueryExperimental,\n} from './@tanstack/angular-query-experimental';\nimport {\n type Config as TanStackReactQuery,\n defaultConfig as tanStackReactQuery,\n} from './@tanstack/react-query';\nimport {\n type Config as TanStackSolidQuery,\n defaultConfig as tanStackSolidQuery,\n} from './@tanstack/solid-query';\nimport {\n type Config as TanStackSvelteQuery,\n defaultConfig as tanStackSvelteQuery,\n} from './@tanstack/svelte-query';\nimport {\n type Config as TanStackVueQuery,\n defaultConfig as tanStackVueQuery,\n} from './@tanstack/vue-query';\nimport { type Config as Fastify, defaultConfig as fastify } from './fastify';\nimport type { DefaultPluginConfigs, Plugin } from './types';\nimport { type Config as Zod, defaultConfig as zod } from './zod';\n\n/**\n * User-facing plugin types.\n */\nexport type UserPlugins =\n | Plugin.UserConfig<HeyApiClientAxios>\n | Plugin.UserConfig<HeyApiClientFetch>\n | Plugin.UserConfig<HeyApiClientNext>\n | Plugin.UserConfig<HeyApiClientNuxt>\n | Plugin.UserConfig<HeyApiLegacyAngular>\n | Plugin.UserConfig<HeyApiLegacyAxios>\n | Plugin.UserConfig<HeyApiLegacyFetch>\n | Plugin.UserConfig<HeyApiLegacyNode>\n | Plugin.UserConfig<HeyApiLegacyXhr>\n | Plugin.UserConfig<HeyApiSchemas>\n | Plugin.UserConfig<HeyApiSdk>\n | Plugin.UserConfig<HeyApiTransformers>\n | Plugin.UserConfig<HeyApiTypeScript>\n | Plugin.UserConfig<TanStackAngularQueryExperimental>\n | Plugin.UserConfig<TanStackReactQuery>\n | Plugin.UserConfig<TanStackSolidQuery>\n | Plugin.UserConfig<TanStackSvelteQuery>\n | Plugin.UserConfig<TanStackVueQuery>\n | Plugin.UserConfig<Fastify>\n | Plugin.UserConfig<Zod>;\n\n/**\n * Internal plugin types.\n */\nexport type ClientPlugins =\n | Plugin.Config<HeyApiClientAxios>\n | Plugin.Config<HeyApiClientFetch>\n | Plugin.Config<HeyApiClientNext>\n | Plugin.Config<HeyApiClientNuxt>\n | Plugin.Config<HeyApiLegacyAngular>\n | Plugin.Config<HeyApiLegacyAxios>\n | Plugin.Config<HeyApiLegacyFetch>\n | Plugin.Config<HeyApiLegacyNode>\n | Plugin.Config<HeyApiLegacyXhr>\n | Plugin.Config<HeyApiSchemas>\n | Plugin.Config<HeyApiSdk>\n | Plugin.Config<HeyApiTransformers>\n | Plugin.Config<HeyApiTypeScript>\n | Plugin.Config<TanStackAngularQueryExperimental>\n | Plugin.Config<TanStackReactQuery>\n | Plugin.Config<TanStackSolidQuery>\n | Plugin.Config<TanStackSvelteQuery>\n | Plugin.Config<TanStackVueQuery>\n | Plugin.Config<Fastify>\n | Plugin.Config<Zod>;\n\nexport const defaultPluginConfigs: DefaultPluginConfigs<ClientPlugins> = {\n '@hey-api/client-axios': heyApiClientAxios,\n '@hey-api/client-fetch': heyApiClientFetch,\n '@hey-api/client-next': heyApiClientNext,\n '@hey-api/client-nuxt': heyApiClientNuxt,\n '@hey-api/schemas': heyApiSchemas,\n '@hey-api/sdk': heyApiSdk,\n '@hey-api/transformers': heyApiTransformers,\n '@hey-api/typescript': heyApiTypeScript,\n '@tanstack/angular-query-experimental': tanStackAngularQueryExperimental,\n '@tanstack/react-query': tanStackReactQuery,\n '@tanstack/solid-query': tanStackSolidQuery,\n '@tanstack/svelte-query': tanStackSvelteQuery,\n '@tanstack/vue-query': tanStackVueQuery,\n fastify,\n 'legacy/angular': heyApiLegacyAngular,\n 'legacy/axios': heyApiLegacyAxios,\n 'legacy/fetch': heyApiLegacyFetch,\n 'legacy/node': heyApiLegacyNode,\n 'legacy/xhr': heyApiLegacyXhr,\n zod,\n};\n","import path from 'node:path';\n\nimport { loadConfig } from 'c12';\n\nimport { getLogs } from './getLogs';\nimport type { ClientPlugins, UserPlugins } from './plugins';\nimport { defaultPluginConfigs } from './plugins';\nimport type {\n AnyPluginName,\n DefaultPluginConfigs,\n PluginContext,\n PluginNames,\n} from './plugins/types';\nimport type { Config, UserConfig } from './types/config';\nimport { isLegacyClient, setConfig } from './utils/config';\n\n/**\n * Default plugins used to generate artifacts if plugins aren't specified.\n */\nexport const defaultPlugins = [\n '@hey-api/typescript',\n '@hey-api/sdk',\n] as const satisfies ReadonlyArray<UserPlugins['name']>;\n\nconst getInput = (userConfig: UserConfig): Config['input'] => {\n let input: Config['input'] = {\n path: '',\n };\n if (typeof userConfig.input === 'string') {\n input.path = userConfig.input;\n } else if (\n userConfig.input &&\n (userConfig.input.path || userConfig.input.organization)\n ) {\n input = {\n ...input,\n path: 'https://get.heyapi.dev',\n ...userConfig.input,\n };\n } else {\n input = {\n ...input,\n path: userConfig.input as Record<string, unknown>,\n };\n }\n return input;\n};\n\nconst getPluginsConfig = ({\n pluginConfigs,\n userPlugins,\n userPluginsConfig,\n}: {\n pluginConfigs: DefaultPluginConfigs<ClientPlugins>;\n userPlugins: ReadonlyArray<AnyPluginName>;\n userPluginsConfig: Config['plugins'];\n}): Pick<Config, 'plugins' | 'pluginOrder'> => {\n const circularReferenceTracker = new Set<AnyPluginName>();\n const pluginOrder = new Set<AnyPluginName>();\n const plugins: Config['plugins'] = {};\n\n const dfs = (name: AnyPluginName) => {\n if (circularReferenceTracker.has(name)) {\n throw new Error(`Circular reference detected at '${name}'`);\n }\n\n if (!pluginOrder.has(name)) {\n circularReferenceTracker.add(name);\n\n const pluginConfig = pluginConfigs[name as PluginNames];\n if (!pluginConfig) {\n throw new Error(\n `🚫 unknown plugin dependency \"${name}\" - do you need to register a custom plugin with this name?`,\n );\n }\n\n const defaultOptions = defaultPluginConfigs[name as PluginNames];\n const userOptions = userPluginsConfig[name as PluginNames];\n if (userOptions && defaultOptions) {\n const nativePluginOption = Object.keys(userOptions).find((key) =>\n key.startsWith('_'),\n );\n if (nativePluginOption) {\n throw new Error(\n `🚫 cannot register plugin \"${name}\" - attempting to override a native plugin option \"${nativePluginOption}\"`,\n );\n }\n }\n\n const config = {\n _dependencies: [],\n ...defaultOptions,\n ...userOptions,\n };\n\n if (config._infer) {\n const context: PluginContext = {\n ensureDependency: (dependency) => {\n if (\n typeof dependency === 'string' &&\n !config._dependencies.includes(dependency)\n ) {\n config._dependencies = [...config._dependencies, dependency];\n }\n },\n pluginByTag: (tag, errorMessage) => {\n for (const userPlugin of userPlugins) {\n const defaultConfig =\n defaultPluginConfigs[userPlugin as PluginNames] ||\n pluginConfigs[userPlugin as PluginNames];\n if (\n defaultConfig &&\n defaultConfig._tags?.includes(tag) &&\n userPlugin !== name\n ) {\n return userPlugin;\n }\n }\n\n throw new Error(\n errorMessage ||\n `🚫 missing plugin - no plugin with tag \"${tag}\" found`,\n );\n },\n };\n config._infer(config, context);\n }\n\n for (const dependency of config._dependencies) {\n dfs(dependency);\n }\n\n circularReferenceTracker.delete(name);\n pluginOrder.add(name);\n\n // @ts-expect-error\n plugins[name] = config;\n }\n };\n\n for (const name of userPlugins) {\n dfs(name);\n }\n\n return {\n pluginOrder: Array.from(pluginOrder) as ReadonlyArray<PluginNames>,\n plugins,\n };\n};\n\nconst getOutput = (userConfig: UserConfig): Config['output'] => {\n let output: Config['output'] = {\n clean: true,\n format: false,\n indexFile: true,\n lint: false,\n path: '',\n };\n if (typeof userConfig.output === 'string') {\n output.path = userConfig.output;\n } else {\n output = {\n ...output,\n ...userConfig.output,\n };\n }\n return output;\n};\n\nconst isPluginClient = (plugin: Required<UserConfig>['plugins'][number]) => {\n if (typeof plugin === 'string') {\n return plugin.startsWith('@hey-api/client') || plugin.startsWith('legacy/');\n }\n\n return (\n plugin.name.startsWith('@hey-api/client') ||\n plugin.name.startsWith('legacy/') ||\n // @ts-expect-error\n (plugin._tags && plugin._tags.includes('client'))\n );\n};\n\nconst getPlugins = (\n userConfig: UserConfig,\n): Pick<Config, 'plugins' | 'pluginOrder'> => {\n const userPluginsConfig: Config['plugins'] = {};\n\n let definedPlugins: UserConfig['plugins'] = defaultPlugins;\n if (userConfig.plugins) {\n userConfig.plugins = userConfig.plugins.filter(\n (plugin) =>\n (typeof plugin === 'string' && plugin) ||\n (typeof plugin !== 'string' && plugin.name),\n );\n if (\n userConfig.plugins.length === 1 &&\n isPluginClient(userConfig.plugins[0]!)\n ) {\n definedPlugins = [...defaultPlugins, ...userConfig.plugins];\n } else {\n definedPlugins = userConfig.plugins;\n }\n }\n\n const userPlugins = definedPlugins\n .map((plugin) => {\n if (typeof plugin === 'string') {\n return plugin;\n }\n\n if (plugin.name) {\n // @ts-expect-error\n userPluginsConfig[plugin.name] = plugin;\n }\n\n return plugin.name;\n })\n .filter(Boolean);\n\n return getPluginsConfig({\n pluginConfigs: {\n ...userPluginsConfig,\n ...defaultPluginConfigs,\n },\n userPlugins,\n userPluginsConfig,\n });\n};\n\nconst getWatch = (\n userConfig: Pick<UserConfig, 'watch'> & Pick<Config, 'input'>,\n): Config['watch'] => {\n let watch: Config['watch'] = {\n enabled: false,\n interval: 1_000,\n timeout: 60_000,\n };\n // we cannot watch spec passed as an object\n if (typeof userConfig.input.path !== 'string') {\n return watch;\n }\n if (typeof userConfig.watch === 'boolean') {\n watch.enabled = userConfig.watch;\n } else if (typeof userConfig.watch === 'number') {\n watch.enabled = true;\n watch.interval = userConfig.watch;\n } else if (userConfig.watch) {\n watch = {\n ...watch,\n ...userConfig.watch,\n };\n }\n return watch;\n};\n\n/**\n * @internal\n */\nexport const initConfigs = async (\n userConfig: UserConfig | undefined,\n): Promise<Config[]> => {\n let configurationFile: string | undefined = undefined;\n if (userConfig?.configFile) {\n const parts = userConfig.configFile.split('.');\n configurationFile = parts.slice(0, parts.length - 1).join('.');\n }\n\n const { config: configFromFile } = await loadConfig<UserConfig>({\n configFile: configurationFile,\n name: 'openapi-ts',\n });\n\n const userConfigs: UserConfig[] = Array.isArray(userConfig)\n ? userConfig\n : Array.isArray(configFromFile)\n ? configFromFile.map((config) => ({\n ...config,\n ...userConfig,\n }))\n : [{ ...(configFromFile ?? {}), ...userConfig }];\n\n return userConfigs.map((userConfig) => {\n const {\n base,\n configFile = '',\n dryRun = false,\n experimentalParser = true,\n exportCore = true,\n name,\n request,\n useOptions = true,\n } = userConfig;\n\n const logs = getLogs(userConfig);\n\n if (logs.level === 'debug') {\n console.warn('userConfig:', userConfig);\n }\n\n const input = getInput(userConfig);\n const output = getOutput(userConfig);\n\n if (!input.path) {\n throw new Error(\n '🚫 missing input - which OpenAPI specification should we use to generate your output?',\n );\n }\n\n if (!output.path) {\n throw new Error(\n '🚫 missing output - where should we generate your output?',\n );\n }\n\n if (!useOptions) {\n console.warn(\n '❗️ Deprecation warning: useOptions set to false. This setting will be removed in future versions. Please migrate useOptions to true https://heyapi.dev/openapi-ts/migrating.html#v0-27-38',\n );\n }\n\n output.path = path.resolve(process.cwd(), output.path);\n\n const config = setConfig({\n ...getPlugins(userConfig),\n base,\n configFile,\n dryRun,\n experimentalParser,\n exportCore: false,\n input,\n logs,\n name,\n output,\n request,\n useOptions,\n watch: getWatch({ ...userConfig, input }),\n });\n config.exportCore = isLegacyClient(config) ? exportCore : false;\n\n if (logs.level === 'debug') {\n console.warn('config:', config);\n }\n\n return config;\n });\n};\n"]}
|