{"version":3,"sources":["../src/index.ts","../src/core/InjectFunctionsProcess.ts","../src/core/modules/Java.ts","../src/core/shared.ts","../src/constants.ts","../src/core/modules/JavaScript/codegen.ts","../src/core/modules/JavaScript/JavaScriptCompiler/class/serializer.ts","../src/core/templates/JavaScript.ts","../src/utils/utils.ts","../src/core/modules/JavaScript/JavaScriptCompiler/context/core.ts","../src/core/modules/JavaScript/JavaScriptCompiler/context/serializer.ts","../src/core/modules/JavaScript/JavaScriptCompiler/expressions/core.ts","../src/core/modules/JavaScript/JavaScriptCompiler/expressions/functions.ts","../src/core/modules/JavaScript/JavaScriptCompiler/expressions/serializer.ts","../src/core/modules/JavaScript/JavaScriptCompiler/expressions/index.ts","../src/core/modules/JavaScript/JavaScriptCompiler/context/index.ts","../src/core/modules/JavaScript/JavaScriptCompiler/state/core.ts","../src/core/modules/JavaScript/JavaScriptCompiler/state/index.ts","../src/core/modules/JavaScript/JavaScriptCompiler/class/index.ts","../src/core/modules/JavaScript/JavaScriptCompiler/functions/core.ts","../src/core/modules/JavaScript/JavaScriptCompiler/functions/index.ts","../src/core/modules/JavaScript/JavaScriptCompiler/imports/core.ts","../src/core/modules/JavaScript/JavaScriptCompiler/imports/serializer.ts","../src/core/modules/JavaScript/JavaScriptCompiler/imports/index.ts","../src/core/modules/JavaScript/JavaScriptCompiler/dictionaries/core.ts","../src/core/modules/JavaScript/JavaScriptCompiler/dictionaries/serializer.ts","../src/core/modules/JavaScript/JavaScriptCompiler/dictionaries/index.ts","../src/core/modules/JavaScript/JavaScriptCompiler/events/functions.ts","../src/core/modules/JavaScript/JavaScriptCompiler/events/core.ts","../src/core/modules/JavaScript/JavaScriptCompiler/events/serializer.ts","../src/core/modules/JavaScript/JavaScriptCompiler/events/index.ts","../src/core/modules/JavaScript/JavaScriptCompiler/forks/core.ts","../src/core/modules/JavaScript/JavaScriptCompiler/forks/serializer.ts","../src/core/modules/JavaScript/JavaScriptCompiler/forks/index.ts","../src/core/modules/JavaScript/JavaScriptCompiler/index.ts","../src/core/modules/Python.ts","../src/core/templates/Python.ts","../src/core/modules/TypeScript/TypescriptCompiler/class/serializer.ts","../src/core/modules/TypeScript/TypescriptCompiler/class/index.ts","../src/core/modules/TypeScript/TypescriptCompiler/index.ts","../src/core/modules/TypeScript/codegen.ts","../src/core/modules/index.ts","../src/core/Codegen.ts","../src/types/common.ts"],"sourcesContent":["/**\n * @packageDocumentation\n *\n * The `@yantrix/codegen` package is a code generation engine for the Yantrix framework,\n * designed to transform extended Mermaid state diagrams into type-safe finite state machine implementations.\n *\n * You can check the supported languages and features [here](/integrations/100_language_support.html).\n *\n */\n\nimport { TStateDiagramMatrix } from '@yantrix/mermaid-parser';\nimport { YantrixParser } from '@yantrix/yantrix-parser';\nimport { CodegenCreator } from './core/Codegen.js';\nimport { ModuleNames } from './core/modules/index.js';\nimport { IGenerateOptions, TStateIncludingNotes } from './types/common.js';\n\nexport * from './core/modules/index.js';\nexport * from './types/common.js';\n\n/**\n * Main function that's used to asynchronously generate Yantrix FSMs.\n * @param diagram - The state diagram, processed by Mermaid & Yantrix Parsers (`mermaid-parser`, `yantrix-parser`)\n * @param options - Options for configuring the generation process, such as the output language and automata class name\n * @returns - A promise with the code of generated FSM as string\n */\nexport async function generateAutomataFromStateDiagram(diagram: TStateDiagramMatrix, options: IGenerateOptions): Promise<string> {\n\tconst { states, transitions, actionChains } = diagram;\n\tconst parserInstance = new YantrixParser();\n\n\tconst statesIncludingNotes = states.map((state) => {\n\t\tconst input = state.notes.flatMap(e => e.join('\\n')).join(' ');\n\t\tif (input === '')\n\t\t\treturn { ...state, notes: null };\n\t\treturn { ...state, notes: parserInstance.parse(input) } as TStateIncludingNotes;\n\t});\n\n\tlet constants: Record<string, any> | null = null;\n\n\tif (options?.constants) {\n\t\tconstants = JSON.parse(options.constants);\n\t}\n\n\tif (constants !== null) {\n\t\tObject.entries(constants).forEach(([key, value]) => {\n\t\t\tif (typeof value !== 'string' && typeof value !== 'number') {\n\t\t\t\tthrow new TypeError(`Invalid constant value type. Key: ${key}, value: ${JSON.stringify(value)}`);\n\t\t\t}\n\t\t});\n\t}\n\n\tconst creator = new CodegenCreator(\n\t\t{\n\t\t\tstates: statesIncludingNotes,\n\t\t\ttransitions,\n\t\t\tactionChains,\n\t\t},\n\t);\n\n\tconst codegen = await creator.createCodegen({\n\t\tlanguage: options.outLang ?? ModuleNames.TypeScript,\n\t\tconstants,\n\t\tfunctionFilePath: options.functionFilePath ?? null,\n\t});\n\n\treturn codegen.getCode(options);\n}\n","import path from 'node:path';\nimport { TNullable } from '@yantrix/utils';\nimport { TOutLang, TUserFunctionsDict } from '../types/common';\nimport { ModuleNames } from './modules';\n\nconst processFileTS = async (filePath: TNullable<string>): Promise<TUserFunctionsDict> => {\n\tif (!filePath) {\n\t\treturn {\n\t\t\tpath: null,\n\t\t};\n\t}\n\tconst fileExtension = path.extname(filePath);\n\n\tif (!['.js', '.ts'].includes(fileExtension)) {\n\t\tthrow new Error('Only .js or .ts files are supported');\n\t}\n\n\treturn {\n\t\tpath: filePath,\n\t};\n};\n\nconst processFileDict: Record<TOutLang, (filePath: TNullable<string>) => Promise<TUserFunctionsDict>> = {\n\t[ModuleNames.JavaScript]: processFileTS,\n\t[ModuleNames.TypeScript]: processFileTS,\n\t[ModuleNames.Python]: () => { throw new TypeError('Python is not supported yet inject functions'); },\n\t[ModuleNames.Java]: () => { throw new TypeError('Java is not supported yet inject functions'); },\n\n} as const;\n\nexport const processFile = (language: TOutLang) => {\n\tif (processFileDict[language]) {\n\t\treturn processFileDict[language];\n\t}\n\tthrow new TypeError(`Language ${language} is not supported`);\n};\n","import { BasicActionDictionary, BasicStateDictionary } from '@yantrix/automata';\nimport { StartState, TDiagramAction } from '@yantrix/mermaid-parser';\n\nimport { ICodegen, TGetCodeOptionsMap, TModuleParams, TStateDiagramMatrixIncludeNotes } from '../../types/common.js';\nimport { fillDictionaries } from '../shared.js';\nimport { ModuleNames } from './index';\n\nexport class JavaCodegen implements ICodegen<typeof ModuleNames.Java> {\n\tstateDictionary: BasicStateDictionary;\n\tactionDictionary: BasicActionDictionary;\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\thandlersDict: string[];\n\tinitialContext: string;\n\tinitialContextKeys: string[];\n\tchangeStateHandlers: string[];\n\tdictionaries: string[];\n\tprotected imports = {\n\t\t'@yantrix/automata': ['GenericAutomata'],\n\t};\n\n\tprivate package: string = 'org.example'; // base package name for all automata files\n\n\tconstructor({ diagram }: TModuleParams) {\n\t\tthis.actionDictionary = new BasicActionDictionary();\n\t\tthis.stateDictionary = new BasicStateDictionary();\n\t\tthis.diagram = diagram;\n\n\t\tthis.handlersDict = [];\n\t\tthis.changeStateHandlers = [];\n\t\tthis.dictionaries = [];\n\t\tthis.initialContextKeys = [];\n\n\t\tthis.initialContext = this.getInitialContext();\n\n\t\tfillDictionaries(diagram, this.stateDictionary, this.actionDictionary);\n\t\tthis.setupDictionaries();\n\t}\n\n\tpublic getCode(options: TGetCodeOptionsMap[typeof ModuleNames.Java]): string {\n\t\treturn `\n\t\t\t${this.getImports()}\n\t\t\t${this.getClassTemplate(options.className)}\n\t\t`;\n\t}\n\n\t// Package declaration and imports necessary for the automata to function\n\tgetImports(): string {\n\t\tconst lines: string[] = [\n\t\t\t`package ${this.package};`,\n\t\t\t`import java.util.Map;`,\n\t\t\t`import java.util.Objects;`,\n\t\t\t`import java.util.HashMap;`,\n\t\t\t`import java.util.function.Function;`,\n\t\t];\n\t\treturn lines.join('\\n');\n\t}\n\n\tgetDictionaries(): string {\n\t\treturn this.dictionaries.join('\\n');\n\t}\n\n\tpublic getActionToStateFromState(): string {\n\t\treturn `public final Map<TAutomataBaseState, Map<TAutomataBaseAction, AutomataStateTransitionResult>> stateTransitionMatrix =\n\t\t\tMap.ofEntries(\n\t\t\t\t${this.getStateTransitionMatrix()}\n\t\t\t);\n\t\t`;\n\t}\n\n\t// State transition matrix\n\tgetStateTransitionMatrix(): string {\n\t\treturn Object\n\t\t\t.entries(this.diagram.transitions)\n\t\t\t.map(([state, transitions]) => {\n\t\t\t\tconst value = this.stateDictionary.getStateValues({ keys: [state] })[0];\n\t\t\t\tif (!value)\n\t\t\t\t\tthrow new Error(`State ${state} not found`);\n\n\t\t\t\treturn `\n\t\t\t\tMap.entry(\n\t\t\t\t\tTAutomataBaseState.of(${value}L),\n\t\t\t\t\tMap.of(\n\t\t\t\t\t\t${this.getTransitions(transitions).join(',\\n')}\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t`;\n\t\t\t})\n\t\t\t.join(',\\n');\n\t}\n\n\tgetTransitions(transitions: Record<string, TDiagramAction>): string[] {\n\t\treturn Object\n\t\t\t.entries(transitions)\n\t\t\t.map(([state, transition]) => {\n\t\t\t\tconst newState = this.stateDictionary.getStateValues({ keys: [state] })[0];\n\t\t\t\treturn transition.actionsPath.map(({ action }) => {\n\t\t\t\t\tconst actionValue = this.actionDictionary.getActionValues({\n\t\t\t\t\t\tkeys: action,\n\t\t\t\t\t})[0];\n\t\t\t\t\tif (!actionValue)\n\t\t\t\t\t\tthrow new Error(`Action ${action} not found`);\n\t\t\t\t\tif (!newState)\n\t\t\t\t\t\tthrow new Error(`State ${state} not found`);\n\n\t\t\t\t\t// const ctx = this.getSubsyntaxContext(key);\n\n\t\t\t\t\treturn `\n\t\t\t\t\t\tTAutomataBaseAction.of(${actionValue}L),\n\t\t\t\t\t\tnew AutomataStateTransitionResult(\n\t\t\t\t\t\t\t\tTAutomataBaseState.of(${newState}L),\n\t\t\t\t\t\t\t\t(payloadContext) -> {\n\t\t\t\t\t\t\t\t\tvar prevContext = getDefaultContext(payloadContext);\n\t\t\t\t\t\t\t\t\treturn prevContext;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t`;\n\t\t\t\t});\n\t\t\t})\n\t\t\t.flatMap(el => `${el.join(',\\n\\t')}`);\n\t}\n\n\tgetDefaultContext(): string {\n\t\treturn `\n            private TAutomataBaseContext getDefaultContext(AutomataPayloadContext arg) {\n                TAutomataBaseContext prevContext = arg.context();\n                return prevContext;\n            }\n        `;\n\t}\n\n\t// Full class declaration with all dictionaries and handlers inside\n\tgetClassTemplate(className: string): string {\n\t\treturn `\n            public final class ${className} {\n                ${this.getDictionaries()}\n\t\t\t\t${this.getActionToStateFromState()}\n                ${this.setupClassMembers()}\n                ${this.getDefaultConstructor(className)}\n                ${this.setupClassMembersAccessors()}\n\t\t\t\t${this.getDefaultContext()}\n                ${this.dispatchMethod()}\n                ${this.toStringMethod()}\n                ${this.getTypes()}\n            }\n        `;\n\t}\n\n\t// Default constructor for the class\n\tprivate getDefaultConstructor(className: string): string {\n\t\treturn `\n            public ${className}() {\n                this.state = TAutomataBaseState.of(${this.getInitialState()}L);\n                this.context = ${this.getInitialContext()};\n                this.rootReducer = ${this.getRootReducer()};\n            }\n        `;\n\t}\n\n\t// Transforms codegen dictionaries into language-specific text representations\n\tprivate setupDictionaries(): void {\n\t\t// states dictionary text representation\n\t\tthis.dictionaries.push(`\n\t\tpublic static final Map<String, TAutomataBaseState> statesDictionary = Map.of(\n\t\t${Object\n\t\t\t.entries(this.stateDictionary.getDictionary())\n\t\t\t.map(([key, value]) => `\"${key}\", TAutomataBaseState.of(${value}L)`)\n\t\t\t.join(',\\n')}\n\t\t);\n\t\t`);\n\n\t\t// actions dictionary text representation\n\t\tthis.dictionaries.push(`\n\t\tpublic static final Map<String, TAutomataBaseAction> actionsDictionary = Map.of(\n\t\t${Object\n\t\t\t.entries(this.actionDictionary.getDictionary())\n\t\t\t.map(([key, value]) => `\"${key}\", TAutomataBaseAction.of(${value}L)`)\n\t\t\t.join(',\\n')}\n\t\t);\n\t\t`);\n\t}\n\n\t// Initial context is empty\n\tprivate getInitialContext(): string {\n\t\treturn 'new TAutomataBaseContext()';\n\t}\n\n\t// Fetches first state from list\n\tprivate getInitialState(): number | null | undefined {\n\t\treturn this.stateDictionary.getStateValues({ keys: [StartState] })[0];\n\t}\n\n\t// Root reducer function\n\tprivate getRootReducer(): string {\n\t\treturn `\n            (obj) -> {\n                if(obj.action == null || obj.payload == null) {\n                    return TAutomataStateContext.of(obj.state, obj.context);\n                }\n\t\t\t\t${this.getRootReducerStateValidation()}\n\t\t\t\t${this.getRootReducerActionValidation()}\n                AutomataStateTransitionResult res = stateTransitionMatrix.get(obj.state).get(obj.action);\n\t\t\t\treturn TAutomataStateContext.of(\n\t\t\t\t\t\tres.newState(),\n\t\t\t\t\t\tres.getNewContext().apply(new AutomataPayloadContext(obj.payload, obj.context))\n\t\t\t\t);\n            }\n        `;\n\t}\n\n\t// Checks if state can be found in dictionary for the automata\n\tprivate getRootReducerStateValidation(): string {\n\t\treturn `\n            // state validation\n            if(!stateTransitionMatrix.containsKey(obj.state)) {\n                throw new RuntimeException(\"Invalid state, maybe machine isn't running\");\n            }\n        `;\n\t}\n\n\t// Checks if action can be found in dictionary for the automata & if the action is appropriate for the automata state\n\tprivate getRootReducerActionValidation(): string {\n\t\treturn `\n            // action validation\n            if(!stateTransitionMatrix.get(obj.state).containsKey(obj.action)) {\n                return TAutomataStateContext.of(\n                        obj.state,\n                        obj.context\n                );\n            }\n        `;\n\t}\n\n\tprivate setupClassMembers(): string {\n\t\treturn `\n            private TAutomataBaseState state;\n            private TAutomataBaseContext context;\n            private IAutomataReducer rootReducer;\n        `;\n\t}\n\n\tprivate setupClassMembersAccessors(): string {\n\t\treturn `\n            public Map getStateTransitionMatrix() { return this.stateTransitionMatrix; }\n            public TAutomataStateContext getContext() { return new TAutomataStateContext(this.state, this.context); }\n            public IAutomataReducer getReducer() { return this.rootReducer; }\n\n            public void setContext(TAutomataStateContext context) {\n                this.state = context.state;\n                this.context = context.context;\n            }\n        `;\n\t}\n\n\tprivate dispatchMethod(): string {\n\t\treturn `\n            public TAutomataStateContext dispatch(TAutomataActionPayload action) {\n                TAutomataStateContext reducedValue =\n                        this.rootReducer.apply(new TAutomataStateContextActionPayload(this.state, this.context, action.action, action.payload));\n                this.setContext(reducedValue);\n                return reducedValue;\n            }\n        `;\n\t}\n\n\tprivate toStringMethod(): string {\n\t\treturn `\n            @Override\n            public String toString() {\n                return \"GeneratedAutomata{\" +\n                        \"statesDictionary=\" + statesDictionary +\n                        \", actionsDictionary=\" + actionsDictionary +\n                        \", stateTransitionMatrix=\" + stateTransitionMatrix +\n                        '}';\n            }\n        `;\n\t}\n\n\t// Types necessary for the automata\n\tprivate getTypes(): string {\n\t\treturn `\n            public abstract static class TAutomataBaseType {\n                protected Long value;\n                public Long getValue() { return value; }\n\n                @Override\n                public boolean equals(Object o) {\n                    if (this == o) return true;\n                    if (o == null || getClass() != o.getClass()) return false;\n                    TAutomataBaseType that = (TAutomataBaseType) o;\n                    return Objects.equals(value, that.value);\n                }\n\n                @Override\n                public int hashCode() {\n                    return Objects.hash(value);\n                }\n            }\n\n            public static class TAutomataBaseState extends TAutomataBaseType {\n\n                private TAutomataBaseState() {}\n                private TAutomataBaseState(Long value) { this.value = value; }\n\n                public static TAutomataBaseState of(Long value) { return new TAutomataBaseState(value); }\n\n            }\n\n            public static class TAutomataBaseAction extends TAutomataBaseType {\n\n                private TAutomataBaseAction() {}\n                private TAutomataBaseAction(Long value) { this.value = value; }\n\n                public static TAutomataBaseAction of(Long value) { return new TAutomataBaseAction(value); }\n\n            }\n\n            public static class TAutomataBaseContext extends HashMap<String, Object> {\n                public TAutomataBaseContext(Map<String, Object> map) { super(map); }\n\n                private TAutomataBaseContext(TAutomataBasePayload payload) {\n                    super();\n                    this.putAll(payload);\n                }\n\n                public static TAutomataBaseContext fromPayload(TAutomataBasePayload payload) {\n                    return new TAutomataBaseContext(payload);\n                }\n            }\n\n            public static class TAutomataBasePayload extends HashMap<String, Object> {\n            }\n\n            public record AutomataStateTransitionResult (\n                    TAutomataBaseState newState,\n                    Function<AutomataPayloadContext, TAutomataBaseContext> getNewContext\n            ) {\n            }\n\n            public interface IAutomataReducer extends Function<TAutomataStateContextActionPayload, TAutomataStateContext> {}\n\n            public record TAutomataStateContext(TAutomataBaseState state, TAutomataBaseContext context) {}\n            public record TAutomataStateContextActionPayload(TAutomataBaseState state, TAutomataBaseContext context, TAutomataBaseAction action, TAutomataBasePayload payload) {}\n            public record AutomataPayloadContext(TAutomataBasePayload payload,TAutomataBaseContext context) {}\n            public record TAutomataActionPayload(TAutomataBaseAction action, TAutomataBasePayload payload) {}\n        `;\n\t}\n}\n","import { BasicActionDictionary, BasicEventDictionary, BasicStateDictionary } from '@yantrix/automata';\nimport { ExpressionTypes, TRefereneceType } from '@yantrix/yantrix-parser';\n\nimport { ByPassAction } from '../constants.js';\nimport { TStateDiagramMatrixIncludeNotes } from '../types/common.js';\n\nexport function fillDictionaries(\n\tdiagram: TStateDiagramMatrixIncludeNotes,\n\tstateDictionary?: BasicStateDictionary,\n\tactionDictionary?: BasicActionDictionary,\n\teventDictionary?: BasicEventDictionary,\n): void {\n\t// fill state dictionary\n\tif (stateDictionary) {\n\t\tconst stateKeys = diagram.states.map(s => s.id);\n\t\tstateDictionary.addStates({ keys: stateKeys });\n\t}\n\n\t// fill action dictionary\n\tif (actionDictionary) {\n\t\tfor (const state of diagram.states) {\n\t\t\tfor (const path of state.actionsPath.map(p => p.action)) {\n\t\t\t\tconst firstAction = path[0]!;\n\t\t\t\tconst isUniqueAction = actionDictionary.getActionValues({ keys: [firstAction] })[0] === null;\n\t\t\t\tif (!isUniqueAction) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tactionDictionary.addActions({ keys: [firstAction] });\n\t\t\t}\n\t\t}\n\t}\n\n\t// fill event dictionary\n\tif (eventDictionary) {\n\t\tfor (const state of diagram.states) {\n\t\t\tconst emittedEventsKeys = state.notes?.emit.map(event => event.identifier);\n\t\t\tif (emittedEventsKeys && emittedEventsKeys.length > 0) {\n\t\t\t\tconst uniqueKeys = emittedEventsKeys.filter(e => eventDictionary.getEventValues({ keys: [e] })[0] == null);\n\t\t\t\teventDictionary.addEvents({ keys: uniqueKeys });\n\t\t\t}\n\n\t\t\tconst subscribedEventsKeys = state.notes?.subscribe.map(event => event.identifier);\n\t\t\tif (subscribedEventsKeys && subscribedEventsKeys.length > 0) {\n\t\t\t\tconst uniqueKeys = subscribedEventsKeys.filter(e => eventDictionary.getEventValues({ keys: [e] })[0] == null);\n\t\t\t\teventDictionary.addEvents({ keys: uniqueKeys });\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @description\n * Finds all states with \"byPass\" note and returns array of their IDs.\n * \"byPass\" note should have one transition to the next state.\n * If there are more than one transition then error is thrown.\n * If there is no transition then error is thrown.\n * If state is not found in the dictionary then error is thrown.\n * @param {TStateDiagramMatrixIncludeNotes} diagram\n * @param {BasicStateDictionary} stateDictionary\n * @returns {number[]}\n */\nexport function getStatesByPass(diagram: TStateDiagramMatrixIncludeNotes, stateDictionary: BasicStateDictionary) {\n\tconst byPassed: number[] = [];\n\n\tdiagram.states.forEach((state) => {\n\t\tif (state.notes?.byPass) {\n\t\t\tconst actionChains = diagram.actionChains[state.id];\n\n\t\t\tif (!actionChains) throw new Error(`ByPassed state ${state.id} doesn\\'t have transition`);\n\t\t\tconst byPassAction = actionChains[ByPassAction];\n\n\t\t\tif (!byPassAction) {\n\t\t\t\tthrow new Error(`ByPass action ${ByPassAction} not found for state ${state.id}`);\n\t\t\t}\n\n\t\t\tbyPassAction.chains.forEach(({ chain }) => {\n\t\t\t\tif (byPassAction.chains.length > 1 && chain.length === 0) {\n\t\t\t\t\tthrow new Error(`ByPass action ${ByPassAction} should have more than one transition`);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst value = stateDictionary.getStateValues({ keys: [state.id] })[0];\n\t\t\tif (!value) throw new Error(`State ${state.id} not found`);\n\n\t\t\tbyPassed.push(value);\n\t\t}\n\t});\n\n\treturn byPassed;\n}\n\nexport const pathRecord: Record<TRefereneceType, string> = {\n\t[ExpressionTypes.Constant]: 'constant',\n\t[ExpressionTypes.Context]: 'prevContext',\n\t[ExpressionTypes.Payload]: 'payload',\n};\n","export const ByPassAction = '[-]';\nexport const DEFAULT_USER_FUNCTIONS_NAMESPACE = 'userFunctions';\n","import { BasicActionDictionary, BasicEventDictionary, BasicStateDictionary } from '@yantrix/automata';\nimport { TNullable } from '@yantrix/utils';\nimport { TDefine, TInjectIdent } from '@yantrix/yantrix-parser';\nimport { DEFAULT_USER_FUNCTIONS_NAMESPACE } from '../../../constants';\nimport {\n\tICodegen,\n\tTConstants,\n\tTExpressionRecord,\n\tTGetCodeOptionsMap,\n\tTModuleParams,\n\tTStateDiagramMatrixIncludeNotes,\n} from '../../../types/common';\nimport { fillDictionaries, getStatesByPass } from '../../shared';\nimport { ModuleNames } from '../index';\nimport { JavaScriptCompiler } from './JavaScriptCompiler';\nimport { TImports } from './JavaScriptCompiler/imports';\n\nexport class JavaScriptCodegen implements ICodegen<typeof ModuleNames.JavaScript> {\n\tstateDictionary: BasicStateDictionary;\n\tactionDictionary: BasicActionDictionary;\n\teventDictionary: BasicEventDictionary;\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\thandlersDict: string[];\n\n\tdefines: TDefine[];\n\tinjects: TInjectIdent[];\n\n\tinitialContextKeys: string[];\n\tchangeStateHandlers: string[];\n\tdependencyGraph: Map<string, Set<string>>;\n\tconstants: TConstants | null;\n\texpressions: TExpressionRecord;\n\tinjectedPath: TNullable<string> = null;\n\n\tdictionaries: string[];\n\tprotected importNamespaces: TNullable<TImports> = {};\n\tprotected imports: TImports = {\n\t\t'@yantrix/core': [\n\t\t\t'GenericAutomata',\n\t\t\t'FunctionDictionary',\n\t\t\t'EventDictionary as GlobalEventDictionary',\n\t\t\t'AutomataEventAdapter',\n\t\t\t'BasicEventBus',\n\t\t\t'builtInFunctions',\n\t\t\t'internalFunctions',\n\t\t],\n\t};\n\n\tconstructor({ diagram, constants, injectedFunctions }: TModuleParams) {\n\t\tthis.stateDictionary = new BasicStateDictionary();\n\t\tthis.actionDictionary = new BasicActionDictionary();\n\t\tthis.eventDictionary = new BasicEventDictionary();\n\n\t\tthis.diagram = diagram;\n\n\t\tthis.constants = constants;\n\n\t\tthis.defines = diagram.states.flatMap(state => state.notes?.defines ?? []);\n\t\tthis.injects = diagram.states.flatMap(state => state.notes?.inject ?? []);\n\n\t\tthis.expressions = JavaScriptCompiler.expressions.functions.setupExpressions({\n\t\t\tconstants: this.constants,\n\t\t});\n\n\t\tconst buildDependencyGraphResult = JavaScriptCompiler.imports.functions.buildDependencyGraph({\n\t\t\tdependencyGraph: new Map(),\n\t\t\tdiagram: this.diagram,\n\t\t\timports: this.imports,\n\t\t});\n\t\tthis.imports = buildDependencyGraphResult.imports;\n\n\t\tthis.dependencyGraph = buildDependencyGraphResult.dependencyGraph;\n\n\t\tthis.handlersDict = [];\n\t\tthis.changeStateHandlers = [];\n\t\tthis.dictionaries = [];\n\t\tthis.initialContextKeys = [];\n\n\t\tif (injectedFunctions.path) {\n\t\t\tthis.importNamespaces = {\n\t\t\t\t[injectedFunctions.path]: [DEFAULT_USER_FUNCTIONS_NAMESPACE],\n\t\t\t};\n\t\t\tthis.injectedPath = injectedFunctions.path;\n\t\t}\n\n\t\tfillDictionaries(diagram, this.stateDictionary, this.actionDictionary, this.eventDictionary);\n\n\t\tthis.dictionaries = JavaScriptCompiler.dictionaries.functions.setupDictionaries({\n\t\t\tdependencyGraph: this.dependencyGraph,\n\t\t\tdiagram: this.diagram,\n\t\t\texpressionRecord: this.expressions,\n\t\t\tactionDictionary: this.actionDictionary,\n\t\t\tstateDictionary: this.stateDictionary,\n\t\t\teventDictionary: this.eventDictionary,\n\t\t\tinjectedFunctions,\n\t\t\timports: this.imports,\n\t\t});\n\t}\n\n\tpublic getCode(options: TGetCodeOptionsMap[typeof ModuleNames.JavaScript]) {\n\t\tconst props = {\n\t\t\timports: this.imports,\n\t\t\timportNamespaces: this.importNamespaces,\n\t\t\tdictionaries: this.dictionaries,\n\t\t\tdiagram: this.diagram,\n\t\t\tstateDictionary: this.stateDictionary,\n\t\t\tactionDictionary: this.actionDictionary,\n\t\t\teventDictionary: this.eventDictionary,\n\t\t\texpressions: this.expressions,\n\t\t\tbyPassedList: getStatesByPass(this.diagram, this.stateDictionary),\n\t\t\tdictionariesSerializer: JavaScriptCompiler.dictionaries.serializer,\n\t\t\tclassSerializer: JavaScriptCompiler.class.serializer,\n\t\t\tclassName: options.className,\n\t\t\tdefines: this.defines,\n\t\t\tinjectedPath: this.injectedPath,\n\t\t\tinjects: this.injects,\n\t\t};\n\t\treturn `\n\t\t\t${JavaScriptCompiler.imports.serializer.getImportsCode(props)}\n\t\t\t${JavaScriptCompiler.imports.serializer.importAll(props)}\n\t\t\t${JavaScriptCompiler.functions.serializer(props)}\n\t\t\t${JavaScriptCompiler.dictionaries.serializer.getDictionariesCode(props)}\n\t\t\t${JavaScriptCompiler.events.serializer.getEventAdapterCode(props)}\n\t\t\t${JavaScriptCompiler.events.serializer.getCreateEventBusFunctionCode()}\n\t\t\t${JavaScriptCompiler.dictionaries.serializer.getActionsMap(props)}\n\t\t\t${JavaScriptCompiler.dictionaries.serializer.getStatesMap(props)}\n\t\t\t${JavaScriptCompiler.dictionaries.serializer.getSerializedSetByPassed(props)}\n\t\t\t${JavaScriptCompiler.context.serializer.getDefaultContext(props)}\n\t\t\t${JavaScriptCompiler.context.serializer.getStateReducerCode(props)}\n\t\t\t${JavaScriptCompiler.forks.serializer.getPredicatesCode(props)}\n\t\t\t${JavaScriptCompiler.dictionaries.serializer.getActionToStateFromState(props)}\n\t\t\t${JavaScriptCompiler.class.serializer.getClassTemplate(props)}\n\t\t\t${JavaScriptCompiler.dictionaries.serializer.getAutomataEpochCounterCode()}\n\t\t\t${JavaScriptCompiler.dictionaries.serializer.getAutomataInternalsRegisterCode(props)}\n\t\t\t${JavaScriptCompiler.dictionaries.serializer.getFunctionDictionaryInternalRegisterCode()}\n\t\t\t${JavaScriptCompiler.dictionaries.serializer.getFunctionDictionaryBuiltInRegisterCode()}\n\t\t`;\n\t}\n}\n","import { BasicActionDictionary, BasicEventDictionary, BasicStateDictionary } from '@yantrix/automata';\nimport { StartState } from '@yantrix/mermaid-parser';\nimport { ByPassAction } from '../../../../../constants';\nimport { TExpressionRecord, TStateDiagramMatrixIncludeNotes } from '../../../../../types/common';\nimport { replaceFileContents } from '../../../../../utils/utils';\nimport { context } from '../context';\nimport { state } from '../state';\n\nexport function getClassTemplate(props: {\n\tclassName: string;\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tstateDictionary: BasicStateDictionary;\n\teventDictionary: BasicEventDictionary;\n\tactionDictionary: BasicActionDictionary;\n\texpressions: TExpressionRecord;\n\tclassSerializer: typeof classSerializer;\n}) {\n\tconst { diagram } = props;\n\n\tconst initialState = state.functions.getInitialState({\n\t\tdiagram,\n\t});\n\n\tconst stateValue = props.stateDictionary.getStateValues({ keys: [initialState] })[0];\n\n\tif (stateValue === null) {\n\t\tthrow new Error('GetClassTemplate: Invalid state');\n\t}\n\n\tconst a = context.functions.getInitialContextShape({\n\t\tdiagram,\n\t\tstateName: StartState,\n\t});\n\tconst b = context.functions.getInitialContextShape({\n\t\tdiagram,\n\t\tstateName: initialState,\n\t});\n\n\tconst initialContext = Object.assign({}, a, b);\n\n\treturn replaceFileContents(\n\n\t\t{\n\t\t\t'%CLASSNAME%': props.className,\n\t\t\t'%ID%': `'${props.className}_${Date.now()}'`,\n\t\t\t'%ACTIONS_MAP%': 'actionsMap',\n\t\t\t'%STATES_MAP%': 'statesMap',\n\t\t\t'%GET_STATE%': props.classSerializer.getGetStateFunc().toString(),\n\t\t\t'%HAS_STATE%': props.classSerializer.getHasStateFunc({ className: props.className }).toString(),\n\t\t\t'%GET_ACTION%': props.classSerializer.getGetActionFunc().toString(),\n\t\t\t'%CREATE_ACTION%': props.classSerializer.getCreateActionFunc({ className: props.className }).toString(),\n\t\t\t'%STATE%': (stateValue ?? -1).toString(),\n\t\t\t'%CONTEXT%': JSON.stringify(initialContext),\n\t\t\t'%REDUCER%': props.classSerializer.getRootReducer().toString(),\n\t\t\t'%STATE_VALIDATOR%': props.classSerializer.getStateValidator().toString(),\n\t\t\t'%ACTION_VALIDATOR%': props.classSerializer.getActionValidator().toString(),\n\t\t\t'%FUNCTION_REGISTRY%': 'functionDictionary',\n\t\t\t'%EVENT_DICTIONARY%': 'GlobalEventDictionary',\n\t\t\t'%IS_KEY_OF%': props.classSerializer.getIsKeyOf().toString(),\n\t\t\t'%initContext%': props.classSerializer.getInitialContextForAutomata().toString(),\n\t\t},\n\t);\n}\n\nexport function getHasStateFunc(props: { className: string }) {\n\treturn `(instance, state) => instance.state === ${props.className}.getState(state)`;\n}\n\nexport function getGetStateFunc() {\n\treturn `(state) => statesDictionary[state]`;\n}\n\nexport function getGetActionFunc() {\n\treturn `(action) => actionsDictionary[action];`;\n}\n\nexport function getCreateActionFunc(props: { className: string }) {\n\treturn `\n\t\t(action, payload) => {\n\t\t\tconst actionId = ${props.className}.getAction(action);\n\t\t\treturn {\n\t\t\t\taction: actionId,\n\t\t\t\tpayload,\n\t\t\t}\n\t\t}`;\n}\n\nexport function getActionValidator() {\n\treturn `(a) => Object.values(actionsDictionary).includes(a)`;\n}\n\nexport function getRootReducer() {\n\treturn `({ action, context, payload, state }) => {\n\t\t\t\t\tif (!action || payload === null) return { state, context };\n\n\t\t\t\t\t${getRootReducerStateValidation()}\n\t\t\t\t\t${getRootReducerActionValidation()}\n\n\t\t\t\t\tconst getNew = (action,state,context,payload) => {\n\t\t\t\t\t\tthis.lastAction = action;\n\n\t\t\t\t\t\tconst actionMove = actionToStateFromStateDict[state][action];\n\t\t\t\t\t\tconst newStateObject = { state: actionMove.state[0] }\n\t\t\t\t\t\tconst contextWithInitial = getDefaultContext(context,payload)\n\n\n\t\t\t\t\t\t${getRootReducerNewStatePredicateResolution()}\n\n\t\t\t\t\t\tconst newState = newStateObject.state;\n\t\t\t\t\t\tconst newContextFunc = reducer[newState]\n\n\t\t\t\t\t\tif(typeof newContextFunc !== 'function') {\n\t\t\t\t\t\t\tthrow new Error('Invalid newContextFunc')\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {state:newState, context: newContextFunc(contextWithInitial, payload, this.getFunctionRegistry(), this)};\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet localCtx = getNew(action,state,context,payload)\n\n\t\t\t\t\twhile(byPassedStates.has(localCtx.state)) {\n\t\t\t\t\t\tlocalCtx = getNew(actionsDictionary['${ByPassAction}'], localCtx.state, localCtx.context, {})\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.incrementCycle(); // increment automata local cycle counter\n\t\t\t\t\tincrementEpoch(); // increment global epoch counter\n\n\t\t\t\t\treturn localCtx\n\n  \t\t\t\t}`;\n}\n\nexport function getRootReducerNewStatePredicateResolution() {\n\treturn `\n\t\t\tif(actionMove.state.length > 1 && actionMove.predicate != null) {\n\t\t\t\t// determine new state from predicate\n\t\t\t\tconst resolvedPredicateValue = actionMove.predicate(contextWithInitial, payload, functionDictionary);\n\t\t\t\tif(resolvedPredicateValue == null) return { state, context };\n\t\t\t\tnewStateObject.state = resolvedPredicateValue;\n\t\t\t}\n\t\t`;\n}\n\nexport function getRootReducerStateValidation() {\n\treturn `${getRootReducerStateValidationHead()} ${getRootReducerStateValidationError()}`;\n}\n\nexport function getRootReducerStateValidationHead() {\n\treturn `if (!this.isKeyOf(state, actionToStateFromStateDict))`;\n}\n\nexport function getRootReducerStateValidationError() {\n\treturn `throw new Error(\"Invalid state, maybe machine isn't running.\")`;\n}\n\nexport function getRootReducerActionValidation() {\n\treturn `if (!this.isKeyOf(action, actionToStateFromStateDict[state])) return { state, context };`;\n}\n\nexport function getStateValidator() {\n\treturn `(s) => Object.values(statesDictionary).includes(s)`;\n}\n\nexport function getIsKeyOf() {\n\treturn `(key, obj) => key in obj`;\n}\n\nfunction getInitialContextForAutomata() {\n\treturn `const initReducer = reducer[this.state];\n\t\tconst prev = this.getContext()?.context ?? {};\n\t\tconst initContext = initReducer(prev, {}, this.getFunctionRegistry(), this);\n\t\tthis.setContext({ state: this.state, context: Object.assign({}, prev, initContext) });\n\t`;\n}\n\nexport const classSerializer = {\n\tgetClassTemplate,\n\tgetStateValidator,\n\tgetHasStateFunc,\n\tgetGetStateFunc,\n\tgetGetActionFunc,\n\tgetCreateActionFunc,\n\tgetActionValidator,\n\tgetRootReducer,\n\tgetRootReducerStateValidation,\n\tgetRootReducerStateValidationHead,\n\tgetRootReducerStateValidationError,\n\tgetRootReducerActionValidation,\n\tgetIsKeyOf,\n\tgetInitialContextForAutomata,\n} as const;\n","export const JavaScriptTemplate = `\nexport class %CLASSNAME% extends GenericAutomata {\n\n    static id = %ID%;\n    static actions = %ACTIONS_MAP%;\n    static states = %STATES_MAP%;\n    static getState = %GET_STATE%;\n    static hasState = %HAS_STATE%;\n    static getAction = %GET_ACTION%;\n    static createAction = %CREATE_ACTION%;\n\n    constructor() {\n        super(eventAdapter);\n        this.init({\n            state: %STATE%,\n            context:%CONTEXT%,\n            rootReducer: %REDUCER%,\n            stateValidator: %STATE_VALIDATOR%,\n            actionValidator: %ACTION_VALIDATOR%,\n            functionRegistry: %FUNCTION_REGISTRY%\n        });\n        %initContext%\n    }\n\n    isKeyOf = %IS_KEY_OF%;\n}\n\nexport default %CLASSNAME%;`;\n","import { JavaScriptTemplate } from '../core/templates/JavaScript';\n\nexport function replaceFileContents(replacementMap: Record<string, string>): string {\n\tlet res = JavaScriptTemplate;\n\tObject.entries(replacementMap).forEach(([template, str]) => {\n\t\tres = res.replaceAll(template, str);\n\t});\n\treturn res;\n}\n\n/**\n * Преобразует ключи объекта в число\n */\nexport function convertKeysToNumberString(obj: object): string {\n\tif (typeof obj !== 'object' || obj === null)\n\t\treturn JSON.stringify(obj);\n\n\tlet result = '{';\n\tlet first = true;\n\tfor (const [key, value] of Object.entries(obj)) {\n\t\tif (!first)\n\t\t\tresult += ',';\n\t\tfirst = false;\n\t\tresult += `${Number(key)}:${convertKeysToNumberString(value)}`;\n\t}\n\tresult += '}';\n\treturn result;\n}\n","import { TStateDiagramMatrixIncludeNotes } from '../../../../../types/common';\n\nexport function getInitialContextShape(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tstateName: string;\n}) {\n\tconst states = props.diagram.states.filter(state => state.id === props.stateName);\n\n\tif (states.length) {\n\t\treturn states.reduce(\n\t\t\t(acc, curr) => {\n\t\t\t\tcurr.notes?.contextDescription.forEach((el) => {\n\t\t\t\t\tel.context.forEach((el) => {\n\t\t\t\t\t\tacc[el.keyItem.identifier] = null;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record<string, null>,\n\t\t);\n\t}\n\n\treturn null;\n};\n","import { BasicActionDictionary, BasicStateDictionary } from '@yantrix/automata';\nimport { StartState } from '@yantrix/mermaid-parser';\nimport {\n\tExpressionTypes,\n\tisContextWithReducer,\n\tisKeyItemReference,\n\tisKeyItemWithExpression,\n\tTContextItem,\n\tTKeyItems,\n} from '@yantrix/yantrix-parser';\nimport { TExpressionRecord, TStateDiagramMatrixIncludeNotes } from '../../../../../types/common';\nimport { pathRecord } from '../../../../shared';\nimport { expressions } from '../expressions';\n\nfunction getStateReducerCode(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tstateDictionary: BasicStateDictionary;\n\tactionDictionary: BasicActionDictionary;\n\texpressions: TExpressionRecord;\n}) {\n\treturn `const reducer = {\n\t\t${getStateToContext(props).join(',\\n\\t')}\n\t}`;\n}\n\nfunction getContextItem(props: {\n\tctx: TContextItem;\n\texpressions: TExpressionRecord;\n}) {\n\tif (isContextWithReducer(props.ctx)) {\n\t\tconst { context, reducer } = props.ctx;\n\n\t\treturn getBoundValues({\n\t\t\texpressions: props.expressions,\n\t\t\tarr: mapReducerItems({ reducer, expressions: props.expressions }),\n\t\t\tcontext,\n\t\t});\n\t} else {\n\t\tconst { context } = props.ctx;\n\t\treturn context.map(({ keyItem }) => {\n\t\t\tconst { identifier } = keyItem;\n\t\t\tif (isKeyItemWithExpression(keyItem)) {\n\t\t\t\tconst expressionValue = expressions.functions.getExpressionValue({\n\t\t\t\t\texpression: keyItem.expression,\n\t\t\t\t\texpressionRecord: props.expressions,\n\t\t\t\t});\n\n\t\t\t\treturn `${identifier}: ${expressions.serializer.getDefaultPropertyContext('prevContext', identifier, expressionValue)}`;\n\t\t\t} else {\n\t\t\t\treturn `${identifier}: ${expressions.serializer.getDefaultPropertyContext('prevContext', identifier)}`;\n\t\t\t}\n\t\t});\n\t}\n};\n\nfunction mapReducerItems(props: {\n\treducer: TKeyItems<'reducer'>;\n\tsourcePath?: string;\n\texpressions: TExpressionRecord;\n}) {\n\treturn props.reducer\n\t\t.map(({ keyItem }) => {\n\t\t\tif (isKeyItemReference(keyItem)) {\n\t\t\t\tconst { expressionType, identifier: boundIdentifier } = keyItem;\n\t\t\t\tconst path = props.sourcePath ?? pathRecord[expressionType];\n\n\t\t\t\tif (keyItem.expressionType === ExpressionTypes.Constant) {\n\t\t\t\t\tconst expressionValueRight = expressions.functions.getExpressionValue({\n\t\t\t\t\t\texpression: keyItem,\n\t\t\t\t\t\texpressionRecord: props.expressions,\n\t\t\t\t\t});\n\t\t\t\t\treturn `(function(){\n\t\t\t\t\t\t\treturn ${expressionValueRight}\n\t\t\t\t\t\t\t}())`;\n\t\t\t\t}\n\n\t\t\t\tif (isKeyItemWithExpression(keyItem)) {\n\t\t\t\t\tconst { expression } = keyItem;\n\n\t\t\t\t\tconst expressionValueRight = expressions.functions.getExpressionValue({\n\t\t\t\t\t\texpression,\n\t\t\t\t\t\texpressionRecord: props.expressions,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn expressions.serializer.getDefaultPropertyContext(path, boundIdentifier, expressionValueRight);\n\t\t\t\t}\n\n\t\t\t\treturn expressions.serializer.getDefaultPropertyContext(path, boundIdentifier);\n\t\t\t} else {\n\t\t\t\tconst { expression } = keyItem;\n\n\t\t\t\tconst expressionValueRight = expressions.functions.getExpressionValue({\n\t\t\t\t\texpression,\n\t\t\t\t\texpressionRecord: props.expressions,\n\t\t\t\t});\n\t\t\t\treturn `(function(){\n\t\t\t\t\t\treturn ${expressionValueRight}\n\t\t\t\t\t}())`;\n\t\t\t}\n\t\t});\n}\n\nfunction getBoundValues(props: {\n\texpressions: TExpressionRecord;\n\tarr: string[];\n\tcontext: any;\n}) {\n\treturn props.arr\n\t\t.map((el, index) => {\n\t\t\tconst item = props.context[index];\n\t\t\tif (!item) {\n\t\t\t\tthrow new Error('Unexpected index bound property');\n\t\t\t}\n\t\t\tconst { keyItem } = item;\n\t\t\tconst { identifier: targetProperty } = keyItem;\n\n\t\t\tif (isKeyItemWithExpression(keyItem)) {\n\t\t\t\tconst { expression } = keyItem;\n\n\t\t\t\tconst expressionValueRight = expressions.functions.getExpressionValue({\n\t\t\t\t\texpression,\n\t\t\t\t\texpressionRecord: props.expressions,\n\t\t\t\t});\n\n\t\t\t\treturn `${targetProperty}: (function(){\n\t\t\tconst boundValue = ${el}\n\t\t\tif(boundValue !== null){\n\t\t\t\treturn boundValue\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn ${expressionValueRight}\n\t\t\t}\n\n\t\t}())`;\n\t\t\t} else {\n\t\t\t\treturn `${targetProperty}: (function(){\n\t\t\tconst boundValue = ${el}\n\n\t\t\treturn boundValue\n\n\t\t}())`;\n\t\t\t}\n\t\t});\n}\n\nfunction getContextTransition(props: {\n\tvalue: number;\n\tstateDictionary: BasicStateDictionary;\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\texpressions: TExpressionRecord;\n}) {\n\tconst stateFromDict = props.stateDictionary.getStateKeys({ states: [props.value] })[0];\n\n\tif (stateFromDict === null) {\n\t\tthrow new Error(`Invalid state - ${props.value}`);\n\t}\n\n\tconst diagramState = props.diagram.states.find((diagramState) => {\n\t\treturn diagramState.id === stateFromDict;\n\t});\n\n\tif (!diagramState) {\n\t\tthrow new Error(`Invalid state - ${props.value}`);\n\t}\n\n\tconst ctxRes: string[] = [];\n\n\tdiagramState.notes?.contextDescription.forEach((ctx) => {\n\t\tconst newContext = getContextItem({\n\t\t\tctx,\n\t\t\texpressions: props.expressions,\n\t\t});\n\n\t\tctxRes.push(...newContext);\n\t});\n\n\tif (ctxRes.length === 0) return 'prevContext';\n\n\treturn `{${ctxRes.join(',\\n\\t')}}`;\n};\n\nfunction getStateToContext(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tstateDictionary: BasicStateDictionary;\n\tactionDictionary: BasicActionDictionary;\n\texpressions: TExpressionRecord;\n}) {\n\treturn props.diagram.states.map((state) => {\n\t\tconst stateValue = props.stateDictionary.getStateValues({ keys: [state.id] })[0];\n\n\t\tif (!stateValue) {\n\t\t\tthrow new Error('Invalid state');\n\t\t}\n\n\t\treturn `${stateValue}: (prevContext, payload, functionDictionary, automata) => {\n\n\t\t\t\treturn ${getContextTransition({\n\t\t\t\t\tvalue: stateValue,\n\t\t\t\t\tstateDictionary: props.stateDictionary,\n\t\t\t\t\tdiagram: props.diagram,\n\t\t\t\t\texpressions: props.expressions,\n\t\t\t\t})}\n\t\t\t}`;\n\t});\n}\n\nfunction getDefaultContext(props: {\n\tstateDictionary: BasicStateDictionary;\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\texpressions: TExpressionRecord;\n}) {\n\tconst state = props.stateDictionary.getStateValues({ keys: [StartState] })[0];\n\n\tif (state) {\n\t\tconst ctx = getContextTransition({\n\t\t\tdiagram: props.diagram,\n\t\t\texpressions: props.expressions,\n\t\t\tstateDictionary: props.stateDictionary,\n\t\t\tvalue: state,\n\t\t});\n\n\t\treturn `const getDefaultContext = (prevContext, payload) => {\n\t\t\t\tconst ctx = ${ctx}\n\t\t\t\treturn  Object.assign({}, prevContext, ctx);\n\t\t\t}\n\t\t\t`;\n\t}\n\n\treturn `const getDefaultContext = (prevContext, payload) => {\n\t\t\t\treturn prevContext\n\t\t}`;\n}\n\nexport const contextSerializer = {\n\tgetStateReducerCode,\n\tgetContextItem,\n\tmapReducerItems,\n\tgetBoundValues,\n\tgetStateToContext,\n\tgetDefaultContext,\n};\n","import {\n\tExpressionTypes,\n\tisKeyItemReference,\n\tisKeyItemWithExpression,\n\tmaxNestedFuncLevel,\n\tTExpression,\n\tTExpressionDefineMap,\n\tTExpressionFunction,\n\tTMappedKeys,\n} from '@yantrix/yantrix-parser';\nimport { TConstants, TExpressionRecord } from '../../../../../types/common';\nimport { pathRecord } from '../../../../shared';\nimport { getFunctionBody } from './functions';\nimport { expressionsSerializer } from './serializer';\n\nexport function setupExpressions(props: {\n\tconstants: TConstants | null;\n}): TExpressionRecord {\n\tconst expressionRecord: TExpressionRecord = {\n\t\t[ExpressionTypes.ArrayDeclaration]: () => '[]',\n\t\t[ExpressionTypes.Constant]: ({ identifier }) => {\n\t\t\tif (props.constants === null) {\n\t\t\t\tthrow new Error('Missing dictionary with constants');\n\t\t\t}\n\n\t\t\tif (props.constants[identifier] === undefined) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`The identifier is missing in the const dictionary: ${identifier}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof props.constants[identifier] === 'string')\n\t\t\t\treturn `\"${props.constants[identifier]}\"`;\n\n\t\t\treturn `${props.constants[identifier]}`;\n\t\t},\n\t\t[ExpressionTypes.Function]: () => {\n\t\t\treturn 'null';\n\t\t},\n\t\t[ExpressionTypes.DecimalDeclaration]: ({ NumberDeclaration }) => {\n\t\t\treturn `${NumberDeclaration}`;\n\t\t},\n\t\t[ExpressionTypes.IntegerDeclaration]: ({ NumberDeclaration }) => {\n\t\t\treturn `${NumberDeclaration}`;\n\t\t},\n\t\t[ExpressionTypes.StringDeclaration]: ({ StringDeclaration }) => {\n\t\t\treturn `'${StringDeclaration}'`;\n\t\t},\n\t\t[ExpressionTypes.Context]: ({ identifier }) => {\n\t\t\treturn `prevContext === null ||  (prevContext === undefined || prevContext['${identifier}'] === undefined) ? null : prevContext['${identifier}']`;\n\t\t},\n\t\t[ExpressionTypes.Payload]: ({ identifier }) => {\n\t\t\treturn `payload === null || (payload === undefined  || payload['${identifier}'] === undefined) ? null : payload['${identifier}']`;\n\t\t},\n\t} as const;\n\n\texpressionRecord[ExpressionTypes.Function] = (func) => {\n\t\tlet currentRecLevel = 0;\n\t\tconst recursive = (func: TExpressionFunction) => {\n\t\t\tconst { FunctionDeclaration } = func;\n\t\t\tconst { FunctionName, Arguments } = FunctionDeclaration;\n\n\t\t\tconst res: string[] = [];\n\n\t\t\tif (currentRecLevel < maxNestedFuncLevel) {\n\t\t\t\tArguments.forEach((item) => {\n\t\t\t\t\tif (isKeyItemReference(item)) {\n\t\t\t\t\t\tconst { expressionType, identifier } = item;\n\t\t\t\t\t\tconst path = pathRecord[expressionType];\n\t\t\t\t\t\tif (isKeyItemWithExpression(item)) {\n\t\t\t\t\t\t\tconst { expression } = item;\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\texpression.expressionType\n\t\t\t\t\t\t\t\t=== ExpressionTypes.Function\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tcurrentRecLevel++;\n\t\t\t\t\t\t\t\tres.push(recursive(expression));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst valueExpression\n\t\t\t\t\t\t\t\t= getExpressionValue({\n\t\t\t\t\t\t\t\t\texpressionRecord,\n\t\t\t\t\t\t\t\t\texpression,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tres.push(\n\t\t\t\t\t\t\t\t`${expressionsSerializer.getDefaultPropertyContext(path, identifier, valueExpression)}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\titem.expressionType\n\t\t\t\t\t\t\t\t=== ExpressionTypes.Constant\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst expressionValueRight\n\t\t\t\t\t\t\t\t\t= getExpressionValue({\n\t\t\t\t\t\t\t\t\t\texpressionRecord,\n\t\t\t\t\t\t\t\t\t\texpression: item,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tres.push(expressionValueRight);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tres.push(\n\t\t\t\t\t\t\t\t\t`${expressionsSerializer.getDefaultPropertyContext(path, identifier)}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\titem.expressionType === ExpressionTypes.Function\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tres.push(recursive(item));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst valueExpression\n\t\t\t\t\t\t\t\t= getExpressionValue({\n\t\t\t\t\t\t\t\t\texpressionRecord,\n\t\t\t\t\t\t\t\t\texpression: item,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tres.push(valueExpression);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Max level of nested functions reached ${maxNestedFuncLevel}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn expressionsSerializer.getFunctionFromDictionary(FunctionName).concat(\n\t\t\t\t`(${res.join(',')})`,\n\t\t\t);\n\t\t};\n\n\t\tconst res = recursive(func);\n\t\treturn res;\n\t};\n\n\treturn expressionRecord;\n}\n\nexport function getExpressionValue<T extends TMappedKeys>(props: {\n\texpressionRecord: TExpressionRecord;\n\texpression: TExpression<T>;\n}) {\n\treturn props.expressionRecord[props.expression.expressionType](props.expression);\n}\n\nexport function getExpressionValueDefine(props: {\n\texpressions: TExpressionRecord;\n\texpression: TExpressionDefineMap;\n}) {\n\tswitch (props.expression.expressionType) {\n\t\tcase ExpressionTypes.Identifier:\n\t\t\treturn props.expression.identifier;\n\t\tcase ExpressionTypes.Function:\n\t\t\treturn getFunctionBody({\n\t\t\t\texpression: props.expression,\n\t\t\t\texpressions: props.expressions,\n\t\t\t});\n\t\tdefault:\n\t\t\treturn getExpressionValue({\n\t\t\t\texpressionRecord: props.expressions,\n\t\t\t\texpression: props.expression,\n\t\t\t});\n\t}\n}\n","import { builtInFunctions, ReservedInternalFunctionNames } from '@yantrix/functions';\nimport { TNullable } from '@yantrix/utils';\nimport { ExpressionTypes, TDefine, TExpressionDefineMap } from '@yantrix/yantrix-parser';\nimport { DEFAULT_USER_FUNCTIONS_NAMESPACE } from '../../../../../constants';\nimport { TExpressionRecord, TStateDiagramMatrixIncludeNotes, TUserFunctionsDict } from '../../../../../types/common';\nimport { TDictionaries } from '../dictionaries';\nimport { TDependencyGraph } from '../imports';\nimport { getExpressionValueDefine } from './core';\n\nexport function getFunctionBody(props: {\n\texpressions: TExpressionRecord;\n\texpression: TExpressionDefineMap;\n}): string {\n\tif (props.expression.expressionType === ExpressionTypes.Function) {\n\t\tconst { FunctionName, Arguments } = props.expression.FunctionDeclaration;\n\n\t\t// If function name is one of internals - the only argument will be automata itself\n\t\tif (ReservedInternalFunctionNames.includes(FunctionName)) {\n\t\t\treturn `(function() {\n\t\t\t\tconst func = functionDictionary.get('${FunctionName}');\n\t\t\t\treturn func(automata);\n\t\t\t})()`;\n\t\t}\n\n\t\tconst argsList = Arguments.map((arg) => {\n\t\t\tif (arg.expressionType === ExpressionTypes.Function) {\n\t\t\t\treturn getFunctionBody({\n\t\t\t\t\texpression: arg,\n\t\t\t\t\texpressions: props.expressions,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn getExpressionValueDefine({\n\t\t\t\t\texpression: arg,\n\t\t\t\t\texpressions: props.expressions,\n\t\t\t\t});\n\t\t\t}\n\t\t}).join(', ');\n\n\t\treturn `(function() {\n\t\t\t\tconst func = functionDictionary.get('${FunctionName}');\n\t\t\t\treturn func(${argsList});\n\t\t\t})()`;\n\t} else {\n\t\treturn getExpressionValueDefine({\n\t\t\texpression: props.expression,\n\t\t\texpressions: props.expressions,\n\t\t});\n\t}\n}\n\nexport function checkUserFunctionsDefined(props: {\n\tinjectedPath: TNullable<string>;\n\tdefines: TDefine[];\n}) {\n\tconst { injectedPath, defines } = props;\n\tconst identifiers = defines.map(({ identifier }) => identifier);\n\n\treturn `(function (){\n\t\tconst defines = [${identifiers.join(',')}]\n\t  \n\t\tdefines.forEach((identifier) => {\n\t\t\tif (!${DEFAULT_USER_FUNCTIONS_NAMESPACE}[identifier]) {\n\t\t\t\tthrow new Error(\\`Function \\${identifier}\\ is not defined in ${injectedPath}\\`);\n       }\n\t})()`;\n}\n\nexport function registerCustomFunctions(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tdependencyGraph: TDependencyGraph;\n\tdictionaries: TDictionaries;\n\texpressions: TExpressionRecord;\n\tinjectFunctions: TUserFunctionsDict;\n}) {\n\tconst { dictionaries, diagram, injectFunctions, dependencyGraph, expressions } = props;\n\tconst newDictionary = dictionaries;\n\tconst defines = diagram.states.flatMap(state => state.notes?.defines ?? []);\n\tconst inject = diagram.states.flatMap(state => state.notes?.inject ?? []);\n\n\tconst registered = new Set<string>();\n\n\tconst registerFunction = (funcName: string, depth = 0) => {\n\t\tconst defineFunction = defines.find(def => def.identifier === funcName);\n\t\tconst injectFunction = inject.find(def => def.identifier === funcName);\n\t\tconst isBuiltInIdentifier = Object.hasOwn(builtInFunctions, funcName) && (Boolean(defineFunction) || Boolean(injectFunction));\n\n\t\tif (registered.has(funcName)) {\n\t\t\tthrow new TypeError(`Function identifier ${funcName} is already used`);\n\t\t};\n\t\tif (isBuiltInIdentifier) {\n\t\t\tthrow new TypeError(`Function identifier ${funcName} should not be used as it is a built-in function`);\n\t\t}\n\t\tif (injectFunction && !injectFunctions.path) {\n\t\t\tthrow new TypeError(`Function identifier ${funcName} is defined in the diagram but no inject file is provided`);\n\t\t}\n\n\t\tconst dependencies = dependencyGraph.get(funcName) || new Set();\n\n\t\tfor (const dep of dependencies) {\n\t\t\tif (!registered.has(dep)) {\n\t\t\t\tregisterFunction(dep, depth + 1);\n\t\t\t}\n\t\t}\n\t\tif (injectFunction) {\n\t\t\tnewDictionary.push(`functionDictionary.register('${funcName}', ${DEFAULT_USER_FUNCTIONS_NAMESPACE}['${funcName}']);`);\n\t\t\tregistered.add(funcName);\n\t\t} else if (defineFunction) {\n\t\t\tconst functionBody = getFunctionBody({\n\t\t\t\texpression: defineFunction.expression,\n\t\t\t\texpressions,\n\t\t\t});\n\t\t\tnewDictionary.push(`functionDictionary.register('${funcName}', function(${defineFunction.Arguments.join(', ')}) {\n\t\t\t\t\treturn ${functionBody};\n\t\t\t\t});`);\n\t\t\tregistered.add(funcName);\n\t\t};\n\t};\n\n\tfor (const funcName of dependencyGraph.keys()) {\n\t\tif (!registered.has(funcName)) {\n\t\t\tregisterFunction(funcName);\n\t\t}\n\t}\n\n\treturn newDictionary;\n}\n","function getDefaultPropertyContext(path: string, indetifier: string, expression?: string) {\n\tconst fullPath = getReferenceString(path, indetifier);\n\n\treturn `(function(){\n\t\t\t\t\t\tif(${path} !== null && ${fullPath} !== undefined && ${fullPath} !== null) {\n\t\t\t\t\t\t\treturn ${path}['${indetifier}']\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treturn ${expression ?? 'null'}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}())`;\n}\n\nfunction getReferenceString(path: string, identifier: string) {\n\treturn `${path}['${identifier}']`;\n}\n\nfunction getFunctionFromDictionary(name: string) {\n\treturn `functionDictionary.get('${name}')`;\n}\n\nexport const expressionsSerializer = {\n\tgetDefaultPropertyContext,\n\tgetFunctionFromDictionary,\n};\n","import { getExpressionValue, setupExpressions } from './core';\nimport { expressionsSerializer } from './serializer';\n\nexport const expressions = {\n\tserializer: expressionsSerializer,\n\tfunctions: {\n\t\tgetExpressionValue,\n\t\tsetupExpressions,\n\n\t},\n};\n","import { getInitialContextShape } from './core';\nimport { contextSerializer } from './serializer';\n\nexport const context = {\n\tserializer: contextSerializer,\n\tfunctions: {\n\t\tgetInitialContextShape,\n\t},\n};\n","import { BasicStateDictionary } from '@yantrix/automata';\nimport { TStateDiagramMatrixIncludeNotes } from '../../../../../types/common';\n\nexport function getInitialState(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n}) {\n\tconst hasInitial = props.diagram.states.find((state) => {\n\t\treturn Boolean(state.notes?.initialState);\n\t});\n\n\tif (hasInitial) {\n\t\treturn hasInitial.id;\n\t}\n\n\tconst firstState = props.diagram.states[0]?.id;\n\n\tif (!firstState) {\n\t\tthrow new Error('Invalid state');\n\t}\n\n\treturn firstState;\n}\n\nexport function stateIsByPass(props: {\n\tstateDictionary: BasicStateDictionary;\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tstateId: number;\n}) {\n\tconst stateFromDict = props.stateDictionary.getStateKeys({ states: [props.stateId] })[0];\n\tconst stateInDiagram = props.diagram.states.find(st => st.id === stateFromDict);\n\treturn stateInDiagram && stateInDiagram.notes && stateInDiagram.notes.byPass === true;\n}\n","import { getInitialState } from './core';\n\nexport const state = {\n\tfunctions: {\n\t\tgetInitialState,\n\t},\n};\n","import { classSerializer } from './serializer';\n\nexport const classModule = {\n\tserializer: classSerializer,\n};\n","import { builtInFunctions } from '@yantrix/functions';\nimport { TNullable } from '@yantrix/utils';\nimport { ExpressionTypes, TExpressionDefineMap, TInjectIdent } from '@yantrix/yantrix-parser';\nimport { DEFAULT_USER_FUNCTIONS_NAMESPACE } from '../../../../../constants';\nimport { TExpressionRecord, TStateDiagramMatrixIncludeNotes, TUserFunctionsDict } from '../../../../../types/common';\nimport { TDictionaries } from '../dictionaries';\nimport { getExpressionValueDefine } from '../expressions/core';\nimport { TDependencyGraph } from '../imports';\n\nexport function getFunctionBody(props: {\n\texpressions: TExpressionRecord;\n\texpression: TExpressionDefineMap;\n}): string {\n\tif (props.expression.expressionType === ExpressionTypes.Function) {\n\t\tconst { FunctionName, Arguments } = props.expression.FunctionDeclaration;\n\n\t\tconst argsList = Arguments.map((arg) => {\n\t\t\tif (arg.expressionType === ExpressionTypes.Function) {\n\t\t\t\treturn getFunctionBody({\n\t\t\t\t\texpression: arg,\n\t\t\t\t\texpressions: props.expressions,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn getExpressionValueDefine({\n\t\t\t\t\texpression: arg,\n\t\t\t\t\texpressions: props.expressions,\n\t\t\t\t});\n\t\t\t}\n\t\t}).join(', ');\n\n\t\treturn `(function() {\n\t\t\t\t\tconst func = functionDictionary.get('${FunctionName}');\n\t\t\t\t\treturn func(${argsList});\n\t\t\t\t})()`;\n\t} else {\n\t\treturn getExpressionValueDefine({\n\t\t\texpression: props.expression,\n\t\t\texpressions: props.expressions,\n\t\t});\n\t}\n}\n\nexport function checkUserFunctionsDefined(props: {\n\tinjectedPath: TNullable<string>;\n\tinjects: TInjectIdent[];\n}) {\n\tconst { injectedPath, injects } = props;\n\tconst identifiers = injects.map(inject => `'${inject.identifier}'`);\n\n\tif (!injectedPath) return ``;\n\n\treturn `\n\t\n\t(function (){\n\t\t\tconst injects = [${identifiers.join(',')}]\n\t\t\tconst defaults = ${DEFAULT_USER_FUNCTIONS_NAMESPACE}?.default ?? null\n\n\t\t\tif(defaults) {\n\t\t\t\tswitch(typeof defaults) {\n\t\t\t\t\tcase 'function': \n\t\t\t\t\t  if(!defaults?.name) throw new Error('Default exported user functions must have a name');\n\t\t\t\t\t\tObject.assign(${DEFAULT_USER_FUNCTIONS_NAMESPACE}, {[defaults.name]: defaults});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'object':\n\t\t\t\t\t\tif(Array.isArray(defaults)) {\n\t\t\t\t\t\t\tthrow new Error('Default exported user functions must be an object or a function');\n\t\t\t\t\t\t} \n\t\t\t\t\t\tObject.assign(${DEFAULT_USER_FUNCTIONS_NAMESPACE}, {...defaults});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error('Default exported user functions must be a function or an object from ${injectedPath}');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinjects.forEach((identifier) => {\n\t\t\t\tif (!${DEFAULT_USER_FUNCTIONS_NAMESPACE}[identifier]) {\n\t\t\t\t\tthrow new Error(\\`Function \\${identifier}\\ is not defined in ${injectedPath}\\`);\n\t\t\t\t}\n\t\t\t\tif(typeof ${DEFAULT_USER_FUNCTIONS_NAMESPACE}[identifier] !== 'function') {\n\t\t\t\t\tthrow new Error(\\`Function \\${identifier}\\ is not a function in ${injectedPath}\\`);\n\t\t\t\t}\n\t\t\t});\n\t\t})()`;\n}\n\nexport function registerCustomFunctions(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tdependencyGraph: TDependencyGraph;\n\tdictionaries: TDictionaries;\n\texpressions: TExpressionRecord;\n\tinjectFunctions: TUserFunctionsDict;\n}) {\n\tconst { dictionaries, diagram, injectFunctions, dependencyGraph, expressions } = props;\n\tconst newDictionary = dictionaries;\n\tconst defines = diagram.states.flatMap(state => state.notes?.defines ?? []);\n\tconst inject = diagram.states.flatMap(state => state.notes?.inject ?? []);\n\n\tconst registered = new Set<string>();\n\n\tconst registerFunction = (funcName: string, depth = 0) => {\n\t\tconst defineFunction = defines.find(def => def.identifier === funcName);\n\t\tconst injectFunction = inject.find(def => def.identifier === funcName);\n\t\tconst isBuiltInIdentifier = Object.hasOwn(builtInFunctions, funcName) && (Boolean(defineFunction) || Boolean(injectFunction));\n\n\t\tif (registered.has(funcName)) {\n\t\t\tthrow new TypeError(`Function identifier ${funcName} is already used`);\n\t\t};\n\t\tif (isBuiltInIdentifier) {\n\t\t\tthrow new TypeError(`Function identifier ${funcName} should not be used as it is a built-in function`);\n\t\t}\n\t\tif (injectFunction && !injectFunctions.path) {\n\t\t\tthrow new TypeError(`Function identifier ${funcName} is defined in the diagram but no inject file is provided`);\n\t\t}\n\n\t\tconst dependencies = dependencyGraph.get(funcName) || new Set();\n\n\t\tfor (const dep of dependencies) {\n\t\t\tif (!registered.has(dep)) {\n\t\t\t\tregisterFunction(dep, depth + 1);\n\t\t\t}\n\t\t}\n\t\tif (injectFunction) {\n\t\t\tnewDictionary.push(`functionDictionary.register('${funcName}', ${DEFAULT_USER_FUNCTIONS_NAMESPACE}['${funcName}']);`);\n\t\t\tregistered.add(funcName);\n\t\t} else if (defineFunction) {\n\t\t\tconst functionBody = getFunctionBody({\n\t\t\t\texpression: defineFunction.expression,\n\t\t\t\texpressions,\n\t\t\t});\n\t\t\tnewDictionary.push(`functionDictionary.register('${funcName}', function(${defineFunction.Arguments.join(', ')}) {\n\t\t\t\t\t\treturn ${functionBody};\n\t\t\t\t\t});`);\n\t\t\tregistered.add(funcName);\n\t\t};\n\t};\n\n\tfor (const funcName of dependencyGraph.keys()) {\n\t\tif (!registered.has(funcName)) {\n\t\t\tregisterFunction(funcName);\n\t\t}\n\t}\n\n\treturn newDictionary;\n}\n","import { checkUserFunctionsDefined, registerCustomFunctions } from './core';\n\nexport const functions = {\n\tserializer: checkUserFunctionsDefined,\n\tfunctions: {\n\t\tregisterCustomFunctions,\n\t},\n};\n","import { ExpressionTypes, TExpressionDefine } from '@yantrix/yantrix-parser';\nimport { TStateDiagramMatrixIncludeNotes } from '../../../../../types/common';\nimport { TDependencyGraph, TImports } from './types';\n\nexport function buildDependencyGraph(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\timports: TImports;\n\tdependencyGraph: TDependencyGraph;\n}) {\n\tconst defines = props.diagram.states.flatMap(state => state.notes?.defines ?? []);\n\tconst injects = props.diagram.states.flatMap(state => state.notes?.inject ?? []);\n\n\tconst addDependencies = (expression: TExpressionDefine<'function'>, currentFunc: string) => {\n\t\tconst { FunctionName, Arguments } = expression.FunctionDeclaration;\n\n\t\tif (!props.dependencyGraph.has(currentFunc)) {\n\t\t\tprops.dependencyGraph.set(currentFunc, new Set());\n\t\t}\n\n\t\tprops.dependencyGraph.get(currentFunc)!.add(FunctionName);\n\n\t\tfor (const arg of Arguments) {\n\t\t\tif (arg.expressionType === 'function') {\n\t\t\t\taddDependencies(arg, currentFunc);\n\t\t\t}\n\t\t}\n\t};\n\n\tinjects.forEach((inject) => {\n\t\tif (!props.dependencyGraph.has(inject.identifier)) {\n\t\t\tprops.dependencyGraph.set(inject.identifier, new Set());\n\t\t}\n\t});\n\n\tfor (const define of defines) {\n\t\tif (define.expression.expressionType === ExpressionTypes.Function) {\n\t\t\taddDependencies(define.expression, define.identifier);\n\t\t}\n\t}\n\treturn {\n\t\timports: props.imports,\n\t\tdependencyGraph: props.dependencyGraph,\n\t} as const;\n}\n\nexport function checkForCyclicDependencies(props: {\n\tdependencyGraph: TDependencyGraph;\n}) {\n\tconst cycles = detectCycles({\n\t\tdependencyGraph: props.dependencyGraph,\n\t});\n\tif (cycles.length > 0) {\n\t\tconst cycleStrings = cycles.map(cycle => cycle.join(' -> '));\n\t\tthrow new Error(`Cyclic dependencies detected in function definitions:\\n${cycleStrings.join('\\n')}`);\n\t}\n}\n\nexport function detectCycles(props: {\n\tdependencyGraph: TDependencyGraph;\n}): string[][] {\n\tconst visited = new Set<string>();\n\tconst recursionStack = new Set<string>();\n\tconst cycles: string[][] = [];\n\n\tconst dfs = (node: string, path: string[] = []): boolean => {\n\t\tif (!visited.has(node)) {\n\t\t\tvisited.add(node);\n\t\t\trecursionStack.add(node);\n\n\t\t\tconst neighbors = props.dependencyGraph.get(node) || new Set();\n\t\t\tfor (const neighbor of neighbors) {\n\t\t\t\tif (!visited.has(neighbor)) {\n\t\t\t\t\tif (dfs(neighbor, [...path, node])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t} else if (recursionStack.has(neighbor)) {\n\t\t\t\t\tcycles.push([...path, node, neighbor]);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trecursionStack.delete(node);\n\t\treturn false;\n\t};\n\n\tfor (const node of props.dependencyGraph.keys()) {\n\t\tif (!visited.has(node)) {\n\t\t\tdfs(node);\n\t\t}\n\t}\n\n\treturn cycles;\n}\n","import { TNullable } from '@yantrix/utils';\nimport { TImports, TProcessImport } from './types';\n\nconst getImport = ({ key, value }: TProcessImport) => `import { ${value.join(', ')} } from '${key}';\\n`;\nconst getNamespaceImport = ({ key, value }: TProcessImport) => `import * as ${value[0]} from '${key}';\\n`;\n\nconst processRecordImports = (importsRecord: TImports, processImport: ({ key, value }: TProcessImport) => string) => {\n\tlet imports = '';\n\n\tfor (const [key, value] of Object.entries(importsRecord)) {\n\t\timports += processImport({ key, value });\n\t}\n\treturn imports;\n};\n\nexport function getImportsCode(props: { imports: TImports }) {\n\treturn processRecordImports(props.imports, getImport);\n}\n\nexport function importAll(props: { importNamespaces: TNullable<TImports> }) {\n\tif (!props.importNamespaces) return '';\n\treturn processRecordImports(props.importNamespaces, getNamespaceImport);\n}\n\nexport const importsSerializer = {\n\tgetImportsCode,\n\timportAll,\n};\n","import { buildDependencyGraph, checkForCyclicDependencies } from './core';\nimport { importsSerializer } from './serializer';\n\nexport * from './types';\n\nexport const imports = {\n\tserializer: {\n\t\tgetImportsCode: importsSerializer.getImportsCode,\n\t\timportAll: importsSerializer.importAll,\n\t},\n\tfunctions: {\n\t\tcheckForCyclicDependencies,\n\t\tbuildDependencyGraph,\n\t},\n};\n","import { BasicActionDictionary, BasicEventDictionary, BasicStateDictionary } from '@yantrix/automata';\nimport { TExpressionRecord, TStateDiagramMatrixIncludeNotes, TUserFunctionsDict } from '../../../../../types/common';\nimport { functions } from '../functions';\nimport { imports, TDependencyGraph, TImports } from '../imports';\nimport { TDictionaries } from './types';\n\nexport function getObjectKeysMap(dict: Record<any, any>) {\n\tconst obj: Record<string, string> = {};\n\tObject.keys(dict).forEach((key: string) => {\n\t\tobj[key] = key;\n\t});\n\treturn obj;\n}\n\nexport function setupDictionaries(props: {\n\tdependencyGraph: TDependencyGraph;\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tstateDictionary: BasicStateDictionary;\n\tactionDictionary: BasicActionDictionary;\n\tinjectedFunctions: TUserFunctionsDict;\n\teventDictionary: BasicEventDictionary;\n\texpressionRecord: TExpressionRecord;\n\timports: TImports;\n}) {\n\tlet dictionaries: TDictionaries = [];\n\tdictionaries.push(\n\t\t`export const statesDictionary = ${JSON.stringify(props.stateDictionary.getDictionary(), null, 2)}`,\n\t);\n\tdictionaries.push(\n\t\t`export const actionsDictionary = ${JSON.stringify(props.actionDictionary.getDictionary(), null, 2)}`,\n\t);\n\tif (Object.keys(props.eventDictionary.getDictionary()).length > 0) {\n\t\tdictionaries.push(\n\t\t\t`export const eventDictionary = ${JSON.stringify(props.eventDictionary.getDictionary(), null, 2)}`,\n\t\t);\n\t\tdictionaries.push(\n\t\t\t`GlobalEventDictionary.addEvents({\n\t\t\t\tkeys: Object.keys(eventDictionary).filter(e => GlobalEventDictionary.getEventValues({ keys: [e] })[0] == null)\n\t\t\t });`,\n\t\t);\n\t}\n\tdictionaries.push(`export const functionDictionary = new FunctionDictionary();`);\n\tdictionaries.push();\n\timports.functions.checkForCyclicDependencies({\n\t\tdependencyGraph: props.dependencyGraph,\n\t});\n\tdictionaries = functions.functions.registerCustomFunctions({\n\t\tdiagram: props.diagram,\n\t\texpressions: props.expressionRecord,\n\t\tdependencyGraph: props.dependencyGraph,\n\t\tdictionaries,\n\t\tinjectFunctions: props.injectedFunctions,\n\t});\n\treturn dictionaries;\n}\n","import { BasicActionDictionary, BasicStateDictionary } from '@yantrix/automata';\nimport { StartState, TDiagramAction } from '@yantrix/mermaid-parser';\nimport { TStateDiagramMatrixIncludeNotes } from '../../../../../types/common';\nimport { getObjectKeysMap } from './core';\nimport { TDictionaries } from './types';\n\nexport function getActionToStateDict(props: {\n\ttransitions: Record<string, TDiagramAction>;\n\tstateDictionary: BasicStateDictionary;\n\tactionDictionary: BasicActionDictionary;\n\tcurrentState: number;\n}) {\n\tconst dict: Record<number, number[]> = {};\n\n\t// group all possible states for an action in the dict object\n\tObject\n\t\t.entries(props.transitions)\n\t\t.forEach(([key, transition]) => {\n\t\t\tconst newState = props.stateDictionary.getStateValues({ keys: [key] })[0];\n\n\t\t\ttransition.actionsPath.forEach(({ action }) => {\n\t\t\t\tconst actionValue = props.actionDictionary.getActionValues({\n\t\t\t\t\tkeys: action,\n\t\t\t\t})[0];\n\t\t\t\tif (!actionValue) throw new Error(`Action ${action} not found`);\n\t\t\t\tif (!newState) throw new Error(`State ${key} not found`);\n\n\t\t\t\tif (!dict[actionValue]) {\n\t\t\t\t\tdict[actionValue] = [];\n\t\t\t\t}\n\t\t\t\tif (!dict[actionValue].includes(newState)) {\n\t\t\t\t\tdict[actionValue].push(newState);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t// if there is more than 1 possible state => insert predicate function using currentState and currentAction IDs\n\tconst res = Object.entries(dict).map(([actionId, possibleStates]) => {\n\t\tconst predicateString = (possibleStates.length > 1) ? `,\\npredicate: predicates[${props.currentState}][${actionId}]` : '';\n\t\treturn `\n\t\t\t\t${actionId}: {\n\t\t\t\t\tstate: [${possibleStates}]${predicateString}\n\t\t\t\t}\n\t\t\t`;\n\t}).join(',\\n');\n\n\treturn res;\n}\n\nexport function getActionToStateFromStateDict(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tstateDictionary: BasicStateDictionary;\n\tactionDictionary: BasicActionDictionary;\n}) {\n\tconst actionToStartStateMatrix: Record<string, TDiagramAction> = {};\n\n\tObject.entries(props.diagram.transitions).forEach(([state, transitions]) => {\n\t\tif (state === StartState) {\n\t\t\tconst entries = Object.entries(transitions);\n\t\t\tentries.forEach(([state, action]) => {\n\t\t\t\taction.actionsPath.forEach(({ action }) => {\n\t\t\t\t\tactionToStartStateMatrix[state] = {\n\t\t\t\t\t\tactionsPath: [{ action, note: [] }],\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t});\n\n\treturn Object.entries(props.diagram.transitions).map(([currentState, transitions]) => {\n\t\tconst transitionsWithStartState = {\n\t\t\t...transitions,\n\t\t\t...actionToStartStateMatrix,\n\t\t};\n\n\t\tconst value = props.stateDictionary.getStateValues({ keys: [currentState] })[0];\n\t\tif (!value) throw new Error(`State ${currentState} not found`);\n\n\t\treturn `${value}: {${getActionToStateDict({\n\t\t\tcurrentState: value,\n\t\t\ttransitions: transitionsWithStartState,\n\t\t\tstateDictionary: props.stateDictionary,\n\t\t\tactionDictionary: props.actionDictionary,\n\t\t}).concat('\\n\\t')}},`;\n\t});\n}\n\nexport function getDictionariesCode(props: {\n\tdictionaries: TDictionaries;\n}): string {\n\treturn props.dictionaries.join('\\n');\n}\n\nexport function getActionsMap(props: {\n\tactionDictionary: BasicActionDictionary;\n}) {\n\treturn `const actionsMap = ${JSON.stringify(getObjectKeysMap(props.actionDictionary.getDictionary()), null, 2)}`;\n}\n\nexport function getStatesMap(props: {\n\tstateDictionary: BasicStateDictionary;\n}) {\n\treturn `const statesMap = ${JSON.stringify(getObjectKeysMap(props.stateDictionary.getDictionary()), null, 2)}`;\n}\n\nexport const getSerializedSetByPassed = (props: {\n\tbyPassedList: number[];\n}) => {\n\treturn `const byPassedStates = new Set([${props.byPassedList.join(',')}])`;\n};\n\nexport function getActionToStateFromState(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tstateDictionary: BasicStateDictionary;\n\tactionDictionary: BasicActionDictionary;\n\tdictionariesSerializer: typeof dictionariesSerializer;\n}) {\n\treturn `const actionToStateFromStateDict = {${props.dictionariesSerializer.getActionToStateFromStateDict({\n\t\tdiagram: props.diagram,\n\t\tstateDictionary: props.stateDictionary,\n\t\tactionDictionary: props.actionDictionary,\n\t}).join('\\n\\t')}}`;\n}\n\nexport function getAutomataEpochCounterCode() {\n\tconst lines: string[] = [];\n\tlines.push(`const epoch = { val: 1 };`);\n\tlines.push(`const incrementEpoch = () => { epoch.val++ };`);\n\tlines.push(`const getEpoch = () => epoch.val;`);\n\treturn lines.join('\\n');\n}\n\nexport function getAutomataInternalsRegisterCode(props: {\n\tclassName: string;\n}) {\n\tconst { className } = props;\n\tconst lines: string[] = [];\n\tlines.push(`const internals = {`);\n\tlines.push(`\\t...internalFunctions,`);\n\tlines.push(`\\t\"currentStateId\": internalFunctions.currentStateId(${className}),`);\n\tlines.push(`\\t\"currentStateName\": internalFunctions.currentStateName(${className}, statesDictionary),`);\n\tlines.push(`\\t\"currentActionId\": internalFunctions.currentActionId(${className}),`);\n\tlines.push(`\\t\"currentActionName\": internalFunctions.currentActionName(${className}, actionsDictionary),`);\n\tlines.push(`\\t\"currentCycle\": internalFunctions.currentCycle(${className}),`);\n\tlines.push(`\\t\"currentEpoch\": getEpoch,`);\n\tlines.push(`}`);\n\treturn lines.join('\\n');\n}\n\nexport function getFunctionDictionaryInternalRegisterCode() {\n\treturn `functionDictionary.register(internals);`;\n}\n\nexport function getFunctionDictionaryBuiltInRegisterCode() {\n\treturn `functionDictionary.register(builtInFunctions);`;\n}\n\nexport const dictionariesSerializer = {\n\tgetActionToStateDictCode: getActionToStateDict,\n\tgetActionToStateFromStateDict,\n\tgetActionToStateFromState,\n\tgetDictionariesCode,\n\tgetActionsMap,\n\tgetStatesMap,\n\tgetSerializedSetByPassed,\n\tgetAutomataInternalsRegisterCode,\n\tgetAutomataEpochCounterCode,\n\tgetFunctionDictionaryInternalRegisterCode,\n\tgetFunctionDictionaryBuiltInRegisterCode,\n} as const;\n","import { setupDictionaries } from './core';\nimport { dictionariesSerializer } from './serializer';\n\nexport const dictionaries = {\n\tserializer: dictionariesSerializer,\n\tfunctions: {\n\t\tsetupDictionaries,\n\t},\n};\n\nexport * from './types';\n","import { ExpressionTypes, isEmitFull, isEmitWithMeta, isSubscribeWithMeta, isSubscribeWithPayload, TEventEmit, TEventSubscribe } from '@yantrix/yantrix-parser';\nimport { TExpressionRecord } from '../../../../../types/common';\nimport { context } from '../context';\n\nexport function getEventCode(e: TEventEmit, expressions: TExpressionRecord) {\n\tif (isEmitFull(e)) {\n\t\te.context = e.context.map(c => ({\n\t\t\tkeyItem: {\n\t\t\t\t...c.keyItem,\n\t\t\t\texpressionType: ExpressionTypes.Context,\n\t\t\t},\n\t\t}));\n\t}\n\treturn `{\n\t\t\tevent: eventDictionary[\"${e.identifier}\"],\n\t\t\tmeta: {\n\t\t\t\t${getEventMeta({ event: e, expressions })}\n\t\t\t}\n\t\t}`;\n}\n\nexport function getEventMeta(props: {\n\tevent: TEventEmit;\n\texpressions: TExpressionRecord;\n}): string {\n\tconst { event, expressions } = props;\n\tif (isEmitFull(event)) {\n\t\treturn context.serializer.getBoundValues({\n\t\t\texpressions,\n\t\t\tarr: context.serializer.mapReducerItems({ reducer: event.context, sourcePath: 'context', expressions }),\n\t\t\tcontext: event.meta,\n\t\t}).toString();\n\t} else if (isEmitWithMeta(event)) {\n\t\treturn context.serializer.getBoundValues({\n\t\t\texpressions,\n\t\t\tarr: context.serializer.mapReducerItems({ reducer: event.meta, sourcePath: 'context', expressions }),\n\t\t\tcontext: event.meta,\n\t\t}).toString();\n\t} else {\n\t\treturn '';\n\t}\n}\n\nexport function getActionPayload(props: {\n\tevent: TEventSubscribe;\n\texpressions: TExpressionRecord;\n}) {\n\tconst { event, expressions } = props;\n\tif (isSubscribeWithMeta(event)) {\n\t\treturn context.serializer.getBoundValues({\n\t\t\texpressions,\n\t\t\tarr: context.serializer.mapReducerItems({ reducer: event.meta, sourcePath: 'meta', expressions }),\n\t\t\tcontext: event.payload,\n\t\t}).toString();\n\t} else if (isSubscribeWithPayload(event)) {\n\t\treturn context.serializer.getBoundValues({\n\t\t\texpressions,\n\t\t\tarr: context.serializer.mapReducerItems({ reducer: event.payload, sourcePath: 'meta', expressions }),\n\t\t\tcontext: event.payload,\n\t\t}).toString();\n\t} else {\n\t\treturn '';\n\t}\n}\n","import { TEventEmit, TEventSubscribe } from '@yantrix/yantrix-parser';\nimport { TExpressionRecord, TStateDiagramMatrixIncludeNotes, TStateIncludingNotes } from '../../../../../types/common';\nimport { getActionPayload, getEventCode } from './functions';\n\nexport function getEventEmitters(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\texpressions: TExpressionRecord;\n}) {\n\tconst { diagram } = props;\n\treturn diagram.states.map(state => stateToEventEmitter(state, props)).join('\\n');\n}\n\nexport function getEventListeners(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\texpressions: TExpressionRecord;\n}) {\n\tconst { diagram } = props;\n\treturn diagram.states.map(state => stateToEventListeners(state, props)).join('\\n');\n}\n\nexport function stateToEventEmitter(state: TStateIncludingNotes, props: {\n\texpressions: TExpressionRecord;\n}) {\n\tconst { expressions } = props;\n\tconst emittedEvents = state.notes?.emit;\n\tif (emittedEvents && emittedEvents.length > 0) {\n\t\treturn `eventAdapter.addEventEmitter(\n\t\t\t\tstatesDictionary[\"${state.id}\"], \n\t\t\t\t${getEventEmitterHandler({ events: emittedEvents, expressions })}\n\t\t\t);`;\n\t} else {\n\t\treturn '';\n\t}\n}\n\nexport function stateToEventListeners(state: TStateIncludingNotes, props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\texpressions: TExpressionRecord;\n}) {\n\treturn state.notes?.subscribe?.map(event => eventToEventListener(event, props)).join(';\\n') ?? '';\n}\n\nfunction eventToEventListener(event: TEventSubscribe, props: {\n\texpressions: TExpressionRecord;\n}) {\n\tconst { expressions } = props;\n\treturn `eventAdapter.addEventListener(\n        eventDictionary[\"${event.identifier}\"], \n        ${getEventListenerHandler({ event, expressions })}\n    )`;\n}\n\nfunction getEventEmitterHandler(props: {\n\tevents: TEventEmit[];\n\texpressions: TExpressionRecord;\n}) {\n\tconst { events, expressions } = props;\n\treturn `({ state, context }) => {\n\t\tconst eventsToEmit = [\n\t\t\t${events.map(e => getEventCode(e, expressions)).join(',\\n')}\n\t\t];\n\t\t\n\t\treturn eventsToEmit[0];\n\t}`;\n}\n\nfunction getEventListenerHandler(props: {\n\tevent: TEventSubscribe;\n\texpressions: TExpressionRecord;\n}) {\n\tconst { event, expressions } = props;\n\treturn `({ event, meta }) => {\n\n\t\treturn {\n\t\t\taction: actionsDictionary[\"${event.actionName}\"],\n\t\t\tpayload: {\n\t\t\t\t${getActionPayload({ event, expressions })}\n\t\t\t}\n\t\t}\n\t}`;\n}\n","import { BasicActionDictionary, BasicEventDictionary, BasicStateDictionary } from '@yantrix/automata';\nimport { TExpressionRecord, TStateDiagramMatrixIncludeNotes } from '../../../../../types/common';\nimport { getEventEmitters, getEventListeners } from './core';\n\nfunction getEventAdapterCode(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tstateDictionary: BasicStateDictionary;\n\tactionDictionary: BasicActionDictionary;\n\teventDictionary: BasicEventDictionary;\n\texpressions: TExpressionRecord;\n}) {\n\tconst lines: string[] = [];\n\tlines.push('const eventAdapter = new AutomataEventAdapter();');\n\tlines.push(getEventEmitters(props));\n\tlines.push(getEventListeners(props));\n\treturn lines.join('\\n');\n}\n\nfunction getCreateEventBusFunctionCode() {\n\tconst lines: string[] = [];\n\tlines.push('export function createEventBus(id, FSMs) {');\n\tlines.push('const EventBus = new BasicEventBus();');\n\tlines.push('EventBus.correlationId = id;');\n\tlines.push(`const automatas = ${getEventBusAutomatasCode()}`);\n\tlines.push(getEventBusSubscriptions());\n\tlines.push('return [EventBus, automatas];');\n\tlines.push('}');\n\treturn lines.join('\\n');\n}\n\nfunction getEventBusAutomatasCode() {\n\treturn `Object.fromEntries(\n\t\tObject.entries(FSMs).map(([automataId, AutomataClass]) => {\n\t\t\treturn [automataId, new AutomataClass()]\n\t\t})\n\t);`;\n}\n\nfunction getEventBusSubscriptions() {\n\treturn `Object.entries(GlobalEventDictionary.getDictionary())\n\t.forEach(([eventName, eventId]) => {\n\t\n\t\tEventBus.subscribe(eventId, ({ event, meta }) => {\n\n\t\t\tconst nextEventsToProcess = [];\n\n\t\t\tObject.values(automatas).forEach(automata => {\n\t\t\t\tconst newActions = automata.eventAdapter?.handleEvent({ event, meta }) ?? [];\n\t\t\t\tfor (const action of newActions) {\n\t\t\t\t\tautomata.dispatch(action);\n\t\t\t\t\tconst newAutomataEvents = automata.eventAdapter?.handleTransition(automata.getContext()) ?? [];\n\t\t\t\t\tnextEventsToProcess.push(...newAutomataEvents);\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tEventBus.dispatch(...nextEventsToProcess);\n\t\n\t\t\treturn {\n\t\t\t\tevent,\n\t\t\t\tmeta,\n\t\t\t\ttask_id: \\`event_\\${eventName}_\\${eventId}\\`,\n\t\t\t\tresult: new Promise((resolve, reject) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst eventStack = EventBus.getEventStack();\n\t\t\t\t\t\tresolve(eventStack);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treject(new Error('Error getting event stack'))\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\n\t});`;\n}\n\nexport const eventsSerializer = {\n\tgetEventAdapterCode,\n\tgetCreateEventBusFunctionCode,\n};\n","import { eventsSerializer } from './serializer';\n\nexport const events = {\n\tserializer: eventsSerializer,\n};\n","import { BasicActionDictionary, BasicStateDictionary } from '@yantrix/automata';\nimport { TActionChain, TActionChainParams } from '@yantrix/mermaid-parser';\nimport { isFunctionExpression, YantrixParser } from '@yantrix/yantrix-parser';\nimport { TExpressionRecord, TStateDiagramMatrixIncludeNotes } from '../../../../../types/common';\nimport { expressions } from '../expressions';\n\nconst parser = new YantrixParser();\n\n/*\n\tPredicates object is necessary for resolving the correct state to transition to, when using forks;\n\tFunction, obtained w/ IDs of currentState and dispatchedAction , is later loaded with values\n\tfrom context/payload during root reducer operations.\n\tResulting value is the new state of the automata, exact state value depends on which conditions resolve to TRUE inside\n*/\nexport function getPredicates(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tstateDictionary: BasicStateDictionary;\n\tactionDictionary: BasicActionDictionary;\n\texpressions: TExpressionRecord;\n}) {\n\tconst { diagram } = props;\n\n\tconst entries = Object\n\t\t.entries(diagram.actionChains)\n\t\t.map(([stateName, stateActions]) => stateToPredicates(stateName, stateActions, props))\n\t\t.filter(val => val !== null);\n\n\tconst automataPredicates = Object.fromEntries(entries);\n\n\treturn automataPredicates;\n}\n\nfunction stateToPredicates(\n\tstateName: string,\n\tstateActions: Record<string, TActionChainParams>,\n\tprops: {\n\t\tactionDictionary: BasicActionDictionary;\n\t\tstateDictionary: BasicStateDictionary;\n\t\texpressions: TExpressionRecord;\n\t},\n): [number, { [k: string]: string }] | null {\n\tconst { stateDictionary } = props;\n\tconst originalStateId = stateDictionary.getDictionary()[stateName];\n\tif (!originalStateId) {\n\t\tthrow new Error(`Incorrect state: ${stateName}`);\n\t}\n\tconst statePredicateEntries = Object\n\t\t.entries(stateActions)\n\t\t.map(([actionName, actionParams]) => actionToPredicate(actionName, actionParams.chains, props))\n\t\t.filter(val => val !== null);\n\n\tif (!statePredicateEntries || statePredicateEntries.length === 0) return null;\n\n\tconst statePredicates = Object.fromEntries(statePredicateEntries);\n\treturn [originalStateId, statePredicates];\n}\n\nfunction actionToPredicate(\n\taction: string,\n\tchains: TActionChain[],\n\tprops: {\n\t\tactionDictionary: BasicActionDictionary;\n\t\tstateDictionary: BasicStateDictionary;\n\t\texpressions: TExpressionRecord;\n\t},\n): [number, string] | null {\n\tconst { actionDictionary } = props;\n\tconst actionId = actionDictionary.getDictionary()[action];\n\tif (!actionId) {\n\t\tthrow new Error(`Incorrect action: ${action}`);\n\t}\n\tconst stateTransitionConditions = chains\n\t\t.map(actionChain => getStateTransitionConditions(actionChain, props))\n\t\t.filter(val => val != null);\n\tconst predicate = getPredicateContent(stateTransitionConditions);\n\n\tif (!predicate) return null;\n\n\treturn [actionId, predicate];\n}\n\nfunction getPredicateContent(stateTransitionConditions: string[] | null) {\n\tif (!stateTransitionConditions || stateTransitionConditions.length === 0) return null;\n\treturn `(prevContext, payload, functionDictionary) => {\n\t\t${\n\t\t\tstateTransitionConditions.map((conditions, index) => `\n\t\t\t\t\tconst state${index + 1} = (function(){\n\t\t\t\t\t\t${conditions}\n\t\t\t\t\t})();\n\t\t\t\t\tif(state${index + 1}) return state${index + 1};\n\t\t\t`).join('')\n\t\t}\n\t\treturn null;\n\t}`;\n}\n\nfunction getStateTransitionConditions(\n\tactionChain: TActionChain,\n\tprops: {\n\t\tstateDictionary: BasicStateDictionary;\n\t\texpressions: TExpressionRecord;\n\t},\n) {\n\tconst { chain, state } = actionChain;\n\tconst transitionStateId = props.stateDictionary.getDictionary()[state];\n\tif (!transitionStateId) {\n\t\tthrow new Error(`Incorrect state: ${state}`);\n\t}\n\n\tconst conditions = chain\n\t\t.map(segment => resolveChainSegment(segment, { expressionRecord: props.expressions }))\n\t\t.map((cond, index) => `const cond${index + 1} = ${cond};`);\n\n\tif (conditions.length === 0) return null;\n\n\tconditions.push(`\n\t\tif(${conditions.map((_, index) => `cond${index + 1} === true`).join(' && ')}) {\n\t\t\treturn ${transitionStateId};\n\t\t}\n\t\telse return undefined;`,\n\t);\n\treturn conditions.join('\\n');\n}\n\n/*\n\tneed to check if parts of the chain can be processed by the parser,\n\tturned into expressions and used later in the generated predicates.\n\n\tif they cant be processed (i.e they are internal ids or unrelated names),\n\tassume the segment resolves to TRUE and move on\n*/\nfunction resolveChainSegment(segment: string, props: {\n\texpressionRecord: TExpressionRecord;\n}) {\n\tconst { expressionRecord } = props;\n\ttry {\n\t\tconst wrappedSegment = `=${segment}?`;\n\t\tconst processedExpression = parser.parse(wrappedSegment);\n\t\t// check the expression property at the top-level of the parsed object\n\t\tif (!processedExpression.expression || !isFunctionExpression(processedExpression.expression)) {\n\t\t\tthrow new Error('Incorrect expression');\n\t\t}\n\t\tconst expressionValue = expressions.functions.getExpressionValue({\n\t\t\texpression: processedExpression.expression,\n\t\t\texpressionRecord,\n\t\t});\n\t\treturn expressionValue;\n\t} catch {\n\t\treturn true;\n\t}\n}\n","import { BasicActionDictionary, BasicStateDictionary } from '@yantrix/automata';\nimport { TExpressionRecord, TStateDiagramMatrixIncludeNotes } from '../../../../../types/common';\nimport { getPredicates } from './core';\n\nfunction getPredicatesCode(props: {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tstateDictionary: BasicStateDictionary;\n\tactionDictionary: BasicActionDictionary;\n\texpressions: TExpressionRecord;\n}) {\n\tconst predicateObject = getPredicates(props);\n\tconst entries = Object.entries(predicateObject);\n\tif (!entries || entries.length === 0) return '';\n\treturn `const predicates = {\n\t\t${Object.entries(predicateObject)\n\t\t\t.map(([stateId, predicates]) => `${stateId}: { ${getStatePredicateCode(predicates)} }`)\n\t\t\t.join(',\\n')}\n\t}`;\n}\n\nfunction getStatePredicateCode(predicates: {\n\t[k: string]: string;\n}) {\n\treturn Object.entries(predicates).map(([actionId, predicate]) => `${actionId}: ${predicate}`).join(',\\n');\n}\n\nexport const serializer = {\n\tgetPredicatesCode,\n};\n","import { serializer } from './serializer';\n\nexport const forks = {\n\tserializer,\n};\n","import { classModule } from './class';\nimport { context } from './context';\nimport { dictionaries } from './dictionaries';\nimport { events } from './events';\nimport { expressions } from './expressions';\nimport { forks } from './forks';\nimport { functions } from './functions';\nimport { imports } from './imports';\nimport { state } from './state';\n\nexport const JavaScriptCompiler = {\n\tclass: classModule,\n\tcontext,\n\tdictionaries,\n\texpressions,\n\timports,\n\tstate,\n\tevents,\n\tforks,\n\tfunctions,\n};\n","import { BasicActionDictionary, BasicStateDictionary } from '@yantrix/automata';\nimport { StartState, TDiagramAction } from '@yantrix/mermaid-parser';\nimport {\n\tExpressionTypes,\n\tisContextWithReducer,\n\tisKeyItemReference,\n\tisKeyItemWithExpression,\n\tmaxNestedFuncLevel,\n\tTContextItem,\n\tTExpression,\n\tTExpressionDefine,\n\tTExpressionDefineMap,\n\tTExpressionFunction,\n\tTMappedKeys,\n} from '@yantrix/yantrix-parser';\nimport { ICodegen, TGetCodeOptionsMap, TModuleParams, TStateDiagramMatrixIncludeNotes } from '../../types/common.js';\n// import { replaceFileContents } from '../../utils/utils.js';\nimport { fillDictionaries, pathRecord } from '../shared.js';\nimport { PythonTemplate } from '../templates/Python.js';\nimport { TConstants, TExpressionRecord } from './../../types/common';\nimport { ModuleNames } from './index';\n\nfunction getReferenceString(path: string, identifier: string) {\n\treturn `${path}['${identifier}']`;\n}\n\nfunction getFunctionFromDictionary(name: string) {\n\treturn `functionDictionary.get('${name}')`;\n}\n\nfunction getDefaultPropertyContext(\n\tpath: string,\n\tidentifier: string,\n\texpression?: string,\n) {\n\tconst fullPath = getReferenceString(path, identifier);\n\n\treturn `(lambda: ${path} is not None and ${fullPath} is not None and ${fullPath} or ${expression ?? 'None'})()`;\n}\n\nexport class PythonCodegen implements ICodegen<typeof ModuleNames.Python> {\n\tstateDictionary: BasicStateDictionary;\n\tactionDictionary: BasicActionDictionary;\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\thandlersDict: string[];\n\n\tinitialContextKeys: string[];\n\tchangeStateHandlers: string[];\n\tdependencyGraph: Map<string, Set<string>>;\n\tconstants: TConstants | null;\n\texpressions: TExpressionRecord;\n\tdictionaries: string[];\n\tprotected imports = {\n\t\t'yantrix.automata': ['GenericAutomata', 'FunctionDictionary'],\n\t\t'yantrix.codegen': ['builtInFunctions'],\n\t};\n\n\tconstructor({ diagram, constants }: TModuleParams) {\n\t\tthis.actionDictionary = new BasicActionDictionary();\n\t\tthis.stateDictionary = new BasicStateDictionary();\n\n\t\tthis.diagram = diagram;\n\n\t\tthis.constants = constants;\n\n\t\tthis.expressions = this.setupExpressions();\n\n\t\tthis.dependencyGraph = new Map();\n\t\tthis.buildDependencyGraph();\n\n\t\tthis.handlersDict = [];\n\t\tthis.changeStateHandlers = [];\n\t\tthis.dictionaries = [];\n\t\tthis.initialContextKeys = [];\n\n\t\tfillDictionaries(diagram, this.stateDictionary, this.actionDictionary);\n\n\t\tthis.setupDictionaries();\n\t}\n\n\tpublic getImports() {\n\t\tconst imports = '';\n\t\t// for (const [key, value] of Object.entries(this.imports)) {\n\t\t// \timports += `from ${key} import ${value.join(', ')}\\n`;\n\t\t// }\n\t\treturn imports;\n\t}\n\n\tpublic getDictionaries(): string {\n\t\treturn this.dictionaries.join('\\n');\n\t}\n\n\tsetupDictionaries() {\n\t\tthis.dictionaries.push(\n\t\t\t`statesDictionary = ${JSON.stringify(this.stateDictionary.getDictionary(), null, 2)}`,\n\t\t);\n\t\tthis.dictionaries.push(\n\t\t\t`actionsDictionary = ${JSON.stringify(this.actionDictionary.getDictionary(), null, 2)}`,\n\t\t);\n\t\tthis.dictionaries.push(`reducer = {\\n${this.getStateToContext().join(',\\n')}\\n}`);\n\t\tthis.dictionaries.push(`functionDictionary = FunctionDictionary()`);\n\t\tthis.dictionaries.push(`functionDictionary.register(builtInFunctions)`);\n\n\t\tthis.checkForCyclicDependencies();\n\t\tthis.registerCustomFunctions();\n\t}\n\n\tprivate getFunctionBody(expression: TExpressionDefineMap): string {\n\t\tif (expression.expressionType === ExpressionTypes.Function) {\n\t\t\tconst { FunctionName, Arguments } = expression.FunctionDeclaration;\n\n\t\t\tconst argsList = Arguments.map((arg) => {\n\t\t\t\tif (arg.expressionType === ExpressionTypes.Function) {\n\t\t\t\t\treturn this.getFunctionBody(arg);\n\t\t\t\t} else {\n\t\t\t\t\treturn this.getExpressionValueDefine(arg);\n\t\t\t\t}\n\t\t\t}).join(', ');\n\n\t\t\treturn `(lambda: functionDictionary.get('${FunctionName}')(${argsList}))()`;\n\t\t} else {\n\t\t\treturn this.getExpressionValueDefine(expression);\n\t\t}\n\t}\n\n\tgetClassTemplate(className: string) {\n\t\tconst initialState = this.getInitialState();\n\n\t\tconst stateValue = this.stateDictionary.getStateValues({ keys: [initialState] })[0];\n\n\t\tif (stateValue === null) {\n\t\t\tthrow new Error('GetClassTemplate: Invalid state');\n\t\t}\n\n\t\tconst a = this.getInitialContextShape(StartState);\n\t\tconst b = this.getInitialContextShape(initialState);\n\n\t\tconst initialContext = Object.assign({}, a, b);\n\n\t\treturn this.replaceFileContents(\n\t\t\t{\n\t\t\t\t'%CLASSNAME%': className,\n\t\t\t\t'%ID%': `'${className}'`,\n\t\t\t\t'%ACTIONS_MAP%': 'actionsMap',\n\t\t\t\t'%STATES_MAP%': 'statesMap',\n\t\t\t\t'%GET_STATE%': this.getGetStateFunc().toString(),\n\t\t\t\t'%HAS_STATE%': this.getHasStateFunc().toString(),\n\t\t\t\t'%GET_ACTION%': this.getGetActionFunc().toString(),\n\t\t\t\t'%CREATE_ACTION%': this.getCreateActionFunc().toString(),\n\t\t\t\t'%STATE%': (stateValue ?? -1).toString(),\n\t\t\t\t'%CONTEXT%': JSON.stringify(initialContext).replace(/null/g, 'None'),\n\t\t\t\t'%REDUCER%': this.getRootReducer().toString(),\n\t\t\t\t'%S_VALIDATOR%': this.getStateValidator().toString(),\n\t\t\t\t'%A_VALIDATOR%': this.getActionValidator().toString(),\n\t\t\t\t'%F_REGISTRY%': 'functionDictionary',\n\t\t\t\t'%IS_KEY_OF%': this.getIsKeyOf().toString(),\n\t\t\t},\n\t\t);\n\t}\n\n\treplaceFileContents(replacementMap: Record<string, string>): string {\n\t\tlet res = PythonTemplate;\n\t\tObject.entries(replacementMap).forEach(([template, str]) => {\n\t\t\tres = res.replaceAll(template, str);\n\t\t});\n\t\treturn res;\n\t}\n\n\tprotected getHasStateFunc() {\n\t\tconst content = [`def hasState(self, instance, state):`, `\\treturn instance.state == self.getState(state)`];\n\t\treturn content.join('\\n');\n\t}\n\n\tprotected getGetStateFunc() {\n\t\tconst content = [`def getState(self, state):`, `\\treturn statesDictionary[state]`];\n\t\treturn content.join('\\n');\n\t}\n\n\tpublic getCode(options: TGetCodeOptionsMap[typeof ModuleNames.Python]) {\n\t\treturn `\n${this.getImports()}\n${this.getDictionaries()}\nactionsMap = ${JSON.stringify(this.getActionsMap(), null, 2)}\nstatesMap = ${JSON.stringify(this.getStatesMap(), null, 2)}\n${this.getDefaultContext()}\n${this.getActionToStateFromState()}\n${this.getClassTemplate(options.className)}\n\t\t`;\n\t}\n\n\tgetObjectKeysMap(dict: Record<any, any>) {\n\t\tconst obj: Record<string, string> = {};\n\t\tObject.keys(dict).forEach((key: string) => {\n\t\t\tobj[key] = key;\n\t\t});\n\t\treturn obj;\n\t}\n\n\tgetActionsMap() {\n\t\treturn this.getObjectKeysMap(this.actionDictionary.getDictionary());\n\t}\n\n\tgetStatesMap() {\n\t\treturn this.getObjectKeysMap(this.stateDictionary.getDictionary());\n\t}\n\n\tprotected getGetActionFunc() {\n\t\tconst content = [`def getAction(self, action):`, `\\treturn actionsDictionary[action]`];\n\t\treturn content.join('\\n');\n\t}\n\n\tprotected getCreateActionFunc() {\n\t\tconst content = [`def createAction(self, action, payload):`, `\\treturn {\"action\": self.getAction(action), \"payload\": payload}`];\n\t\treturn content.join('\\n');\n\t}\n\n\tpublic getActionToStateFromState() {\n\t\treturn `actionToStateFromStateDict = {\\n${this.getActionToStateFromStateDict().join('\\n')}\\n}`;\n\t}\n\n\tgetStateToContext() {\n\t\treturn this.diagram.states.map((state) => {\n\t\t\tconst stateValue = this.stateDictionary.getStateValues({\n\t\t\t\tkeys: [state.id],\n\t\t\t})[0];\n\n\t\t\tif (!stateValue) {\n\t\t\t\tthrow new Error('Invalid state');\n\t\t\t}\n\n\t\t\treturn `${stateValue}: lambda prevContext, payload, functionDictionary: ${this.getContextTransition(stateValue)}`;\n\t\t});\n\t}\n\n\tgetActionToStateDict(transitions: Record<string, TDiagramAction>) {\n\t\treturn Object.entries(transitions)\n\t\t\t.map(([key, transition]) => {\n\t\t\t\tconst newState = this.stateDictionary.getStateValues({\n\t\t\t\t\tkeys: [key],\n\t\t\t\t})[0];\n\t\t\t\treturn transition.actionsPath.map(({ action }) => {\n\t\t\t\t\tconst actionValue = this.actionDictionary.getActionValues({\n\t\t\t\t\t\tkeys: action,\n\t\t\t\t\t})[0];\n\t\t\t\t\tif (!actionValue) throw new Error(`Action ${action} not found`);\n\t\t\t\t\tif (!newState) throw new Error(`State ${key} not found`);\n\n\t\t\t\t\treturn `\n    ${actionValue}: {\n        \"state\": ${newState},\n    },\n`;\n\t\t\t\t});\n\t\t\t})\n\t\t\t.flatMap(el => `${el.join('\\n')}`);\n\t}\n\n\tprotected getIsKeyOf() {\n\t\tconst content = [`def isKeyOf(self, key, obj):`, `return key in obj`];\n\t\treturn content.join('\\n\\t\\t');\n\t}\n\n\tpublic getDefaultContext() {\n\t\tconst state = this.stateDictionary.getStateValues({\n\t\t\tkeys: [StartState],\n\t\t})[0];\n\n\t\tif (state) {\n\t\t\tconst ctx = this.getContextTransition(state);\n\t\t\tconst content = [`def getDefaultContext(prevContext, payload):`, `ctx = ${ctx}`, `return {**prevContext, **ctx}`];\n\t\t\treturn content.join('\\n\\t');\n\t\t}\n\t\tconst content = [`def getDefaultContext(prevContext, payload):`, `return prevContext`];\n\t\treturn content.join('\\n\\t');\n\t}\n\n\tprotected getRootReducer() {\n\t\tconst content = [\n\t\t\t`def rootReducer(self, action, context, payload, state):`,\n\t\t\t`if (not action) or (payload is None):`,\n\t\t\t`\\treturn {'state': state, 'context': context}`,\n\t\t\t`${this.getRootReducerStateValidation()}`,\n\t\t\t`${this.getRootReducerActionValidation()}`,\n\t\t\t`newState = actionToStateFromStateDict[state][action][\"state\"]`,\n\t\t\t`contextWithInitial = getDefaultContext(context, payload)`,\n\t\t\t`newContextFunc = reducer[newState]`,\n\t\t\t`if not callable(newContextFunc):`,\n\t\t\t`\\traise Exception('Invalid newContextFunc')`,\n\t\t\t`return {\"state\": newState, \"context\": newContextFunc(contextWithInitial, payload, self.getFunctionRegistry())}`, // TODO self.getFunctionRegistry поправить\n\t\t];\n\t\treturn content.join('\\n\\t');\n\t}\n\n\tprotected getRootReducerStateValidation() {\n\t\tconst context = [\n\t\t\t`${this.getRootReducerStateValidationHead()}`,\n\t\t\t`\\t\\t${this.getRootReducerStateValidationError()}`,\n\t\t];\n\t\treturn context.join('\\n');\n\t}\n\n\tprotected getRootReducerStateValidationHead() {\n\t\treturn `if not self.isKeyOf(state, actionToStateFromStateDict)`;\n\t}\n\n\tprotected getRootReducerStateValidationError() {\n\t\treturn `raise Exception(\"Invalid state, maybe machine isn't running.\")`;\n\t}\n\n\tprotected getRootReducerActionValidation() {\n\t\tconst content = [\n\t\t\t`if not self.isKeyOf(action, actionToStateFromStateDict[state]):`,\n\t\t\t`return {'state': state, 'context': context }`,\n\t\t];\n\t\treturn content.join('\\n\\t\\t');\n\t}\n\n\tprotected getStateValidator() {\n\t\tconst content = [`def stateValidator(self, s):`, `return s in statesDictionary.values()`];\n\t\treturn content.join('\\n\\t\\t');\n\t}\n\n\tprivate buildDependencyGraph(): void {\n\t\tconst defines = this.diagram.states.flatMap(\n\t\t\tstate => state.notes?.defines ?? [],\n\t\t);\n\n\t\tconst addDependencies = (expression: TExpressionDefine<'function'>, currentFunc: string) => {\n\t\t\tconst { FunctionName, Arguments } = expression.FunctionDeclaration;\n\n\t\t\tif (!this.dependencyGraph.has(currentFunc)) {\n\t\t\t\tthis.dependencyGraph.set(currentFunc, new Set());\n\t\t\t}\n\n\t\t\tthis.dependencyGraph.get(currentFunc)!.add(FunctionName);\n\n\t\t\tfor (const arg of Arguments) {\n\t\t\t\tif (arg.expressionType === 'function') {\n\t\t\t\t\taddDependencies(arg, currentFunc);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfor (const define of defines) {\n\t\t\tif (define.expression.expressionType === ExpressionTypes.Function) {\n\t\t\t\taddDependencies(define.expression, define.identifier);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate detectCycles(): string[][] {\n\t\tconst visited = new Set<string>();\n\t\tconst recursionStack = new Set<string>();\n\t\tconst cycles: string[][] = [];\n\n\t\tconst dfs = (node: string, path: string[] = []): boolean => {\n\t\t\tif (!visited.has(node)) {\n\t\t\t\tvisited.add(node);\n\t\t\t\trecursionStack.add(node);\n\n\t\t\t\tconst neighbors = this.dependencyGraph.get(node) || new Set();\n\t\t\t\tfor (const neighbor of neighbors) {\n\t\t\t\t\tif (!visited.has(neighbor)) {\n\t\t\t\t\t\tif (dfs(neighbor, [...path, node])) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (recursionStack.has(neighbor)) {\n\t\t\t\t\t\tcycles.push([...path, node, neighbor]);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trecursionStack.delete(node);\n\t\t\treturn false;\n\t\t};\n\n\t\tfor (const node of this.dependencyGraph.keys()) {\n\t\t\tif (!visited.has(node)) {\n\t\t\t\tdfs(node);\n\t\t\t}\n\t\t}\n\n\t\treturn cycles;\n\t}\n\n\tprivate checkForCyclicDependencies() {\n\t\tconst cycles = this.detectCycles();\n\t\tif (cycles.length > 0) {\n\t\t\tconst cycleStrings = cycles.map(cycle => cycle.join(' -> '));\n\t\t\tthrow new Error(`Cyclic dependencies detected in function definitions:\\n${cycleStrings.join('\\n')}`);\n\t\t}\n\t}\n\n\tprivate registerCustomFunctions() {\n\t\tconst defines = this.diagram.states.flatMap(\n\t\t\tstate => state.notes?.defines ?? [],\n\t\t);\n\t\tconst registered = new Set<string>();\n\n\t\tconst registerFunction = (funcName: string) => {\n\t\t\tif (registered.has(funcName)) return;\n\n\t\t\tconst funcDef = defines.find(def => def.identifier === funcName);\n\t\t\tif (!funcDef) return;\n\n\t\t\tconst dependencies = this.dependencyGraph\n\t\t\t\t.get(funcName) || new Set();\n\t\t\tfor (const dep of dependencies) {\n\t\t\t\tif (!registered.has(dep)) {\n\t\t\t\t\tregisterFunction(dep);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst functionBody = this.getFunctionBody(funcDef.expression);\n\t\t\tthis.dictionaries.push(`functionDictionary.register('${funcName}', lambda ${funcDef.Arguments.join(', ')}: ${functionBody})`);\n\t\t\tregistered.add(funcName);\n\t\t};\n\n\t\tfor (const funcName of this.dependencyGraph.keys()) {\n\t\t\tif (!registered.has(funcName)) {\n\t\t\t\tregisterFunction(funcName);\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected getActionValidator() {\n\t\tconst content = [`def actionValidator(self, a):`, `return a in actionsDictionary.values()`];\n\t\treturn content.join('\\n\\t\\t');\n\t}\n\n\tprotected getActionToStateFromStateDict() {\n\t\tconst actionToStartStateMatrix: Record<string, TDiagramAction> = {};\n\n\t\tObject.entries(this.diagram.transitions).forEach(\n\t\t\t([state, transitions]) => {\n\t\t\t\tif (state === StartState) {\n\t\t\t\t\tconst entries = Object.entries(transitions);\n\t\t\t\t\tentries.forEach(([state, action]) => {\n\t\t\t\t\t\taction.actionsPath.forEach(({ action }) => {\n\t\t\t\t\t\t\tactionToStartStateMatrix[state] = {\n\t\t\t\t\t\t\t\tactionsPath: [{ action, note: [] }],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\tconst isExistsStartState = Object.keys(\n\t\t\tactionToStartStateMatrix,\n\t\t).length > 0;\n\n\t\treturn Object.entries(this.diagram.transitions).map(\n\t\t\t([state, transitions]) => {\n\t\t\t\tconst value = this.stateDictionary.getStateValues({\n\t\t\t\t\tkeys: [state],\n\t\t\t\t})[0];\n\t\t\t\tif (!value) throw new Error(`State ${state} not found`);\n\t\t\t\tif (isExistsStartState && state !== StartState) {\n\t\t\t\t\ttransitions = {\n\t\t\t\t\t\t...transitions,\n\t\t\t\t\t\t...actionToStartStateMatrix,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn `${value}: {\\n${this.getActionToStateDict(transitions).join('\\n')}\\n},`;\n\t\t\t},\n\t\t);\n\t}\n\n\tprotected getContextTransition = (value: number) => {\n\t\tconst stateFromDict = this.stateDictionary.getStateKeys({\n\t\t\tstates: [value],\n\t\t})[0];\n\n\t\tif (stateFromDict === null) {\n\t\t\tthrow new Error(`Invalid state - ${value}`);\n\t\t}\n\n\t\tconst diagramState = this.diagram.states.find((diagramState) => {\n\t\t\treturn diagramState.id === stateFromDict;\n\t\t});\n\n\t\tif (!diagramState) {\n\t\t\tthrow new Error(`Invalid state - ${value}`);\n\t\t}\n\n\t\tconst ctxRes: string[] = [];\n\n\t\tdiagramState.notes?.contextDescription.forEach((ctx) => {\n\t\t\tconst newContext = this.getContextItem(ctx);\n\n\t\t\tctxRes.push(...newContext);\n\t\t});\n\n\t\tif (ctxRes.length === 0) return 'prevContext';\n\n\t\treturn `{\\n${ctxRes.join(',\\n')}\\n}`;\n\t};\n\n\tprivate getInitialState() {\n\t\tconst hasInitial = this.diagram.states.find((state) => {\n\t\t\treturn Boolean(state.notes?.initialState);\n\t\t});\n\n\t\tif (hasInitial) {\n\t\t\treturn hasInitial.id;\n\t\t}\n\n\t\tconst firstState = this.diagram.states[0]?.id;\n\n\t\tif (!firstState) {\n\t\t\tthrow new Error('Invalid state');\n\t\t}\n\n\t\treturn firstState;\n\t}\n\n\tprivate getContextItem = (ctx: TContextItem) => {\n\t\tif (isContextWithReducer(ctx)) {\n\t\t\tconst { context, reducer } = ctx;\n\n\t\t\treturn reducer\n\t\t\t\t.map(({ keyItem }) => {\n\t\t\t\t\tif (isKeyItemReference(keyItem)) {\n\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\texpressionType,\n\t\t\t\t\t\t\tidentifier: boundIdentifier,\n\t\t\t\t\t\t} = keyItem;\n\t\t\t\t\t\tconst path = pathRecord[expressionType];\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tkeyItem.expressionType === ExpressionTypes.Constant\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst expressionValueRight = this\n\t\t\t\t\t\t\t\t.getExpressionValue(keyItem);\n\t\t\t\t\t\t\treturn `(lambda: ${expressionValueRight})()`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (isKeyItemWithExpression(keyItem)) {\n\t\t\t\t\t\t\tconst { expression } = keyItem;\n\n\t\t\t\t\t\t\tconst expressionValueRight = this\n\t\t\t\t\t\t\t\t.getExpressionValue(expression);\n\n\t\t\t\t\t\t\treturn getDefaultPropertyContext(\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\tboundIdentifier,\n\t\t\t\t\t\t\t\texpressionValueRight,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn getDefaultPropertyContext(\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\tboundIdentifier,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst { expression } = keyItem;\n\n\t\t\t\t\t\tconst expressionValueRight = this.getExpressionValue(\n\t\t\t\t\t\t\texpression,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn `(lambda: ${expressionValueRight})()`;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.map((el, index) => {\n\t\t\t\t\tconst item = context[index];\n\t\t\t\t\tif (!item) {\n\t\t\t\t\t\tthrow new Error('Unexpected index bound property');\n\t\t\t\t\t}\n\t\t\t\t\tconst { keyItem } = item;\n\t\t\t\t\tconst { identifier: targetProperty } = keyItem;\n\n\t\t\t\t\tif (isKeyItemWithExpression(keyItem)) {\n\t\t\t\t\t\tconst { expression } = keyItem;\n\n\t\t\t\t\t\tconst expressionValueRight = this.getExpressionValue(\n\t\t\t\t\t\t\texpression,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn `'${targetProperty}': (lambda: boundValue = ${el}; boundValue if boundValue is not None else ${expressionValueRight})()`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn `'${targetProperty}': (lambda: boundValue = ${el}; boundValue)()`;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t} else {\n\t\t\tconst { context } = ctx;\n\t\t\treturn context.map(({ keyItem }) => {\n\t\t\t\tconst { identifier } = keyItem;\n\t\t\t\tif (isKeyItemWithExpression(keyItem)) {\n\t\t\t\t\tconst expressionValue = this.getExpressionValue(\n\t\t\t\t\t\tkeyItem.expression,\n\t\t\t\t\t);\n\n\t\t\t\t\treturn `'${identifier}': ${getDefaultPropertyContext('prevContext', identifier, expressionValue)}`;\n\t\t\t\t} else {\n\t\t\t\t\treturn `'${identifier}': ${getDefaultPropertyContext('prevContext', identifier)}`;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tprivate getInitialContextShape = (stateName: string) => {\n\t\tconst states = this.diagram.states.filter(\n\t\t\tstate => state.id === stateName,\n\t\t);\n\n\t\tif (states.length) {\n\t\t\treturn states.reduce(\n\t\t\t\t(acc, curr) => {\n\t\t\t\t\tcurr.notes?.contextDescription.forEach((el) => {\n\t\t\t\t\t\tel.context.forEach((el) => {\n\t\t\t\t\t\t\tacc[el.keyItem.identifier] = null;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\treturn acc;\n\t\t\t\t},\n\t\t\t\t{} as Record<string, null>,\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tprivate getExpressionValue<T extends TMappedKeys>(\n\t\texpression: TExpression<T>,\n\t) {\n\t\treturn this.expressions[expression.expressionType](expression);\n\t}\n\n\tprivate getExpressionValueDefine(expression: TExpressionDefineMap) {\n\t\tswitch (expression.expressionType) {\n\t\t\tcase ExpressionTypes.Identifier:\n\t\t\t\treturn expression.identifier;\n\t\t\tcase ExpressionTypes.Function:\n\t\t\t\treturn this.getFunctionBody(expression);\n\t\t\tdefault:\n\t\t\t\treturn this.getExpressionValue(expression);\n\t\t}\n\t}\n\n\tprivate setupExpressions(): TExpressionRecord {\n\t\treturn {\n\t\t\t[ExpressionTypes.ArrayDeclaration]: () => '[]',\n\t\t\t[ExpressionTypes.Constant]: ({ identifier }) => {\n\t\t\t\tif (this.constants === null) {\n\t\t\t\t\tthrow new Error('Missing dictionary with constants');\n\t\t\t\t}\n\n\t\t\t\tif (this.constants[identifier] === undefined) {\n\t\t\t\t\tthrow new Error(`The identifier is missing in the const dictionary: ${identifier}`);\n\t\t\t\t}\n\t\t\t\tif (typeof this.constants[identifier] === 'string') return `\"${this.constants[identifier]}\"`;\n\n\t\t\t\treturn `${this.constants[identifier]}`;\n\t\t\t},\n\t\t\t[ExpressionTypes.Function]: (func) => {\n\t\t\t\tlet currentRecLevel = 0;\n\t\t\t\tconst recursive = (func: TExpressionFunction) => {\n\t\t\t\t\tconst { FunctionDeclaration } = func;\n\t\t\t\t\tconst { FunctionName, Arguments } = FunctionDeclaration;\n\n\t\t\t\t\tconst res: string[] = [];\n\n\t\t\t\t\tif (currentRecLevel < maxNestedFuncLevel) {\n\t\t\t\t\t\tArguments.forEach((item) => {\n\t\t\t\t\t\t\tif (isKeyItemReference(item)) {\n\t\t\t\t\t\t\t\tconst { expressionType, identifier } = item;\n\t\t\t\t\t\t\t\tconst path = pathRecord[expressionType];\n\t\t\t\t\t\t\t\tif (isKeyItemWithExpression(item)) {\n\t\t\t\t\t\t\t\t\tconst { expression } = item;\n\n\t\t\t\t\t\t\t\t\tif (expression.expressionType === ExpressionTypes.Function) {\n\t\t\t\t\t\t\t\t\t\tcurrentRecLevel++;\n\t\t\t\t\t\t\t\t\t\tres.push(recursive(expression));\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst valueExpression = this.getExpressionValue(expression);\n\n\t\t\t\t\t\t\t\t\tres.push(`${getDefaultPropertyContext(path, identifier, valueExpression)}`);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (item.expressionType === ExpressionTypes.Constant) {\n\t\t\t\t\t\t\t\t\t\tconst expressionValueRight = this.getExpressionValue(item);\n\t\t\t\t\t\t\t\t\t\tres.push(expressionValueRight);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tres.push(`${getDefaultPropertyContext(path, identifier)}`);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (item.expressionType === ExpressionTypes.Function) {\n\t\t\t\t\t\t\t\t\tres.push(recursive(item));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tconst valueExpression = this.getExpressionValue(item);\n\t\t\t\t\t\t\t\t\tres.push(valueExpression);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error(`Max level of nested functions reached ${maxNestedFuncLevel}`);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn `${getFunctionFromDictionary(FunctionName)}(${res.join(', ')})`;\n\t\t\t\t};\n\n\t\t\t\tconst res = recursive(func);\n\t\t\t\treturn res;\n\t\t\t},\n\t\t\t[ExpressionTypes.DecimalDeclaration]: ({ NumberDeclaration }) => {\n\t\t\t\treturn `${NumberDeclaration}`;\n\t\t\t},\n\t\t\t[ExpressionTypes.IntegerDeclaration]: ({ NumberDeclaration }) => {\n\t\t\t\treturn `${NumberDeclaration}`;\n\t\t\t},\n\t\t\t[ExpressionTypes.StringDeclaration]: ({ StringDeclaration }) => {\n\t\t\t\treturn `'${StringDeclaration}'`;\n\t\t\t},\n\t\t\t[ExpressionTypes.Context]: ({ identifier }) => {\n\t\t\t\treturn `prevContext.get('${identifier}')`;\n\t\t\t},\n\t\t\t[ExpressionTypes.Payload]: ({ identifier }) => {\n\t\t\t\treturn `payload.get('${identifier}')`;\n\t\t\t},\n\t\t} as const;\n\t}\n}\n","export const PythonTemplate = `\nclass %CLASSNAME%: # (GenericAutomata)\n\n    id = %ID%\n    actions = %ACTIONS_MAP%\n    states = %STATES_MAP%\n\n    %GET_STATE%\n\n    %HAS_STATE%\n\n    %GET_ACTION%\n\n    %CREATE_ACTION%\n\n    %REDUCER%\n\n    def __init__(self):\n        super().__init__()\n        self.state: %STATE%,\n        self.context': %CONTEXT%,\n        self.functionRegistry': %F_REGISTRY%\n\n    %S_VALIDATOR%\n\n    %A_VALIDATOR%\n\n    %IS_KEY_OF%\n`;\n","import { JavaScriptCompiler } from '../../../JavaScript/JavaScriptCompiler';\n\nfunction getStateValidator() {\n\treturn `(${JavaScriptCompiler.class.serializer.getStateValidator()}) as TValidator<TAutomataBaseStateType>`;\n}\n\nfunction getActionValidator() {\n\treturn `(${JavaScriptCompiler.class.serializer.getActionValidator()}) as TValidator<TAutomataBaseActionType>`;\n}\n\nfunction getIsKeyOf() {\n\treturn `(${JavaScriptCompiler.class.serializer.getIsKeyOf()}) as (key: any, obj: object) => key is keyof typeof obj`;\n}\n\nfunction getGetActionFunc() {\n\treturn `(action: keyof typeof actionsMap) => actionsDictionary[action]`;\n}\n\nfunction getCreateActionFunc(props: {\n\tclassName: string;\n}) {\n\treturn `(action: keyof typeof actionsMap, payload:any) => {\n\t\tconst actionId = ${props.className}.getAction(action);\n\t\treturn {\n\t\t\taction: actionId,\n\t\t\tpayload,\n\t\t}\n\t}`;\n}\nfunction getHasStateFunc(props: {\n\tclassName: string;\n}) {\n\treturn `(instance: ${props.className}, state: keyof typeof ${props.className}.states) => instance.state === ${props.className}.getState(state)`;\n}\n\nfunction getGetStateFunc() {\n\treturn `(state: keyof typeof statesMap) => statesDictionary[state]`;\n}\n\nexport const classSerializer = {\n\t...JavaScriptCompiler.class.serializer,\n\tgetStateValidator,\n\tgetActionValidator,\n\tgetIsKeyOf,\n\tgetGetActionFunc,\n\tgetCreateActionFunc,\n\tgetHasStateFunc,\n\tgetGetStateFunc,\n} as const;\n","import { classSerializer } from './serializer';\n\nexport const classModule = {\n\tserializer: classSerializer,\n};\n","import { JavaScriptCompiler } from '../../JavaScript/JavaScriptCompiler';\nimport { classModule } from './class';\n\nexport const TypeScriptCompiler = {\n\tclass: classModule,\n\tcontext: JavaScriptCompiler.context,\n\tdictionaries: JavaScriptCompiler.dictionaries,\n\texpressions: JavaScriptCompiler.expressions,\n\timports: JavaScriptCompiler.imports,\n\tstate: JavaScriptCompiler.state,\n\tevents: JavaScriptCompiler.events,\n\tforks: JavaScriptCompiler.forks,\n};\n","import { ICodegen, TGetCodeOptionsMap, TModuleParams } from '../../../types/common';\nimport { getStatesByPass } from '../../shared';\nimport { ModuleNames } from '../index';\nimport { JavaScriptCodegen } from '../JavaScript';\nimport { TypeScriptCompiler } from './TypescriptCompiler';\n\nexport class TypeScriptCodegen extends JavaScriptCodegen implements ICodegen<typeof ModuleNames.TypeScript> {\n\tconstructor(params: TModuleParams) {\n\t\tsuper(params);\n\t\tthis.imports['@yantrix/core']!.push('TAutomataBaseActionType', 'TAutomataBaseStateType', 'TValidator');\n\t}\n\n\tpublic override getCode(options: TGetCodeOptionsMap[typeof ModuleNames.TypeScript]) {\n\t\tconst props = {\n\t\t\timports: this.imports,\n\t\t\tdictionaries: this.dictionaries,\n\t\t\tdiagram: this.diagram,\n\t\t\tstateDictionary: this.stateDictionary,\n\t\t\tactionDictionary: this.actionDictionary,\n\t\t\teventDictionary: this.eventDictionary,\n\t\t\texpressions: this.expressions,\n\t\t\tbyPassedList: getStatesByPass(this.diagram, this.stateDictionary),\n\t\t\tdictionariesSerializer: TypeScriptCompiler.dictionaries.serializer,\n\t\t\tclassSerializer: TypeScriptCompiler.class.serializer,\n\t\t\tclassName: options.className,\n\t\t};\n\t\treturn `\n\t\t\t${TypeScriptCompiler.imports.serializer.getImportsCode(props)}\n\t\t\t${TypeScriptCompiler.dictionaries.serializer.getDictionariesCode(props)}\n\t\t\t${TypeScriptCompiler.events.serializer.getEventAdapterCode(props)}\n\t\t\t${TypeScriptCompiler.events.serializer.getCreateEventBusFunctionCode()}\n\t\t\t${TypeScriptCompiler.dictionaries.serializer.getActionsMap(props)}\n\t\t\t${TypeScriptCompiler.dictionaries.serializer.getStatesMap(props)}\n\t\t\t${TypeScriptCompiler.dictionaries.serializer.getSerializedSetByPassed(props)}\n\t\t\texport type TActions${options.className} = keyof typeof actionsMap;\n\t\t\t${TypeScriptCompiler.context.serializer.getDefaultContext(props)}\n\t\t\t${TypeScriptCompiler.context.serializer.getStateReducerCode(props)}\n\t\t\t${TypeScriptCompiler.forks.serializer.getPredicatesCode(props)}\n\t\t\t${TypeScriptCompiler.dictionaries.serializer.getActionToStateFromState(props)}\n\t\t\t${TypeScriptCompiler.class.serializer.getClassTemplate(props)}\n\t\t\t${TypeScriptCompiler.dictionaries.serializer.getAutomataEpochCounterCode()}\n\t\t\t${TypeScriptCompiler.dictionaries.serializer.getAutomataInternalsRegisterCode(props)}\n\t\t\t${TypeScriptCompiler.dictionaries.serializer.getFunctionDictionaryInternalRegisterCode()}\n\t\t\t${TypeScriptCompiler.dictionaries.serializer.getFunctionDictionaryBuiltInRegisterCode()}\n\t\t`;\n\n\t\t/*\n\t\t\tправильный порядок\n\n\t\t\treturn `\n\t\t\t\t${TypeScriptCompiler.imports.serializer.getImportsCode(props)}\n\t\t\t\t${TypeScriptCompiler.dictionaries.serializer.getDictionariesCode(props)}\n\t\t\t\t${TypeScriptCompiler.events.serializer.getEventAdapterCode(props)}\n\t\t\t\t${TypeScriptCompiler.events.serializer.getCreateEventBusFunctionCode()}\n\t\t\t\t${TypeScriptCompiler.dictionaries.serializer.getActionsMap(props)}\n\t\t\t\t${TypeScriptCompiler.dictionaries.serializer.getStatesMap(props)}\n\t\t\t\t${TypeScriptCompiler.dictionaries.serializer.getSerializedSetByPassed(props)}\n\t\t\t\texport type TActions${options.className} = keyof typeof actionsMap;\n\t\t\t\t${TypeScriptCompiler.dictionaries.serializer.getStatesMap(props)}\n\t\t\t\t${TypeScriptCompiler.context.serializer.getDefaultContext(props)}\n\t\t\t\t${TypeScriptCompiler.context.serializer.getStateReducerCode(props)}\n\t\t\t\t${TypeScriptCompiler.forks.serializer.getPredicatesCode(props)}\n\t\t\t\t${TypeScriptCompiler.dictionaries.serializer.getActionToStateFromState(props)}\n\t\t\t\t${TypeScriptCompiler.class.serializer.getClassTemplate(props)}\n\t\t\t`;\n\t\t*/\n\t}\n}\n","import { JavaCodegen } from './Java.js';\nimport { JavaScriptCodegen } from './JavaScript';\nimport { PythonCodegen } from './Python.js';\nimport { TypeScriptCodegen } from './TypeScript';\n\nexport const ModuleNames = {\n\tJavaScript: 'javascript',\n\tTypeScript: 'typescript',\n\tPython: 'python',\n\tJava: 'java',\n} as const;\n\n/**\n * Currently supported language modules for code generation.\n */\nexport const Modules = {\n\t[ModuleNames.JavaScript]: JavaScriptCodegen,\n\t[ModuleNames.TypeScript]: TypeScriptCodegen,\n\t[ModuleNames.Python]: PythonCodegen,\n\t[ModuleNames.Java]: JavaCodegen,\n} as const;\n","import { ICodegenOptions, TStateDiagramMatrixIncludeNotes } from '../types/common.js';\nimport { processFile } from './InjectFunctionsProcess.js';\nimport { Modules } from './modules/index.js';\n\n/**\n * ???\n */\nexport class CodegenCreator {\n\tpublic constructor(\n\t\tprotected stateDiagramSyntaxTree: TStateDiagramMatrixIncludeNotes,\n\n\t) {}\n\n\tpublic async createCodegen(options: ICodegenOptions) {\n\t\tconst injectedFunctions = await processFile(options.language)(options.functionFilePath);\n\n\t\treturn new Modules[options.language]({ diagram: this.stateDiagramSyntaxTree, constants: options.constants, injectedFunctions });\n\t}\n}\n","import { TDiagramState, TStateDiagramMatrix } from '@yantrix/mermaid-parser';\nimport { TNullable } from '@yantrix/utils';\nimport { TExpression, TMappedKeys, TNotes } from '@yantrix/yantrix-parser';\nimport { ModuleNames, Modules } from '../core/modules/index.js';\n\nexport type TStateDiagramMatrixIncludeNotes = {\n\tstates: TStateIncludingNotes[];\n} & Omit<TStateDiagramMatrix, 'states'>;\n\ntype TDiagramStateOmitNotes = Omit<TDiagramState, 'notes'>;\n\nexport type TStateIncludingNotes = {\n\tnotes: TNotes | null;\n} & TDiagramStateOmitNotes;\n\nexport type TConstants = Record<string, string | number>;\n\nexport interface ICodegenOptions<T = TOutLang> {\n\tlanguage: T;\n\tconstants: TNullable<TConstants>;\n\tfunctionFilePath: TNullable<string>;\n\n}\n\n/**\n * Represents the options for generating code.\n */\nexport interface IGenerateOptions {\n\t/**\n\t * The name of the class for the generated Automata.\n\t */\n\tclassName: string;\n\n\t/**\n\t * The output language for the generated code.\n\t * You can check the supported languages and features [here](/integrations/100_language_support.html).\n\t */\n\toutLang: TOutLang;\n\n\t/**\n\t * Included constants to be used in the generated Automata.\n\t */\n\tconstants?: string;\n\tfunctionFilePath?: string;\n}\n\nexport interface ITypedObjectProps {\n\ttypeName: string;\n\ttypeGuardName: string;\n\tname: string;\n\tbody: string;\n}\n\nexport interface ITypedObject extends ITypedObjectProps {\n\tcodeBlock: string;\n}\n\nexport interface IGetCodeJSOptions {\n\tclassName: string;\n}\n\nexport interface IGetCodeTSOptions extends IGetCodeJSOptions {}\n\nexport interface IGetCodePythonOptions {\n\tclassName: string;\n}\n\nexport interface IGetCodeJavaOptions {\n\tclassName: string;\n}\n\nexport type TGetCodeOptionsMap = {\n\t[ModuleNames.JavaScript]: IGetCodeJSOptions;\n\t[ModuleNames.Python]: IGetCodePythonOptions;\n\t[ModuleNames.TypeScript]: IGetCodeTSOptions;\n\t[ModuleNames.Java]: IGetCodeJavaOptions;\n};\n\n/**\n * Interface that is implemented by all code generators.\n * @template T - The output language.\n * @property getCode - The function that returns the generated code, following all the conventions established by the output language `T`.\n */\nexport interface ICodegen<T extends TOutLang> {\n\t/**\n\t * The function that returns the generated code, following all the conventions established by the output language `T`\n\t * @param options - Options for codegen in the desired output language `T`.\n\t * @returns The generated code.\n\t */\n\tgetCode: (options: TGetCodeOptionsMap[T]) => string;\n}\n\nexport type TOutLang = keyof typeof Modules;\n\nexport type TExpressionRecord = {\n\t[K in TMappedKeys]: (arg: TExpression<K>) => string;\n\n};\nexport type TUserFunctionsDict = {\n\tpath: TNullable<string>;\n};\nexport const TAssignTypeDict = {\n\tPAYLOAD: 'payload',\n\tPREV_CONTEXT: 'prevContext',\n} as const;\n\nexport type TAssignTypes = (typeof TAssignTypeDict)[keyof typeof TAssignTypeDict];\n\nexport type TModuleParams = {\n\tdiagram: TStateDiagramMatrixIncludeNotes;\n\tconstants: TNullable<TConstants>;\n\tinjectedFunctions: TUserFunctionsDict;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,IAAAA,0BAA8B;;;ACX9B,uBAAiB;;;ACAjB,sBAA4D;AAC5D,4BAA2C;;;ACA3C,4BAAiD;;;ACD1C,IAAM,eAAe;AACrB,IAAM,mCAAmC;;;ADKzC,SAAS,iBACf,SACA,iBACA,kBACA,iBACO;AAEP,MAAI,iBAAiB;AACpB,UAAM,YAAY,QAAQ,OAAO,IAAI,OAAK,EAAE,EAAE;AAC9C,oBAAgB,UAAU,EAAE,MAAM,UAAU,CAAC;AAAA,EAC9C;AAGA,MAAI,kBAAkB;AACrB,eAAWC,UAAS,QAAQ,QAAQ;AACnC,iBAAWC,SAAQD,OAAM,YAAY,IAAI,OAAK,EAAE,MAAM,GAAG;AACxD,cAAM,cAAcC,MAAK,CAAC;AAC1B,cAAM,iBAAiB,iBAAiB,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,MAAM;AACxF,YAAI,CAAC,gBAAgB;AACpB;AAAA,QACD;AACA,yBAAiB,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;AAAA,MACpD;AAAA,IACD;AAAA,EACD;AAGA,MAAI,iBAAiB;AACpB,eAAWD,UAAS,QAAQ,QAAQ;AACnC,YAAM,oBAAoBA,OAAM,OAAO,KAAK,IAAI,WAAS,MAAM,UAAU;AACzE,UAAI,qBAAqB,kBAAkB,SAAS,GAAG;AACtD,cAAM,aAAa,kBAAkB,OAAO,OAAK,gBAAgB,eAAe,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI;AACzG,wBAAgB,UAAU,EAAE,MAAM,WAAW,CAAC;AAAA,MAC/C;AAEA,YAAM,uBAAuBA,OAAM,OAAO,UAAU,IAAI,WAAS,MAAM,UAAU;AACjF,UAAI,wBAAwB,qBAAqB,SAAS,GAAG;AAC5D,cAAM,aAAa,qBAAqB,OAAO,OAAK,gBAAgB,eAAe,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI;AAC5G,wBAAgB,UAAU,EAAE,MAAM,WAAW,CAAC;AAAA,MAC/C;AAAA,IACD;AAAA,EACD;AACD;AA1CgB;AAuDT,SAAS,gBAAgB,SAA0C,iBAAuC;AAChH,QAAM,WAAqB,CAAC;AAE5B,UAAQ,OAAO,QAAQ,CAACA,WAAU;AACjC,QAAIA,OAAM,OAAO,QAAQ;AACxB,YAAM,eAAe,QAAQ,aAAaA,OAAM,EAAE;AAElD,UAAI,CAAC,aAAc,OAAM,IAAI,MAAM,kBAAkBA,OAAM,EAAE,0BAA2B;AACxF,YAAM,eAAe,aAAa,YAAY;AAE9C,UAAI,CAAC,cAAc;AAClB,cAAM,IAAI,MAAM,iBAAiB,YAAY,wBAAwBA,OAAM,EAAE,EAAE;AAAA,MAChF;AAEA,mBAAa,OAAO,QAAQ,CAAC,EAAE,MAAM,MAAM;AAC1C,YAAI,aAAa,OAAO,SAAS,KAAK,MAAM,WAAW,GAAG;AACzD,gBAAM,IAAI,MAAM,iBAAiB,YAAY,uCAAuC;AAAA,QACrF;AAAA,MACD,CAAC;AAED,YAAM,QAAQ,gBAAgB,eAAe,EAAE,MAAM,CAACA,OAAM,EAAE,EAAE,CAAC,EAAE,CAAC;AACpE,UAAI,CAAC,MAAO,OAAM,IAAI,MAAM,SAASA,OAAM,EAAE,YAAY;AAEzD,eAAS,KAAK,KAAK;AAAA,IACpB;AAAA,EACD,CAAC;AAED,SAAO;AACR;AA5BgB;AA8BT,IAAM,aAA8C;AAAA,EAC1D,CAAC,sCAAgB,QAAQ,GAAG;AAAA,EAC5B,CAAC,sCAAgB,OAAO,GAAG;AAAA,EAC3B,CAAC,sCAAgB,OAAO,GAAG;AAC5B;;;ADxFO,IAAM,cAAN,MAA+D;AAAA,EAPtE,OAOsE;AAAA;AAAA;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACU,UAAU;AAAA,IACnB,qBAAqB,CAAC,iBAAiB;AAAA,EACxC;AAAA,EAEQ,UAAkB;AAAA;AAAA,EAE1B,YAAY,EAAE,QAAQ,GAAkB;AACvC,SAAK,mBAAmB,IAAI,sCAAsB;AAClD,SAAK,kBAAkB,IAAI,qCAAqB;AAChD,SAAK,UAAU;AAEf,SAAK,eAAe,CAAC;AACrB,SAAK,sBAAsB,CAAC;AAC5B,SAAK,eAAe,CAAC;AACrB,SAAK,qBAAqB,CAAC;AAE3B,SAAK,iBAAiB,KAAK,kBAAkB;AAE7C,qBAAiB,SAAS,KAAK,iBAAiB,KAAK,gBAAgB;AACrE,SAAK,kBAAkB;AAAA,EACxB;AAAA,EAEO,QAAQ,SAA8D;AAC5E,WAAO;AAAA,KACJ,KAAK,WAAW,CAAC;AAAA,KACjB,KAAK,iBAAiB,QAAQ,SAAS,CAAC;AAAA;AAAA,EAE5C;AAAA;AAAA,EAGA,aAAqB;AACpB,UAAM,QAAkB;AAAA,MACvB,WAAW,KAAK,OAAO;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AACA,WAAO,MAAM,KAAK,IAAI;AAAA,EACvB;AAAA,EAEA,kBAA0B;AACzB,WAAO,KAAK,aAAa,KAAK,IAAI;AAAA,EACnC;AAAA,EAEO,4BAAoC;AAC1C,WAAO;AAAA;AAAA,MAEH,KAAK,yBAAyB,CAAC;AAAA;AAAA;AAAA,EAGpC;AAAA;AAAA,EAGA,2BAAmC;AAClC,WAAO,OACL,QAAQ,KAAK,QAAQ,WAAW,EAChC,IAAI,CAAC,CAACE,QAAO,WAAW,MAAM;AAC9B,YAAM,QAAQ,KAAK,gBAAgB,eAAe,EAAE,MAAM,CAACA,MAAK,EAAE,CAAC,EAAE,CAAC;AACtE,UAAI,CAAC;AACJ,cAAM,IAAI,MAAM,SAASA,MAAK,YAAY;AAE3C,aAAO;AAAA;AAAA,6BAEkB,KAAK;AAAA;AAAA,QAE1B,KAAK,eAAe,WAAW,EAAE,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,IAIjD,CAAC,EACA,KAAK,KAAK;AAAA,EACb;AAAA,EAEA,eAAe,aAAuD;AACrE,WAAO,OACL,QAAQ,WAAW,EACnB,IAAI,CAAC,CAACA,QAAO,UAAU,MAAM;AAC7B,YAAM,WAAW,KAAK,gBAAgB,eAAe,EAAE,MAAM,CAACA,MAAK,EAAE,CAAC,EAAE,CAAC;AACzE,aAAO,WAAW,YAAY,IAAI,CAAC,EAAE,OAAO,MAAM;AACjD,cAAM,cAAc,KAAK,iBAAiB,gBAAgB;AAAA,UACzD,MAAM;AAAA,QACP,CAAC,EAAE,CAAC;AACJ,YAAI,CAAC;AACJ,gBAAM,IAAI,MAAM,UAAU,MAAM,YAAY;AAC7C,YAAI,CAAC;AACJ,gBAAM,IAAI,MAAM,SAASA,MAAK,YAAY;AAI3C,eAAO;AAAA,+BACmB,WAAW;AAAA;AAAA,gCAEV,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOpC,CAAC;AAAA,IACF,CAAC,EACA,QAAQ,QAAM,GAAG,GAAG,KAAK,MAAO,CAAC,EAAE;AAAA,EACtC;AAAA,EAEA,oBAA4B;AAC3B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMR;AAAA;AAAA,EAGA,iBAAiB,WAA2B;AAC3C,WAAO;AAAA,iCACwB,SAAS;AAAA,kBACxB,KAAK,gBAAgB,CAAC;AAAA,MAClC,KAAK,0BAA0B,CAAC;AAAA,kBACpB,KAAK,kBAAkB,CAAC;AAAA,kBACxB,KAAK,sBAAsB,SAAS,CAAC;AAAA,kBACrC,KAAK,2BAA2B,CAAC;AAAA,MAC7C,KAAK,kBAAkB,CAAC;AAAA,kBACZ,KAAK,eAAe,CAAC;AAAA,kBACrB,KAAK,eAAe,CAAC;AAAA,kBACrB,KAAK,SAAS,CAAC;AAAA;AAAA;AAAA,EAGhC;AAAA;AAAA,EAGQ,sBAAsB,WAA2B;AACxD,WAAO;AAAA,qBACY,SAAS;AAAA,qDACuB,KAAK,gBAAgB,CAAC;AAAA,iCAC1C,KAAK,kBAAkB,CAAC;AAAA,qCACpB,KAAK,eAAe,CAAC;AAAA;AAAA;AAAA,EAGzD;AAAA;AAAA,EAGQ,oBAA0B;AAEjC,SAAK,aAAa,KAAK;AAAA;AAAA,IAErB,OACA,QAAQ,KAAK,gBAAgB,cAAc,CAAC,EAC5C,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,GAAG,4BAA4B,KAAK,IAAI,EAClE,KAAK,KAAK,CAAC;AAAA;AAAA,GAEZ;AAGD,SAAK,aAAa,KAAK;AAAA;AAAA,IAErB,OACA,QAAQ,KAAK,iBAAiB,cAAc,CAAC,EAC7C,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,GAAG,6BAA6B,KAAK,IAAI,EACnE,KAAK,KAAK,CAAC;AAAA;AAAA,GAEZ;AAAA,EACF;AAAA;AAAA,EAGQ,oBAA4B;AACnC,WAAO;AAAA,EACR;AAAA;AAAA,EAGQ,kBAA6C;AACpD,WAAO,KAAK,gBAAgB,eAAe,EAAE,MAAM,CAAC,gCAAU,EAAE,CAAC,EAAE,CAAC;AAAA,EACrE;AAAA;AAAA,EAGQ,iBAAyB;AAChC,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKH,KAAK,8BAA8B,CAAC;AAAA,MACpC,KAAK,+BAA+B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ1C;AAAA;AAAA,EAGQ,gCAAwC;AAC/C,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMR;AAAA;AAAA,EAGQ,iCAAyC;AAChD,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASR;AAAA,EAEQ,oBAA4B;AACnC,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKR;AAAA,EAEQ,6BAAqC;AAC5C,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUR;AAAA,EAEQ,iBAAyB;AAChC,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQR;AAAA,EAEQ,iBAAyB;AAChC,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUR;AAAA;AAAA,EAGQ,WAAmB;AAC1B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkER;AACD;;;AG1VA,IAAAC,mBAAkF;;;ACClF,IAAAC,yBAA2B;;;ACDpB,IAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACE3B,SAAS,oBAAoB,gBAAgD;AACnF,MAAI,MAAM;AACV,SAAO,QAAQ,cAAc,EAAE,QAAQ,CAAC,CAAC,UAAU,GAAG,MAAM;AAC3D,UAAM,IAAI,WAAW,UAAU,GAAG;AAAA,EACnC,CAAC;AACD,SAAO;AACR;AANgB;;;ACAT,SAAS,uBAAuB,OAGpC;AACF,QAAM,SAAS,MAAM,QAAQ,OAAO,OAAO,CAAAC,WAASA,OAAM,OAAO,MAAM,SAAS;AAEhF,MAAI,OAAO,QAAQ;AAClB,WAAO,OAAO;AAAA,MACb,CAAC,KAAK,SAAS;AACd,aAAK,OAAO,mBAAmB,QAAQ,CAAC,OAAO;AAC9C,aAAG,QAAQ,QAAQ,CAACC,QAAO;AAC1B,gBAAIA,IAAG,QAAQ,UAAU,IAAI;AAAA,UAC9B,CAAC;AAAA,QACF,CAAC;AACD,eAAO;AAAA,MACR;AAAA,MACA,CAAC;AAAA,IACF;AAAA,EACD;AAEA,SAAO;AACR;AArBgB;;;ACDhB,IAAAC,yBAA2B;AAC3B,IAAAC,yBAOO;;;ACTP,IAAAC,yBASO;;;ACTP,uBAAgE;AAEhE,IAAAC,yBAA+D;AAOxD,SAAS,gBAAgB,OAGrB;AACV,MAAI,MAAM,WAAW,mBAAmB,uCAAgB,UAAU;AACjE,UAAM,EAAE,cAAc,UAAU,IAAI,MAAM,WAAW;AAGrD,QAAI,+CAA8B,SAAS,YAAY,GAAG;AACzD,aAAO;AAAA,2CACiC,YAAY;AAAA;AAAA;AAAA,IAGrD;AAEA,UAAM,WAAW,UAAU,IAAI,CAAC,QAAQ;AACvC,UAAI,IAAI,mBAAmB,uCAAgB,UAAU;AACpD,eAAO,gBAAgB;AAAA,UACtB,YAAY;AAAA,UACZ,aAAa,MAAM;AAAA,QACpB,CAAC;AAAA,MACF,OAAO;AACN,eAAO,yBAAyB;AAAA,UAC/B,YAAY;AAAA,UACZ,aAAa,MAAM;AAAA,QACpB,CAAC;AAAA,MACF;AAAA,IACD,CAAC,EAAE,KAAK,IAAI;AAEZ,WAAO;AAAA,2CACkC,YAAY;AAAA,kBACrC,QAAQ;AAAA;AAAA,EAEzB,OAAO;AACN,WAAO,yBAAyB;AAAA,MAC/B,YAAY,MAAM;AAAA,MAClB,aAAa,MAAM;AAAA,IACpB,CAAC;AAAA,EACF;AACD;AAvCgB;;;ACThB,SAAS,0BAA0BC,OAAc,YAAoB,YAAqB;AACzF,QAAM,WAAW,mBAAmBA,OAAM,UAAU;AAEpD,SAAO;AAAA,WACGA,KAAI,gBAAgB,QAAQ,qBAAqB,QAAQ;AAAA,gBACpDA,KAAI,KAAK,UAAU;AAAA;AAAA;AAAA,iBAGlB,cAAc,MAAM;AAAA;AAAA;AAGrC;AAXS;AAaT,SAAS,mBAAmBA,OAAc,YAAoB;AAC7D,SAAO,GAAGA,KAAI,KAAK,UAAU;AAC9B;AAFS;AAIT,SAAS,0BAA0B,MAAc;AAChD,SAAO,2BAA2B,IAAI;AACvC;AAFS;AAIF,IAAM,wBAAwB;AAAA,EACpC;AAAA,EACA;AACD;;;AFTO,SAAS,iBAAiB,OAEX;AACrB,QAAM,mBAAsC;AAAA,IAC3C,CAAC,uCAAgB,gBAAgB,GAAG,MAAM;AAAA,IAC1C,CAAC,uCAAgB,QAAQ,GAAG,CAAC,EAAE,WAAW,MAAM;AAC/C,UAAI,MAAM,cAAc,MAAM;AAC7B,cAAM,IAAI,MAAM,mCAAmC;AAAA,MACpD;AAEA,UAAI,MAAM,UAAU,UAAU,MAAM,QAAW;AAC9C,cAAM,IAAI;AAAA,UACT,sDAAsD,UAAU;AAAA,QACjE;AAAA,MACD;AACA,UAAI,OAAO,MAAM,UAAU,UAAU,MAAM;AAC1C,eAAO,IAAI,MAAM,UAAU,UAAU,CAAC;AAEvC,aAAO,GAAG,MAAM,UAAU,UAAU,CAAC;AAAA,IACtC;AAAA,IACA,CAAC,uCAAgB,QAAQ,GAAG,MAAM;AACjC,aAAO;AAAA,IACR;AAAA,IACA,CAAC,uCAAgB,kBAAkB,GAAG,CAAC,EAAE,kBAAkB,MAAM;AAChE,aAAO,GAAG,iBAAiB;AAAA,IAC5B;AAAA,IACA,CAAC,uCAAgB,kBAAkB,GAAG,CAAC,EAAE,kBAAkB,MAAM;AAChE,aAAO,GAAG,iBAAiB;AAAA,IAC5B;AAAA,IACA,CAAC,uCAAgB,iBAAiB,GAAG,CAAC,EAAE,kBAAkB,MAAM;AAC/D,aAAO,IAAI,iBAAiB;AAAA,IAC7B;AAAA,IACA,CAAC,uCAAgB,OAAO,GAAG,CAAC,EAAE,WAAW,MAAM;AAC9C,aAAO,uEAAuE,UAAU,2CAA2C,UAAU;AAAA,IAC9I;AAAA,IACA,CAAC,uCAAgB,OAAO,GAAG,CAAC,EAAE,WAAW,MAAM;AAC9C,aAAO,2DAA2D,UAAU,uCAAuC,UAAU;AAAA,IAC9H;AAAA,EACD;AAEA,mBAAiB,uCAAgB,QAAQ,IAAI,CAAC,SAAS;AACtD,QAAI,kBAAkB;AACtB,UAAM,YAAY,wBAACC,UAA8B;AAChD,YAAM,EAAE,oBAAoB,IAAIA;AAChC,YAAM,EAAE,cAAc,UAAU,IAAI;AAEpC,YAAMC,OAAgB,CAAC;AAEvB,UAAI,kBAAkB,2CAAoB;AACzC,kBAAU,QAAQ,CAAC,SAAS;AAC3B,kBAAI,2CAAmB,IAAI,GAAG;AAC7B,kBAAM,EAAE,gBAAgB,WAAW,IAAI;AACvC,kBAAMC,QAAO,WAAW,cAAc;AACtC,oBAAI,gDAAwB,IAAI,GAAG;AAClC,oBAAM,EAAE,WAAW,IAAI;AAEvB,kBACC,WAAW,mBACP,uCAAgB,UACnB;AACD;AACA,gBAAAD,KAAI,KAAK,UAAU,UAAU,CAAC;AAAA,cAC/B;AAEA,oBAAM,kBACH,mBAAmB;AAAA,gBACpB;AAAA,gBACA;AAAA,cACD,CAAC;AAEF,cAAAA,KAAI;AAAA,gBACH,GAAG,sBAAsB,0BAA0BC,OAAM,YAAY,eAAe,CAAC;AAAA,cACtF;AAAA,YACD,OAAO;AACN,kBACC,KAAK,mBACD,uCAAgB,UACnB;AACD,sBAAM,uBACH,mBAAmB;AAAA,kBACpB;AAAA,kBACA,YAAY;AAAA,gBACb,CAAC;AACF,gBAAAD,KAAI,KAAK,oBAAoB;AAAA,cAC9B,OAAO;AACN,gBAAAA,KAAI;AAAA,kBACH,GAAG,sBAAsB,0BAA0BC,OAAM,UAAU,CAAC;AAAA,gBACrE;AAAA,cACD;AAAA,YACD;AAAA,UACD,OAAO;AACN,gBACC,KAAK,mBAAmB,uCAAgB,UACvC;AACD,cAAAD,KAAI,KAAK,UAAU,IAAI,CAAC;AAAA,YACzB,OAAO;AACN,oBAAM,kBACH,mBAAmB;AAAA,gBACpB;AAAA,gBACA,YAAY;AAAA,cACb,CAAC;AACF,cAAAA,KAAI,KAAK,eAAe;AAAA,YACzB;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF,OAAO;AACN,cAAM,IAAI;AAAA,UACT,yCAAyC,yCAAkB;AAAA,QAC5D;AAAA,MACD;AACA,aAAO,sBAAsB,0BAA0B,YAAY,EAAE;AAAA,QACpE,IAAIA,KAAI,KAAK,GAAG,CAAC;AAAA,MAClB;AAAA,IACD,GAvEkB;AAyElB,UAAM,MAAM,UAAU,IAAI;AAC1B,WAAO;AAAA,EACR;AAEA,SAAO;AACR;AAxHgB;AA0HT,SAAS,mBAA0C,OAGvD;AACF,SAAO,MAAM,iBAAiB,MAAM,WAAW,cAAc,EAAE,MAAM,UAAU;AAChF;AALgB;AAOT,SAAS,yBAAyB,OAGtC;AACF,UAAQ,MAAM,WAAW,gBAAgB;AAAA,IACxC,KAAK,uCAAgB;AACpB,aAAO,MAAM,WAAW;AAAA,IACzB,KAAK,uCAAgB;AACpB,aAAO,gBAAgB;AAAA,QACtB,YAAY,MAAM;AAAA,QAClB,aAAa,MAAM;AAAA,MACpB,CAAC;AAAA,IACF;AACC,aAAO,mBAAmB;AAAA,QACzB,kBAAkB,MAAM;AAAA,QACxB,YAAY,MAAM;AAAA,MACnB,CAAC;AAAA,EACH;AACD;AAlBgB;;;AG7IT,IAAM,cAAc;AAAA,EAC1B,YAAY;AAAA,EACZ,WAAW;AAAA,IACV;AAAA,IACA;AAAA,EAED;AACD;;;AJIA,SAAS,oBAAoB,OAK1B;AACF,SAAO;AAAA,IACJ,kBAAkB,KAAK,EAAE,KAAK,MAAO,CAAC;AAAA;AAE1C;AATS;AAWT,SAAS,eAAe,OAGrB;AACF,UAAI,6CAAqB,MAAM,GAAG,GAAG;AACpC,UAAM,EAAE,SAAAE,UAAS,QAAQ,IAAI,MAAM;AAEnC,WAAO,eAAe;AAAA,MACrB,aAAa,MAAM;AAAA,MACnB,KAAK,gBAAgB,EAAE,SAAS,aAAa,MAAM,YAAY,CAAC;AAAA,MAChE,SAAAA;AAAA,IACD,CAAC;AAAA,EACF,OAAO;AACN,UAAM,EAAE,SAAAA,SAAQ,IAAI,MAAM;AAC1B,WAAOA,SAAQ,IAAI,CAAC,EAAE,QAAQ,MAAM;AACnC,YAAM,EAAE,WAAW,IAAI;AACvB,cAAI,gDAAwB,OAAO,GAAG;AACrC,cAAM,kBAAkB,YAAY,UAAU,mBAAmB;AAAA,UAChE,YAAY,QAAQ;AAAA,UACpB,kBAAkB,MAAM;AAAA,QACzB,CAAC;AAED,eAAO,GAAG,UAAU,KAAK,YAAY,WAAW,0BAA0B,eAAe,YAAY,eAAe,CAAC;AAAA,MACtH,OAAO;AACN,eAAO,GAAG,UAAU,KAAK,YAAY,WAAW,0BAA0B,eAAe,UAAU,CAAC;AAAA,MACrG;AAAA,IACD,CAAC;AAAA,EACF;AACD;AA5BS;AA8BT,SAAS,gBAAgB,OAItB;AACF,SAAO,MAAM,QACX,IAAI,CAAC,EAAE,QAAQ,MAAM;AACrB,YAAI,2CAAmB,OAAO,GAAG;AAChC,YAAM,EAAE,gBAAgB,YAAY,gBAAgB,IAAI;AACxD,YAAMC,QAAO,MAAM,cAAc,WAAW,cAAc;AAE1D,UAAI,QAAQ,mBAAmB,uCAAgB,UAAU;AACxD,cAAM,uBAAuB,YAAY,UAAU,mBAAmB;AAAA,UACrE,YAAY;AAAA,UACZ,kBAAkB,MAAM;AAAA,QACzB,CAAC;AACD,eAAO;AAAA,gBACI,oBAAoB;AAAA;AAAA,MAEhC;AAEA,cAAI,gDAAwB,OAAO,GAAG;AACrC,cAAM,EAAE,WAAW,IAAI;AAEvB,cAAM,uBAAuB,YAAY,UAAU,mBAAmB;AAAA,UACrE;AAAA,UACA,kBAAkB,MAAM;AAAA,QACzB,CAAC;AAED,eAAO,YAAY,WAAW,0BAA0BA,OAAM,iBAAiB,oBAAoB;AAAA,MACpG;AAEA,aAAO,YAAY,WAAW,0BAA0BA,OAAM,eAAe;AAAA,IAC9E,OAAO;AACN,YAAM,EAAE,WAAW,IAAI;AAEvB,YAAM,uBAAuB,YAAY,UAAU,mBAAmB;AAAA,QACrE;AAAA,QACA,kBAAkB,MAAM;AAAA,MACzB,CAAC;AACD,aAAO;AAAA,eACI,oBAAoB;AAAA;AAAA,IAEhC;AAAA,EACD,CAAC;AACH;AA7CS;AA+CT,SAAS,eAAe,OAIrB;AACF,SAAO,MAAM,IACX,IAAI,CAAC,IAAI,UAAU;AACnB,UAAM,OAAO,MAAM,QAAQ,KAAK;AAChC,QAAI,CAAC,MAAM;AACV,YAAM,IAAI,MAAM,iCAAiC;AAAA,IAClD;AACA,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,EAAE,YAAY,eAAe,IAAI;AAEvC,YAAI,gDAAwB,OAAO,GAAG;AACrC,YAAM,EAAE,WAAW,IAAI;AAEvB,YAAM,uBAAuB,YAAY,UAAU,mBAAmB;AAAA,QACrE;AAAA,QACA,kBAAkB,MAAM;AAAA,MACzB,CAAC;AAED,aAAO,GAAG,cAAc;AAAA,wBACJ,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,aAKb,oBAAoB;AAAA;AAAA;AAAA;AAAA,IAI9B,OAAO;AACN,aAAO,GAAG,cAAc;AAAA,wBACJ,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,IAKvB;AAAA,EACD,CAAC;AACH;AAzCS;AA2CT,SAAS,qBAAqB,OAK3B;AACF,QAAM,gBAAgB,MAAM,gBAAgB,aAAa,EAAE,QAAQ,CAAC,MAAM,KAAK,EAAE,CAAC,EAAE,CAAC;AAErF,MAAI,kBAAkB,MAAM;AAC3B,UAAM,IAAI,MAAM,mBAAmB,MAAM,KAAK,EAAE;AAAA,EACjD;AAEA,QAAM,eAAe,MAAM,QAAQ,OAAO,KAAK,CAACC,kBAAiB;AAChE,WAAOA,cAAa,OAAO;AAAA,EAC5B,CAAC;AAED,MAAI,CAAC,cAAc;AAClB,UAAM,IAAI,MAAM,mBAAmB,MAAM,KAAK,EAAE;AAAA,EACjD;AAEA,QAAM,SAAmB,CAAC;AAE1B,eAAa,OAAO,mBAAmB,QAAQ,CAAC,QAAQ;AACvD,UAAM,aAAa,eAAe;AAAA,MACjC;AAAA,MACA,aAAa,MAAM;AAAA,IACpB,CAAC;AAED,WAAO,KAAK,GAAG,UAAU;AAAA,EAC1B,CAAC;AAED,MAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,SAAO,IAAI,OAAO,KAAK,MAAO,CAAC;AAChC;AAlCS;AAoCT,SAAS,kBAAkB,OAKxB;AACF,SAAO,MAAM,QAAQ,OAAO,IAAI,CAACC,WAAU;AAC1C,UAAM,aAAa,MAAM,gBAAgB,eAAe,EAAE,MAAM,CAACA,OAAM,EAAE,EAAE,CAAC,EAAE,CAAC;AAE/E,QAAI,CAAC,YAAY;AAChB,YAAM,IAAI,MAAM,eAAe;AAAA,IAChC;AAEA,WAAO,GAAG,UAAU;AAAA;AAAA,aAET,qBAAqB;AAAA,MAC7B,OAAO;AAAA,MACP,iBAAiB,MAAM;AAAA,MACvB,SAAS,MAAM;AAAA,MACf,aAAa,MAAM;AAAA,IACpB,CAAC,CAAC;AAAA;AAAA,EAEL,CAAC;AACF;AAvBS;AAyBT,SAAS,kBAAkB,OAIxB;AACF,QAAMA,SAAQ,MAAM,gBAAgB,eAAe,EAAE,MAAM,CAAC,iCAAU,EAAE,CAAC,EAAE,CAAC;AAE5E,MAAIA,QAAO;AACV,UAAM,MAAM,qBAAqB;AAAA,MAChC,SAAS,MAAM;AAAA,MACf,aAAa,MAAM;AAAA,MACnB,iBAAiB,MAAM;AAAA,MACvB,OAAOA;AAAA,IACR,CAAC;AAED,WAAO;AAAA,kBACS,GAAG;AAAA;AAAA;AAAA;AAAA,EAIpB;AAEA,SAAO;AAAA;AAAA;AAGR;AAzBS;AA2BF,IAAM,oBAAoB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;;;AK7OO,IAAM,UAAU;AAAA,EACtB,YAAY;AAAA,EACZ,WAAW;AAAA,IACV;AAAA,EACD;AACD;;;ACLO,SAAS,gBAAgB,OAE7B;AACF,QAAM,aAAa,MAAM,QAAQ,OAAO,KAAK,CAACC,WAAU;AACvD,WAAO,QAAQA,OAAM,OAAO,YAAY;AAAA,EACzC,CAAC;AAED,MAAI,YAAY;AACf,WAAO,WAAW;AAAA,EACnB;AAEA,QAAM,aAAa,MAAM,QAAQ,OAAO,CAAC,GAAG;AAE5C,MAAI,CAAC,YAAY;AAChB,UAAM,IAAI,MAAM,eAAe;AAAA,EAChC;AAEA,SAAO;AACR;AAlBgB;;;ACDT,IAAM,QAAQ;AAAA,EACpB,WAAW;AAAA,IACV;AAAA,EACD;AACD;;;AXEO,SAAS,iBAAiB,OAQ9B;AACF,QAAM,EAAE,QAAQ,IAAI;AAEpB,QAAM,eAAe,MAAM,UAAU,gBAAgB;AAAA,IACpD;AAAA,EACD,CAAC;AAED,QAAM,aAAa,MAAM,gBAAgB,eAAe,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;AAEnF,MAAI,eAAe,MAAM;AACxB,UAAM,IAAI,MAAM,iCAAiC;AAAA,EAClD;AAEA,QAAM,IAAI,QAAQ,UAAU,uBAAuB;AAAA,IAClD;AAAA,IACA,WAAW;AAAA,EACZ,CAAC;AACD,QAAM,IAAI,QAAQ,UAAU,uBAAuB;AAAA,IAClD;AAAA,IACA,WAAW;AAAA,EACZ,CAAC;AAED,QAAM,iBAAiB,OAAO,OAAO,CAAC,GAAG,GAAG,CAAC;AAE7C,SAAO;AAAA,IAEN;AAAA,MACC,eAAe,MAAM;AAAA,MACrB,QAAQ,IAAI,MAAM,SAAS,IAAI,KAAK,IAAI,CAAC;AAAA,MACzC,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,eAAe,MAAM,gBAAgB,gBAAgB,EAAE,SAAS;AAAA,MAChE,eAAe,MAAM,gBAAgB,gBAAgB,EAAE,WAAW,MAAM,UAAU,CAAC,EAAE,SAAS;AAAA,MAC9F,gBAAgB,MAAM,gBAAgB,iBAAiB,EAAE,SAAS;AAAA,MAClE,mBAAmB,MAAM,gBAAgB,oBAAoB,EAAE,WAAW,MAAM,UAAU,CAAC,EAAE,SAAS;AAAA,MACtG,YAAY,cAAc,IAAI,SAAS;AAAA,MACvC,aAAa,KAAK,UAAU,cAAc;AAAA,MAC1C,aAAa,MAAM,gBAAgB,eAAe,EAAE,SAAS;AAAA,MAC7D,qBAAqB,MAAM,gBAAgB,kBAAkB,EAAE,SAAS;AAAA,MACxE,sBAAsB,MAAM,gBAAgB,mBAAmB,EAAE,SAAS;AAAA,MAC1E,uBAAuB;AAAA,MACvB,sBAAsB;AAAA,MACtB,eAAe,MAAM,gBAAgB,WAAW,EAAE,SAAS;AAAA,MAC3D,iBAAiB,MAAM,gBAAgB,6BAA6B,EAAE,SAAS;AAAA,IAChF;AAAA,EACD;AACD;AAtDgB;AAwDT,SAAS,gBAAgB,OAA8B;AAC7D,SAAO,2CAA2C,MAAM,SAAS;AAClE;AAFgB;AAIT,SAAS,kBAAkB;AACjC,SAAO;AACR;AAFgB;AAIT,SAAS,mBAAmB;AAClC,SAAO;AACR;AAFgB;AAIT,SAAS,oBAAoB,OAA8B;AACjE,SAAO;AAAA;AAAA,sBAEc,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAMrC;AATgB;AAWT,SAAS,qBAAqB;AACpC,SAAO;AACR;AAFgB;AAIT,SAAS,iBAAiB;AAChC,SAAO;AAAA;AAAA;AAAA,OAGD,8BAA8B,CAAC;AAAA,OAC/B,+BAA+B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAU/B,0CAA0C,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6CAgBN,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASzD;AAxCgB;AA0CT,SAAS,4CAA4C;AAC3D,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQR;AATgB;AAWT,SAAS,gCAAgC;AAC/C,SAAO,GAAG,kCAAkC,CAAC,IAAI,mCAAmC,CAAC;AACtF;AAFgB;AAIT,SAAS,oCAAoC;AACnD,SAAO;AACR;AAFgB;AAIT,SAAS,qCAAqC;AACpD,SAAO;AACR;AAFgB;AAIT,SAAS,iCAAiC;AAChD,SAAO;AACR;AAFgB;AAIT,SAAS,oBAAoB;AACnC,SAAO;AACR;AAFgB;AAIT,SAAS,aAAa;AAC5B,SAAO;AACR;AAFgB;AAIhB,SAAS,+BAA+B;AACvC,SAAO;AAAA;AAAA;AAAA;AAAA;AAKR;AANS;AAQF,IAAM,kBAAkB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;;;AY7LO,IAAM,cAAc;AAAA,EAC1B,YAAY;AACb;;;ACJA,IAAAC,oBAAiC;AAEjC,IAAAC,yBAAoE;AAO7D,SAASC,iBAAgB,OAGrB;AACV,MAAI,MAAM,WAAW,mBAAmB,uCAAgB,UAAU;AACjE,UAAM,EAAE,cAAc,UAAU,IAAI,MAAM,WAAW;AAErD,UAAM,WAAW,UAAU,IAAI,CAAC,QAAQ;AACvC,UAAI,IAAI,mBAAmB,uCAAgB,UAAU;AACpD,eAAOA,iBAAgB;AAAA,UACtB,YAAY;AAAA,UACZ,aAAa,MAAM;AAAA,QACpB,CAAC;AAAA,MACF,OAAO;AACN,eAAO,yBAAyB;AAAA,UAC/B,YAAY;AAAA,UACZ,aAAa,MAAM;AAAA,QACpB,CAAC;AAAA,MACF;AAAA,IACD,CAAC,EAAE,KAAK,IAAI;AAEZ,WAAO;AAAA,4CACmC,YAAY;AAAA,mBACrC,QAAQ;AAAA;AAAA,EAE1B,OAAO;AACN,WAAO,yBAAyB;AAAA,MAC/B,YAAY,MAAM;AAAA,MAClB,aAAa,MAAM;AAAA,IACpB,CAAC;AAAA,EACF;AACD;AA/BgB,OAAAA,kBAAA;AAiCT,SAAS,0BAA0B,OAGvC;AACF,QAAM,EAAE,cAAc,QAAQ,IAAI;AAClC,QAAM,cAAc,QAAQ,IAAI,YAAU,IAAI,OAAO,UAAU,GAAG;AAElE,MAAI,CAAC,aAAc,QAAO;AAE1B,SAAO;AAAA;AAAA;AAAA,sBAGc,YAAY,KAAK,GAAG,CAAC;AAAA,sBACrB,gCAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMhC,gCAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMhC,gCAAgC;AAAA;AAAA;AAAA,8FAGwC,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,WAK/F,gCAAgC;AAAA,mEACyB,YAAY;AAAA;AAAA,gBAEhE,gCAAgC;AAAA,sEACuB,YAAY;AAAA;AAAA;AAAA;AAInF;AAzCgB;AA2CT,SAAS,wBAAwB,OAMrC;AACF,QAAM,EAAE,cAAAC,eAAc,SAAS,iBAAiB,iBAAiB,aAAAC,aAAY,IAAI;AACjF,QAAM,gBAAgBD;AACtB,QAAM,UAAU,QAAQ,OAAO,QAAQ,CAAAE,WAASA,OAAM,OAAO,WAAW,CAAC,CAAC;AAC1E,QAAM,SAAS,QAAQ,OAAO,QAAQ,CAAAA,WAASA,OAAM,OAAO,UAAU,CAAC,CAAC;AAExE,QAAM,aAAa,oBAAI,IAAY;AAEnC,QAAM,mBAAmB,wBAAC,UAAkB,QAAQ,MAAM;AACzD,UAAM,iBAAiB,QAAQ,KAAK,SAAO,IAAI,eAAe,QAAQ;AACtE,UAAM,iBAAiB,OAAO,KAAK,SAAO,IAAI,eAAe,QAAQ;AACrE,UAAM,sBAAsB,OAAO,OAAO,oCAAkB,QAAQ,MAAM,QAAQ,cAAc,KAAK,QAAQ,cAAc;AAE3H,QAAI,WAAW,IAAI,QAAQ,GAAG;AAC7B,YAAM,IAAI,UAAU,uBAAuB,QAAQ,kBAAkB;AAAA,IACtE;AAAC;AACD,QAAI,qBAAqB;AACxB,YAAM,IAAI,UAAU,uBAAuB,QAAQ,kDAAkD;AAAA,IACtG;AACA,QAAI,kBAAkB,CAAC,gBAAgB,MAAM;AAC5C,YAAM,IAAI,UAAU,uBAAuB,QAAQ,2DAA2D;AAAA,IAC/G;AAEA,UAAM,eAAe,gBAAgB,IAAI,QAAQ,KAAK,oBAAI,IAAI;AAE9D,eAAW,OAAO,cAAc;AAC/B,UAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACzB,yBAAiB,KAAK,QAAQ,CAAC;AAAA,MAChC;AAAA,IACD;AACA,QAAI,gBAAgB;AACnB,oBAAc,KAAK,gCAAgC,QAAQ,MAAM,gCAAgC,KAAK,QAAQ,MAAM;AACpH,iBAAW,IAAI,QAAQ;AAAA,IACxB,WAAW,gBAAgB;AAC1B,YAAM,eAAeH,iBAAgB;AAAA,QACpC,YAAY,eAAe;AAAA,QAC3B,aAAAE;AAAA,MACD,CAAC;AACD,oBAAc,KAAK,gCAAgC,QAAQ,eAAe,eAAe,UAAU,KAAK,IAAI,CAAC;AAAA,eACjG,YAAY;AAAA,SAClB;AACN,iBAAW,IAAI,QAAQ;AAAA,IACxB;AAAC;AAAA,EACF,GAnCyB;AAqCzB,aAAW,YAAY,gBAAgB,KAAK,GAAG;AAC9C,QAAI,CAAC,WAAW,IAAI,QAAQ,GAAG;AAC9B,uBAAiB,QAAQ;AAAA,IAC1B;AAAA,EACD;AAEA,SAAO;AACR;AA1DgB;;;ACnFT,IAAM,YAAY;AAAA,EACxB,YAAY;AAAA,EACZ,WAAW;AAAA,IACV;AAAA,EACD;AACD;;;ACPA,IAAAE,yBAAmD;AAI5C,SAAS,qBAAqB,OAIlC;AACF,QAAM,UAAU,MAAM,QAAQ,OAAO,QAAQ,CAAAC,WAASA,OAAM,OAAO,WAAW,CAAC,CAAC;AAChF,QAAM,UAAU,MAAM,QAAQ,OAAO,QAAQ,CAAAA,WAASA,OAAM,OAAO,UAAU,CAAC,CAAC;AAE/E,QAAM,kBAAkB,wBAAC,YAA2C,gBAAwB;AAC3F,UAAM,EAAE,cAAc,UAAU,IAAI,WAAW;AAE/C,QAAI,CAAC,MAAM,gBAAgB,IAAI,WAAW,GAAG;AAC5C,YAAM,gBAAgB,IAAI,aAAa,oBAAI,IAAI,CAAC;AAAA,IACjD;AAEA,UAAM,gBAAgB,IAAI,WAAW,EAAG,IAAI,YAAY;AAExD,eAAW,OAAO,WAAW;AAC5B,UAAI,IAAI,mBAAmB,YAAY;AACtC,wBAAgB,KAAK,WAAW;AAAA,MACjC;AAAA,IACD;AAAA,EACD,GAdwB;AAgBxB,UAAQ,QAAQ,CAAC,WAAW;AAC3B,QAAI,CAAC,MAAM,gBAAgB,IAAI,OAAO,UAAU,GAAG;AAClD,YAAM,gBAAgB,IAAI,OAAO,YAAY,oBAAI,IAAI,CAAC;AAAA,IACvD;AAAA,EACD,CAAC;AAED,aAAW,UAAU,SAAS;AAC7B,QAAI,OAAO,WAAW,mBAAmB,uCAAgB,UAAU;AAClE,sBAAgB,OAAO,YAAY,OAAO,UAAU;AAAA,IACrD;AAAA,EACD;AACA,SAAO;AAAA,IACN,SAAS,MAAM;AAAA,IACf,iBAAiB,MAAM;AAAA,EACxB;AACD;AAvCgB;AAyCT,SAAS,2BAA2B,OAExC;AACF,QAAM,SAAS,aAAa;AAAA,IAC3B,iBAAiB,MAAM;AAAA,EACxB,CAAC;AACD,MAAI,OAAO,SAAS,GAAG;AACtB,UAAM,eAAe,OAAO,IAAI,WAAS,MAAM,KAAK,MAAM,CAAC;AAC3D,UAAM,IAAI,MAAM;AAAA,EAA0D,aAAa,KAAK,IAAI,CAAC,EAAE;AAAA,EACpG;AACD;AAVgB;AAYT,SAAS,aAAa,OAEd;AACd,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,iBAAiB,oBAAI,IAAY;AACvC,QAAM,SAAqB,CAAC;AAE5B,QAAM,MAAM,wBAAC,MAAcC,QAAiB,CAAC,MAAe;AAC3D,QAAI,CAAC,QAAQ,IAAI,IAAI,GAAG;AACvB,cAAQ,IAAI,IAAI;AAChB,qBAAe,IAAI,IAAI;AAEvB,YAAM,YAAY,MAAM,gBAAgB,IAAI,IAAI,KAAK,oBAAI,IAAI;AAC7D,iBAAW,YAAY,WAAW;AACjC,YAAI,CAAC,QAAQ,IAAI,QAAQ,GAAG;AAC3B,cAAI,IAAI,UAAU,CAAC,GAAGA,OAAM,IAAI,CAAC,GAAG;AACnC,mBAAO;AAAA,UACR;AAAA,QACD,WAAW,eAAe,IAAI,QAAQ,GAAG;AACxC,iBAAO,KAAK,CAAC,GAAGA,OAAM,MAAM,QAAQ,CAAC;AACrC,iBAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAEA,mBAAe,OAAO,IAAI;AAC1B,WAAO;AAAA,EACR,GApBY;AAsBZ,aAAW,QAAQ,MAAM,gBAAgB,KAAK,GAAG;AAChD,QAAI,CAAC,QAAQ,IAAI,IAAI,GAAG;AACvB,UAAI,IAAI;AAAA,IACT;AAAA,EACD;AAEA,SAAO;AACR;AApCgB;;;ACtDhB,IAAM,YAAY,wBAAC,EAAE,KAAK,MAAM,MAAsB,YAAY,MAAM,KAAK,IAAI,CAAC,YAAY,GAAG;AAAA,GAA/E;AAClB,IAAM,qBAAqB,wBAAC,EAAE,KAAK,MAAM,MAAsB,eAAe,MAAM,CAAC,CAAC,UAAU,GAAG;AAAA,GAAxE;AAE3B,IAAM,uBAAuB,wBAAC,eAAyB,kBAA8D;AACpH,MAAIC,WAAU;AAEd,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,aAAa,GAAG;AACzD,IAAAA,YAAW,cAAc,EAAE,KAAK,MAAM,CAAC;AAAA,EACxC;AACA,SAAOA;AACR,GAP6B;AAStB,SAAS,eAAe,OAA8B;AAC5D,SAAO,qBAAqB,MAAM,SAAS,SAAS;AACrD;AAFgB;AAIT,SAAS,UAAU,OAAkD;AAC3E,MAAI,CAAC,MAAM,iBAAkB,QAAO;AACpC,SAAO,qBAAqB,MAAM,kBAAkB,kBAAkB;AACvE;AAHgB;AAKT,IAAM,oBAAoB;AAAA,EAChC;AAAA,EACA;AACD;;;ACtBO,IAAM,UAAU;AAAA,EACtB,YAAY;AAAA,IACX,gBAAgB,kBAAkB;AAAA,IAClC,WAAW,kBAAkB;AAAA,EAC9B;AAAA,EACA,WAAW;AAAA,IACV;AAAA,IACA;AAAA,EACD;AACD;;;ACRO,SAAS,iBAAiB,MAAwB;AACxD,QAAM,MAA8B,CAAC;AACrC,SAAO,KAAK,IAAI,EAAE,QAAQ,CAAC,QAAgB;AAC1C,QAAI,GAAG,IAAI;AAAA,EACZ,CAAC;AACD,SAAO;AACR;AANgB;AAQT,SAAS,kBAAkB,OAS/B;AACF,MAAIC,gBAA8B,CAAC;AACnC,EAAAA,cAAa;AAAA,IACZ,mCAAmC,KAAK,UAAU,MAAM,gBAAgB,cAAc,GAAG,MAAM,CAAC,CAAC;AAAA,EAClG;AACA,EAAAA,cAAa;AAAA,IACZ,oCAAoC,KAAK,UAAU,MAAM,iBAAiB,cAAc,GAAG,MAAM,CAAC,CAAC;AAAA,EACpG;AACA,MAAI,OAAO,KAAK,MAAM,gBAAgB,cAAc,CAAC,EAAE,SAAS,GAAG;AAClE,IAAAA,cAAa;AAAA,MACZ,kCAAkC,KAAK,UAAU,MAAM,gBAAgB,cAAc,GAAG,MAAM,CAAC,CAAC;AAAA,IACjG;AACA,IAAAA,cAAa;AAAA,MACZ;AAAA;AAAA;AAAA,IAGD;AAAA,EACD;AACA,EAAAA,cAAa,KAAK,6DAA6D;AAC/E,EAAAA,cAAa,KAAK;AAClB,UAAQ,UAAU,2BAA2B;AAAA,IAC5C,iBAAiB,MAAM;AAAA,EACxB,CAAC;AACD,EAAAA,gBAAe,UAAU,UAAU,wBAAwB;AAAA,IAC1D,SAAS,MAAM;AAAA,IACf,aAAa,MAAM;AAAA,IACnB,iBAAiB,MAAM;AAAA,IACvB,cAAAA;AAAA,IACA,iBAAiB,MAAM;AAAA,EACxB,CAAC;AACD,SAAOA;AACR;AAxCgB;;;ACbhB,IAAAC,yBAA2C;AAKpC,SAAS,qBAAqB,OAKlC;AACF,QAAM,OAAiC,CAAC;AAGxC,SACE,QAAQ,MAAM,WAAW,EACzB,QAAQ,CAAC,CAAC,KAAK,UAAU,MAAM;AAC/B,UAAM,WAAW,MAAM,gBAAgB,eAAe,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;AAExE,eAAW,YAAY,QAAQ,CAAC,EAAE,OAAO,MAAM;AAC9C,YAAM,cAAc,MAAM,iBAAiB,gBAAgB;AAAA,QAC1D,MAAM;AAAA,MACP,CAAC,EAAE,CAAC;AACJ,UAAI,CAAC,YAAa,OAAM,IAAI,MAAM,UAAU,MAAM,YAAY;AAC9D,UAAI,CAAC,SAAU,OAAM,IAAI,MAAM,SAAS,GAAG,YAAY;AAEvD,UAAI,CAAC,KAAK,WAAW,GAAG;AACvB,aAAK,WAAW,IAAI,CAAC;AAAA,MACtB;AACA,UAAI,CAAC,KAAK,WAAW,EAAE,SAAS,QAAQ,GAAG;AAC1C,aAAK,WAAW,EAAE,KAAK,QAAQ;AAAA,MAChC;AAAA,IACD,CAAC;AAAA,EACF,CAAC;AAGF,QAAM,MAAM,OAAO,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,cAAc,MAAM;AACpE,UAAM,kBAAmB,eAAe,SAAS,IAAK;AAAA,wBAA4B,MAAM,YAAY,KAAK,QAAQ,MAAM;AACvH,WAAO;AAAA,MACH,QAAQ;AAAA,eACC,cAAc,IAAI,eAAe;AAAA;AAAA;AAAA,EAG/C,CAAC,EAAE,KAAK,KAAK;AAEb,SAAO;AACR;AAzCgB;AA2CT,SAAS,8BAA8B,OAI3C;AACF,QAAM,2BAA2D,CAAC;AAElE,SAAO,QAAQ,MAAM,QAAQ,WAAW,EAAE,QAAQ,CAAC,CAACC,QAAO,WAAW,MAAM;AAC3E,QAAIA,WAAU,mCAAY;AACzB,YAAM,UAAU,OAAO,QAAQ,WAAW;AAC1C,cAAQ,QAAQ,CAAC,CAACA,QAAO,MAAM,MAAM;AACpC,eAAO,YAAY,QAAQ,CAAC,EAAE,QAAAC,QAAO,MAAM;AAC1C,mCAAyBD,MAAK,IAAI;AAAA,YACjC,aAAa,CAAC,EAAE,QAAAC,SAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,UACnC;AAAA,QACD,CAAC;AAAA,MACF,CAAC;AAAA,IACF;AAAA,EACD,CAAC;AAED,SAAO,OAAO,QAAQ,MAAM,QAAQ,WAAW,EAAE,IAAI,CAAC,CAAC,cAAc,WAAW,MAAM;AACrF,UAAM,4BAA4B;AAAA,MACjC,GAAG;AAAA,MACH,GAAG;AAAA,IACJ;AAEA,UAAM,QAAQ,MAAM,gBAAgB,eAAe,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;AAC9E,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,SAAS,YAAY,YAAY;AAE7D,WAAO,GAAG,KAAK,MAAM,qBAAqB;AAAA,MACzC,cAAc;AAAA,MACd,aAAa;AAAA,MACb,iBAAiB,MAAM;AAAA,MACvB,kBAAkB,MAAM;AAAA,IACzB,CAAC,EAAE,OAAO,KAAM,CAAC;AAAA,EAClB,CAAC;AACF;AApCgB;AAsCT,SAAS,oBAAoB,OAEzB;AACV,SAAO,MAAM,aAAa,KAAK,IAAI;AACpC;AAJgB;AAMT,SAAS,cAAc,OAE3B;AACF,SAAO,sBAAsB,KAAK,UAAU,iBAAiB,MAAM,iBAAiB,cAAc,CAAC,GAAG,MAAM,CAAC,CAAC;AAC/G;AAJgB;AAMT,SAAS,aAAa,OAE1B;AACF,SAAO,qBAAqB,KAAK,UAAU,iBAAiB,MAAM,gBAAgB,cAAc,CAAC,GAAG,MAAM,CAAC,CAAC;AAC7G;AAJgB;AAMT,IAAM,2BAA2B,wBAAC,UAEnC;AACL,SAAO,mCAAmC,MAAM,aAAa,KAAK,GAAG,CAAC;AACvE,GAJwC;AAMjC,SAAS,0BAA0B,OAKvC;AACF,SAAO,uCAAuC,MAAM,uBAAuB,8BAA8B;AAAA,IACxG,SAAS,MAAM;AAAA,IACf,iBAAiB,MAAM;AAAA,IACvB,kBAAkB,MAAM;AAAA,EACzB,CAAC,EAAE,KAAK,KAAM,CAAC;AAChB;AAXgB;AAaT,SAAS,8BAA8B;AAC7C,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,2BAA2B;AACtC,QAAM,KAAK,+CAA+C;AAC1D,QAAM,KAAK,mCAAmC;AAC9C,SAAO,MAAM,KAAK,IAAI;AACvB;AANgB;AAQT,SAAS,iCAAiC,OAE9C;AACF,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,qBAAqB;AAChC,QAAM,KAAK,wBAAyB;AACpC,QAAM,KAAK,uDAAwD,SAAS,IAAI;AAChF,QAAM,KAAK,2DAA4D,SAAS,sBAAsB;AACtG,QAAM,KAAK,yDAA0D,SAAS,IAAI;AAClF,QAAM,KAAK,6DAA8D,SAAS,uBAAuB;AACzG,QAAM,KAAK,mDAAoD,SAAS,IAAI;AAC5E,QAAM,KAAK,4BAA6B;AACxC,QAAM,KAAK,GAAG;AACd,SAAO,MAAM,KAAK,IAAI;AACvB;AAfgB;AAiBT,SAAS,4CAA4C;AAC3D,SAAO;AACR;AAFgB;AAIT,SAAS,2CAA2C;AAC1D,SAAO;AACR;AAFgB;AAIT,IAAM,yBAAyB;AAAA,EACrC,0BAA0B;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;;;ACtKO,IAAM,eAAe;AAAA,EAC3B,YAAY;AAAA,EACZ,WAAW;AAAA,IACV;AAAA,EACD;AACD;;;ACRA,IAAAC,yBAAsI;AAI/H,SAAS,aAAa,GAAeC,cAAgC;AAC3E,UAAI,mCAAW,CAAC,GAAG;AAClB,MAAE,UAAU,EAAE,QAAQ,IAAI,QAAM;AAAA,MAC/B,SAAS;AAAA,QACR,GAAG,EAAE;AAAA,QACL,gBAAgB,uCAAgB;AAAA,MACjC;AAAA,IACD,EAAE;AAAA,EACH;AACA,SAAO;AAAA,6BACqB,EAAE,UAAU;AAAA;AAAA,MAEnC,aAAa,EAAE,OAAO,GAAG,aAAAA,aAAY,CAAC,CAAC;AAAA;AAAA;AAG7C;AAfgB;AAiBT,SAAS,aAAa,OAGlB;AACV,QAAM,EAAE,OAAO,aAAAA,aAAY,IAAI;AAC/B,UAAI,mCAAW,KAAK,GAAG;AACtB,WAAO,QAAQ,WAAW,eAAe;AAAA,MACxC,aAAAA;AAAA,MACA,KAAK,QAAQ,WAAW,gBAAgB,EAAE,SAAS,MAAM,SAAS,YAAY,WAAW,aAAAA,aAAY,CAAC;AAAA,MACtG,SAAS,MAAM;AAAA,IAChB,CAAC,EAAE,SAAS;AAAA,EACb,eAAW,uCAAe,KAAK,GAAG;AACjC,WAAO,QAAQ,WAAW,eAAe;AAAA,MACxC,aAAAA;AAAA,MACA,KAAK,QAAQ,WAAW,gBAAgB,EAAE,SAAS,MAAM,MAAM,YAAY,WAAW,aAAAA,aAAY,CAAC;AAAA,MACnG,SAAS,MAAM;AAAA,IAChB,CAAC,EAAE,SAAS;AAAA,EACb,OAAO;AACN,WAAO;AAAA,EACR;AACD;AApBgB;AAsBT,SAAS,iBAAiB,OAG9B;AACF,QAAM,EAAE,OAAO,aAAAA,aAAY,IAAI;AAC/B,UAAI,4CAAoB,KAAK,GAAG;AAC/B,WAAO,QAAQ,WAAW,eAAe;AAAA,MACxC,aAAAA;AAAA,MACA,KAAK,QAAQ,WAAW,gBAAgB,EAAE,SAAS,MAAM,MAAM,YAAY,QAAQ,aAAAA,aAAY,CAAC;AAAA,MAChG,SAAS,MAAM;AAAA,IAChB,CAAC,EAAE,SAAS;AAAA,EACb,eAAW,+CAAuB,KAAK,GAAG;AACzC,WAAO,QAAQ,WAAW,eAAe;AAAA,MACxC,aAAAA;AAAA,MACA,KAAK,QAAQ,WAAW,gBAAgB,EAAE,SAAS,MAAM,SAAS,YAAY,QAAQ,aAAAA,aAAY,CAAC;AAAA,MACnG,SAAS,MAAM;AAAA,IAChB,CAAC,EAAE,SAAS;AAAA,EACb,OAAO;AACN,WAAO;AAAA,EACR;AACD;AApBgB;;;ACvCT,SAAS,iBAAiB,OAG9B;AACF,QAAM,EAAE,QAAQ,IAAI;AACpB,SAAO,QAAQ,OAAO,IAAI,CAAAC,WAAS,oBAAoBA,QAAO,KAAK,CAAC,EAAE,KAAK,IAAI;AAChF;AANgB;AAQT,SAAS,kBAAkB,OAG/B;AACF,QAAM,EAAE,QAAQ,IAAI;AACpB,SAAO,QAAQ,OAAO,IAAI,CAAAA,WAAS,sBAAsBA,QAAO,KAAK,CAAC,EAAE,KAAK,IAAI;AAClF;AANgB;AAQT,SAAS,oBAAoBA,QAA6B,OAE9D;AACF,QAAM,EAAE,aAAAC,aAAY,IAAI;AACxB,QAAM,gBAAgBD,OAAM,OAAO;AACnC,MAAI,iBAAiB,cAAc,SAAS,GAAG;AAC9C,WAAO;AAAA,wBACeA,OAAM,EAAE;AAAA,MAC1B,uBAAuB,EAAE,QAAQ,eAAe,aAAAC,aAAY,CAAC,CAAC;AAAA;AAAA,EAEnE,OAAO;AACN,WAAO;AAAA,EACR;AACD;AAbgB;AAeT,SAAS,sBAAsBD,QAA6B,OAGhE;AACF,SAAOA,OAAM,OAAO,WAAW,IAAI,WAAS,qBAAqB,OAAO,KAAK,CAAC,EAAE,KAAK,KAAK,KAAK;AAChG;AALgB;AAOhB,SAAS,qBAAqB,OAAwB,OAEnD;AACF,QAAM,EAAE,aAAAC,aAAY,IAAI;AACxB,SAAO;AAAA,2BACmB,MAAM,UAAU;AAAA,UACjC,wBAAwB,EAAE,OAAO,aAAAA,aAAY,CAAC,CAAC;AAAA;AAEzD;AARS;AAUT,SAAS,uBAAuB,OAG7B;AACF,QAAM,EAAE,QAAAC,SAAQ,aAAAD,aAAY,IAAI;AAChC,SAAO;AAAA;AAAA,KAEHC,QAAO,IAAI,OAAK,aAAa,GAAGD,YAAW,CAAC,EAAE,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAK9D;AAZS;AAcT,SAAS,wBAAwB,OAG9B;AACF,QAAM,EAAE,OAAO,aAAAA,aAAY,IAAI;AAC/B,SAAO;AAAA;AAAA;AAAA,gCAGwB,MAAM,UAAU;AAAA;AAAA,MAE1C,iBAAiB,EAAE,OAAO,aAAAA,aAAY,CAAC,CAAC;AAAA;AAAA;AAAA;AAI9C;AAdS;;;AC9DT,SAAS,oBAAoB,OAM1B;AACF,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,kDAAkD;AAC7D,QAAM,KAAK,iBAAiB,KAAK,CAAC;AAClC,QAAM,KAAK,kBAAkB,KAAK,CAAC;AACnC,SAAO,MAAM,KAAK,IAAI;AACvB;AAZS;AAcT,SAAS,gCAAgC;AACxC,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,4CAA4C;AACvD,QAAM,KAAK,uCAAuC;AAClD,QAAM,KAAK,8BAA8B;AACzC,QAAM,KAAK,qBAAqB,yBAAyB,CAAC,EAAE;AAC5D,QAAM,KAAK,yBAAyB,CAAC;AACrC,QAAM,KAAK,+BAA+B;AAC1C,QAAM,KAAK,GAAG;AACd,SAAO,MAAM,KAAK,IAAI;AACvB;AAVS;AAYT,SAAS,2BAA2B;AACnC,SAAO;AAAA;AAAA;AAAA;AAAA;AAKR;AANS;AAQT,SAAS,2BAA2B;AACnC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCR;AAnCS;AAqCF,IAAM,mBAAmB;AAAA,EAC/B;AAAA,EACA;AACD;;;AC5EO,IAAM,SAAS;AAAA,EACrB,YAAY;AACb;;;ACFA,IAAAE,yBAAoD;AAIpD,IAAM,SAAS,IAAI,qCAAc;AAQ1B,SAAS,cAAc,OAK3B;AACF,QAAM,EAAE,QAAQ,IAAI;AAEpB,QAAM,UAAU,OACd,QAAQ,QAAQ,YAAY,EAC5B,IAAI,CAAC,CAAC,WAAW,YAAY,MAAM,kBAAkB,WAAW,cAAc,KAAK,CAAC,EACpF,OAAO,SAAO,QAAQ,IAAI;AAE5B,QAAM,qBAAqB,OAAO,YAAY,OAAO;AAErD,SAAO;AACR;AAhBgB;AAkBhB,SAAS,kBACR,WACA,cACA,OAK2C;AAC3C,QAAM,EAAE,gBAAgB,IAAI;AAC5B,QAAM,kBAAkB,gBAAgB,cAAc,EAAE,SAAS;AACjE,MAAI,CAAC,iBAAiB;AACrB,UAAM,IAAI,MAAM,oBAAoB,SAAS,EAAE;AAAA,EAChD;AACA,QAAM,wBAAwB,OAC5B,QAAQ,YAAY,EACpB,IAAI,CAAC,CAAC,YAAY,YAAY,MAAM,kBAAkB,YAAY,aAAa,QAAQ,KAAK,CAAC,EAC7F,OAAO,SAAO,QAAQ,IAAI;AAE5B,MAAI,CAAC,yBAAyB,sBAAsB,WAAW,EAAG,QAAO;AAEzE,QAAM,kBAAkB,OAAO,YAAY,qBAAqB;AAChE,SAAO,CAAC,iBAAiB,eAAe;AACzC;AAvBS;AAyBT,SAAS,kBACR,QACA,QACA,OAK0B;AAC1B,QAAM,EAAE,iBAAiB,IAAI;AAC7B,QAAM,WAAW,iBAAiB,cAAc,EAAE,MAAM;AACxD,MAAI,CAAC,UAAU;AACd,UAAM,IAAI,MAAM,qBAAqB,MAAM,EAAE;AAAA,EAC9C;AACA,QAAM,4BAA4B,OAChC,IAAI,iBAAe,6BAA6B,aAAa,KAAK,CAAC,EACnE,OAAO,SAAO,OAAO,IAAI;AAC3B,QAAM,YAAY,oBAAoB,yBAAyB;AAE/D,MAAI,CAAC,UAAW,QAAO;AAEvB,SAAO,CAAC,UAAU,SAAS;AAC5B;AAtBS;AAwBT,SAAS,oBAAoB,2BAA4C;AACxE,MAAI,CAAC,6BAA6B,0BAA0B,WAAW,EAAG,QAAO;AACjF,SAAO;AAAA,IAEL,0BAA0B,IAAI,CAAC,YAAY,UAAU;AAAA,kBACtC,QAAQ,CAAC;AAAA,QACnB,UAAU;AAAA;AAAA,eAEH,QAAQ,CAAC,iBAAiB,QAAQ,CAAC;AAAA,IAC9C,EAAE,KAAK,EAAE,CACX;AAAA;AAAA;AAGF;AAbS;AAeT,SAAS,6BACR,aACA,OAIC;AACD,QAAM,EAAE,OAAO,OAAAC,OAAM,IAAI;AACzB,QAAM,oBAAoB,MAAM,gBAAgB,cAAc,EAAEA,MAAK;AACrE,MAAI,CAAC,mBAAmB;AACvB,UAAM,IAAI,MAAM,oBAAoBA,MAAK,EAAE;AAAA,EAC5C;AAEA,QAAM,aAAa,MACjB,IAAI,aAAW,oBAAoB,SAAS,EAAE,kBAAkB,MAAM,YAAY,CAAC,CAAC,EACpF,IAAI,CAAC,MAAM,UAAU,aAAa,QAAQ,CAAC,MAAM,IAAI,GAAG;AAE1D,MAAI,WAAW,WAAW,EAAG,QAAO;AAEpC,aAAW;AAAA,IAAK;AAAA,OACV,WAAW,IAAI,CAAC,GAAG,UAAU,OAAO,QAAQ,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;AAAA,YACjE,iBAAiB;AAAA;AAAA;AAAA,EAG5B;AACA,SAAO,WAAW,KAAK,IAAI;AAC5B;AA1BS;AAmCT,SAAS,oBAAoB,SAAiB,OAE3C;AACF,QAAM,EAAE,iBAAiB,IAAI;AAC7B,MAAI;AACH,UAAM,iBAAiB,IAAI,OAAO;AAClC,UAAM,sBAAsB,OAAO,MAAM,cAAc;AAEvD,QAAI,CAAC,oBAAoB,cAAc,KAAC,6CAAqB,oBAAoB,UAAU,GAAG;AAC7F,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACvC;AACA,UAAM,kBAAkB,YAAY,UAAU,mBAAmB;AAAA,MAChE,YAAY,oBAAoB;AAAA,MAChC;AAAA,IACD,CAAC;AACD,WAAO;AAAA,EACR,QAAQ;AACP,WAAO;AAAA,EACR;AACD;AAnBS;;;AC/HT,SAAS,kBAAkB,OAKxB;AACF,QAAM,kBAAkB,cAAc,KAAK;AAC3C,QAAM,UAAU,OAAO,QAAQ,eAAe;AAC9C,MAAI,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;AAC7C,SAAO;AAAA,IACJ,OAAO,QAAQ,eAAe,EAC9B,IAAI,CAAC,CAAC,SAAS,UAAU,MAAM,GAAG,OAAO,OAAO,sBAAsB,UAAU,CAAC,IAAI,EACrF,KAAK,KAAK,CAAC;AAAA;AAEf;AAdS;AAgBT,SAAS,sBAAsB,YAE5B;AACF,SAAO,OAAO,QAAQ,UAAU,EAAE,IAAI,CAAC,CAAC,UAAU,SAAS,MAAM,GAAG,QAAQ,KAAK,SAAS,EAAE,EAAE,KAAK,KAAK;AACzG;AAJS;AAMF,IAAM,aAAa;AAAA,EACzB;AACD;;;AC1BO,IAAM,QAAQ;AAAA,EACpB;AACD;;;ACMO,IAAM,qBAAqB;AAAA,EACjC,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;;;A7BHO,IAAM,oBAAN,MAA2E;AAAA,EAjBlF,OAiBkF;AAAA;AAAA;AAAA,EACjF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAkC;AAAA,EAElC;AAAA,EACU,mBAAwC,CAAC;AAAA,EACzC,UAAoB;AAAA,IAC7B,iBAAiB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,YAAY,EAAE,SAAS,WAAW,kBAAkB,GAAkB;AACrE,SAAK,kBAAkB,IAAI,sCAAqB;AAChD,SAAK,mBAAmB,IAAI,uCAAsB;AAClD,SAAK,kBAAkB,IAAI,sCAAqB;AAEhD,SAAK,UAAU;AAEf,SAAK,YAAY;AAEjB,SAAK,UAAU,QAAQ,OAAO,QAAQ,CAAAC,WAASA,OAAM,OAAO,WAAW,CAAC,CAAC;AACzE,SAAK,UAAU,QAAQ,OAAO,QAAQ,CAAAA,WAASA,OAAM,OAAO,UAAU,CAAC,CAAC;AAExE,SAAK,cAAc,mBAAmB,YAAY,UAAU,iBAAiB;AAAA,MAC5E,WAAW,KAAK;AAAA,IACjB,CAAC;AAED,UAAM,6BAA6B,mBAAmB,QAAQ,UAAU,qBAAqB;AAAA,MAC5F,iBAAiB,oBAAI,IAAI;AAAA,MACzB,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,IACf,CAAC;AACD,SAAK,UAAU,2BAA2B;AAE1C,SAAK,kBAAkB,2BAA2B;AAElD,SAAK,eAAe,CAAC;AACrB,SAAK,sBAAsB,CAAC;AAC5B,SAAK,eAAe,CAAC;AACrB,SAAK,qBAAqB,CAAC;AAE3B,QAAI,kBAAkB,MAAM;AAC3B,WAAK,mBAAmB;AAAA,QACvB,CAAC,kBAAkB,IAAI,GAAG,CAAC,gCAAgC;AAAA,MAC5D;AACA,WAAK,eAAe,kBAAkB;AAAA,IACvC;AAEA,qBAAiB,SAAS,KAAK,iBAAiB,KAAK,kBAAkB,KAAK,eAAe;AAE3F,SAAK,eAAe,mBAAmB,aAAa,UAAU,kBAAkB;AAAA,MAC/E,iBAAiB,KAAK;AAAA,MACtB,SAAS,KAAK;AAAA,MACd,kBAAkB,KAAK;AAAA,MACvB,kBAAkB,KAAK;AAAA,MACvB,iBAAiB,KAAK;AAAA,MACtB,iBAAiB,KAAK;AAAA,MACtB;AAAA,MACA,SAAS,KAAK;AAAA,IACf,CAAC;AAAA,EACF;AAAA,EAEO,QAAQ,SAA4D;AAC1E,UAAM,QAAQ;AAAA,MACb,SAAS,KAAK;AAAA,MACd,kBAAkB,KAAK;AAAA,MACvB,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,MACd,iBAAiB,KAAK;AAAA,MACtB,kBAAkB,KAAK;AAAA,MACvB,iBAAiB,KAAK;AAAA,MACtB,aAAa,KAAK;AAAA,MAClB,cAAc,gBAAgB,KAAK,SAAS,KAAK,eAAe;AAAA,MAChE,wBAAwB,mBAAmB,aAAa;AAAA,MACxD,iBAAiB,mBAAmB,MAAM;AAAA,MAC1C,WAAW,QAAQ;AAAA,MACnB,SAAS,KAAK;AAAA,MACd,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,IACf;AACA,WAAO;AAAA,KACJ,mBAAmB,QAAQ,WAAW,eAAe,KAAK,CAAC;AAAA,KAC3D,mBAAmB,QAAQ,WAAW,UAAU,KAAK,CAAC;AAAA,KACtD,mBAAmB,UAAU,WAAW,KAAK,CAAC;AAAA,KAC9C,mBAAmB,aAAa,WAAW,oBAAoB,KAAK,CAAC;AAAA,KACrE,mBAAmB,OAAO,WAAW,oBAAoB,KAAK,CAAC;AAAA,KAC/D,mBAAmB,OAAO,WAAW,8BAA8B,CAAC;AAAA,KACpE,mBAAmB,aAAa,WAAW,cAAc,KAAK,CAAC;AAAA,KAC/D,mBAAmB,aAAa,WAAW,aAAa,KAAK,CAAC;AAAA,KAC9D,mBAAmB,aAAa,WAAW,yBAAyB,KAAK,CAAC;AAAA,KAC1E,mBAAmB,QAAQ,WAAW,kBAAkB,KAAK,CAAC;AAAA,KAC9D,mBAAmB,QAAQ,WAAW,oBAAoB,KAAK,CAAC;AAAA,KAChE,mBAAmB,MAAM,WAAW,kBAAkB,KAAK,CAAC;AAAA,KAC5D,mBAAmB,aAAa,WAAW,0BAA0B,KAAK,CAAC;AAAA,KAC3E,mBAAmB,MAAM,WAAW,iBAAiB,KAAK,CAAC;AAAA,KAC3D,mBAAmB,aAAa,WAAW,4BAA4B,CAAC;AAAA,KACxE,mBAAmB,aAAa,WAAW,iCAAiC,KAAK,CAAC;AAAA,KAClF,mBAAmB,aAAa,WAAW,0CAA0C,CAAC;AAAA,KACtF,mBAAmB,aAAa,WAAW,yCAAyC,CAAC;AAAA;AAAA,EAEzF;AACD;;;A8B1IA,IAAAC,mBAA4D;AAC5D,IAAAC,yBAA2C;AAC3C,IAAAC,yBAYO;;;ACdA,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ADsB9B,SAASC,oBAAmBC,OAAc,YAAoB;AAC7D,SAAO,GAAGA,KAAI,KAAK,UAAU;AAC9B;AAFS,OAAAD,qBAAA;AAIT,SAASE,2BAA0B,MAAc;AAChD,SAAO,2BAA2B,IAAI;AACvC;AAFS,OAAAA,4BAAA;AAIT,SAASC,2BACRF,OACA,YACA,YACC;AACD,QAAM,WAAWD,oBAAmBC,OAAM,UAAU;AAEpD,SAAO,YAAYA,KAAI,oBAAoB,QAAQ,oBAAoB,QAAQ,OAAO,cAAc,MAAM;AAC3G;AARS,OAAAE,4BAAA;AAUF,IAAM,gBAAN,MAAmE;AAAA,EAxC1E,OAwC0E;AAAA;AAAA;AAAA,EACzE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACU,UAAU;AAAA,IACnB,oBAAoB,CAAC,mBAAmB,oBAAoB;AAAA,IAC5D,mBAAmB,CAAC,kBAAkB;AAAA,EACvC;AAAA,EAEA,YAAY,EAAE,SAAS,UAAU,GAAkB;AAClD,SAAK,mBAAmB,IAAI,uCAAsB;AAClD,SAAK,kBAAkB,IAAI,sCAAqB;AAEhD,SAAK,UAAU;AAEf,SAAK,YAAY;AAEjB,SAAK,cAAc,KAAK,iBAAiB;AAEzC,SAAK,kBAAkB,oBAAI,IAAI;AAC/B,SAAK,qBAAqB;AAE1B,SAAK,eAAe,CAAC;AACrB,SAAK,sBAAsB,CAAC;AAC5B,SAAK,eAAe,CAAC;AACrB,SAAK,qBAAqB,CAAC;AAE3B,qBAAiB,SAAS,KAAK,iBAAiB,KAAK,gBAAgB;AAErE,SAAK,kBAAkB;AAAA,EACxB;AAAA,EAEO,aAAa;AACnB,UAAMC,WAAU;AAIhB,WAAOA;AAAA,EACR;AAAA,EAEO,kBAA0B;AAChC,WAAO,KAAK,aAAa,KAAK,IAAI;AAAA,EACnC;AAAA,EAEA,oBAAoB;AACnB,SAAK,aAAa;AAAA,MACjB,sBAAsB,KAAK,UAAU,KAAK,gBAAgB,cAAc,GAAG,MAAM,CAAC,CAAC;AAAA,IACpF;AACA,SAAK,aAAa;AAAA,MACjB,uBAAuB,KAAK,UAAU,KAAK,iBAAiB,cAAc,GAAG,MAAM,CAAC,CAAC;AAAA,IACtF;AACA,SAAK,aAAa,KAAK;AAAA,EAAgB,KAAK,kBAAkB,EAAE,KAAK,KAAK,CAAC;AAAA,EAAK;AAChF,SAAK,aAAa,KAAK,2CAA2C;AAClE,SAAK,aAAa,KAAK,+CAA+C;AAEtE,SAAK,2BAA2B;AAChC,SAAK,wBAAwB;AAAA,EAC9B;AAAA,EAEQ,gBAAgB,YAA0C;AACjE,QAAI,WAAW,mBAAmB,uCAAgB,UAAU;AAC3D,YAAM,EAAE,cAAc,UAAU,IAAI,WAAW;AAE/C,YAAM,WAAW,UAAU,IAAI,CAAC,QAAQ;AACvC,YAAI,IAAI,mBAAmB,uCAAgB,UAAU;AACpD,iBAAO,KAAK,gBAAgB,GAAG;AAAA,QAChC,OAAO;AACN,iBAAO,KAAK,yBAAyB,GAAG;AAAA,QACzC;AAAA,MACD,CAAC,EAAE,KAAK,IAAI;AAEZ,aAAO,oCAAoC,YAAY,MAAM,QAAQ;AAAA,IACtE,OAAO;AACN,aAAO,KAAK,yBAAyB,UAAU;AAAA,IAChD;AAAA,EACD;AAAA,EAEA,iBAAiB,WAAmB;AACnC,UAAM,eAAe,KAAK,gBAAgB;AAE1C,UAAM,aAAa,KAAK,gBAAgB,eAAe,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;AAElF,QAAI,eAAe,MAAM;AACxB,YAAM,IAAI,MAAM,iCAAiC;AAAA,IAClD;AAEA,UAAM,IAAI,KAAK,uBAAuB,iCAAU;AAChD,UAAM,IAAI,KAAK,uBAAuB,YAAY;AAElD,UAAM,iBAAiB,OAAO,OAAO,CAAC,GAAG,GAAG,CAAC;AAE7C,WAAO,KAAK;AAAA,MACX;AAAA,QACC,eAAe;AAAA,QACf,QAAQ,IAAI,SAAS;AAAA,QACrB,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,eAAe,KAAK,gBAAgB,EAAE,SAAS;AAAA,QAC/C,eAAe,KAAK,gBAAgB,EAAE,SAAS;AAAA,QAC/C,gBAAgB,KAAK,iBAAiB,EAAE,SAAS;AAAA,QACjD,mBAAmB,KAAK,oBAAoB,EAAE,SAAS;AAAA,QACvD,YAAY,cAAc,IAAI,SAAS;AAAA,QACvC,aAAa,KAAK,UAAU,cAAc,EAAE,QAAQ,SAAS,MAAM;AAAA,QACnE,aAAa,KAAK,eAAe,EAAE,SAAS;AAAA,QAC5C,iBAAiB,KAAK,kBAAkB,EAAE,SAAS;AAAA,QACnD,iBAAiB,KAAK,mBAAmB,EAAE,SAAS;AAAA,QACpD,gBAAgB;AAAA,QAChB,eAAe,KAAK,WAAW,EAAE,SAAS;AAAA,MAC3C;AAAA,IACD;AAAA,EACD;AAAA,EAEA,oBAAoB,gBAAgD;AACnE,QAAI,MAAM;AACV,WAAO,QAAQ,cAAc,EAAE,QAAQ,CAAC,CAAC,UAAU,GAAG,MAAM;AAC3D,YAAM,IAAI,WAAW,UAAU,GAAG;AAAA,IACnC,CAAC;AACD,WAAO;AAAA,EACR;AAAA,EAEU,kBAAkB;AAC3B,UAAM,UAAU,CAAC,wCAAwC,gDAAiD;AAC1G,WAAO,QAAQ,KAAK,IAAI;AAAA,EACzB;AAAA,EAEU,kBAAkB;AAC3B,UAAM,UAAU,CAAC,8BAA8B,iCAAkC;AACjF,WAAO,QAAQ,KAAK,IAAI;AAAA,EACzB;AAAA,EAEO,QAAQ,SAAwD;AACtE,WAAO;AAAA,EACP,KAAK,WAAW,CAAC;AAAA,EACjB,KAAK,gBAAgB,CAAC;AAAA,eACT,KAAK,UAAU,KAAK,cAAc,GAAG,MAAM,CAAC,CAAC;AAAA,cAC9C,KAAK,UAAU,KAAK,aAAa,GAAG,MAAM,CAAC,CAAC;AAAA,EACxD,KAAK,kBAAkB,CAAC;AAAA,EACxB,KAAK,0BAA0B,CAAC;AAAA,EAChC,KAAK,iBAAiB,QAAQ,SAAS,CAAC;AAAA;AAAA,EAEzC;AAAA,EAEA,iBAAiB,MAAwB;AACxC,UAAM,MAA8B,CAAC;AACrC,WAAO,KAAK,IAAI,EAAE,QAAQ,CAAC,QAAgB;AAC1C,UAAI,GAAG,IAAI;AAAA,IACZ,CAAC;AACD,WAAO;AAAA,EACR;AAAA,EAEA,gBAAgB;AACf,WAAO,KAAK,iBAAiB,KAAK,iBAAiB,cAAc,CAAC;AAAA,EACnE;AAAA,EAEA,eAAe;AACd,WAAO,KAAK,iBAAiB,KAAK,gBAAgB,cAAc,CAAC;AAAA,EAClE;AAAA,EAEU,mBAAmB;AAC5B,UAAM,UAAU,CAAC,gCAAgC,mCAAoC;AACrF,WAAO,QAAQ,KAAK,IAAI;AAAA,EACzB;AAAA,EAEU,sBAAsB;AAC/B,UAAM,UAAU,CAAC,4CAA4C,gEAAiE;AAC9H,WAAO,QAAQ,KAAK,IAAI;AAAA,EACzB;AAAA,EAEO,4BAA4B;AAClC,WAAO;AAAA,EAAmC,KAAK,8BAA8B,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,EAC1F;AAAA,EAEA,oBAAoB;AACnB,WAAO,KAAK,QAAQ,OAAO,IAAI,CAACC,WAAU;AACzC,YAAM,aAAa,KAAK,gBAAgB,eAAe;AAAA,QACtD,MAAM,CAACA,OAAM,EAAE;AAAA,MAChB,CAAC,EAAE,CAAC;AAEJ,UAAI,CAAC,YAAY;AAChB,cAAM,IAAI,MAAM,eAAe;AAAA,MAChC;AAEA,aAAO,GAAG,UAAU,sDAAsD,KAAK,qBAAqB,UAAU,CAAC;AAAA,IAChH,CAAC;AAAA,EACF;AAAA,EAEA,qBAAqB,aAA6C;AACjE,WAAO,OAAO,QAAQ,WAAW,EAC/B,IAAI,CAAC,CAAC,KAAK,UAAU,MAAM;AAC3B,YAAM,WAAW,KAAK,gBAAgB,eAAe;AAAA,QACpD,MAAM,CAAC,GAAG;AAAA,MACX,CAAC,EAAE,CAAC;AACJ,aAAO,WAAW,YAAY,IAAI,CAAC,EAAE,OAAO,MAAM;AACjD,cAAM,cAAc,KAAK,iBAAiB,gBAAgB;AAAA,UACzD,MAAM;AAAA,QACP,CAAC,EAAE,CAAC;AACJ,YAAI,CAAC,YAAa,OAAM,IAAI,MAAM,UAAU,MAAM,YAAY;AAC9D,YAAI,CAAC,SAAU,OAAM,IAAI,MAAM,SAAS,GAAG,YAAY;AAEvD,eAAO;AAAA,MACN,WAAW;AAAA,mBACE,QAAQ;AAAA;AAAA;AAAA,MAGvB,CAAC;AAAA,IACF,CAAC,EACA,QAAQ,QAAM,GAAG,GAAG,KAAK,IAAI,CAAC,EAAE;AAAA,EACnC;AAAA,EAEU,aAAa;AACtB,UAAM,UAAU,CAAC,gCAAgC,mBAAmB;AACpE,WAAO,QAAQ,KAAK,MAAQ;AAAA,EAC7B;AAAA,EAEO,oBAAoB;AAC1B,UAAMA,SAAQ,KAAK,gBAAgB,eAAe;AAAA,MACjD,MAAM,CAAC,iCAAU;AAAA,IAClB,CAAC,EAAE,CAAC;AAEJ,QAAIA,QAAO;AACV,YAAM,MAAM,KAAK,qBAAqBA,MAAK;AAC3C,YAAMC,WAAU,CAAC,gDAAgD,SAAS,GAAG,IAAI,+BAA+B;AAChH,aAAOA,SAAQ,KAAK,KAAM;AAAA,IAC3B;AACA,UAAM,UAAU,CAAC,gDAAgD,oBAAoB;AACrF,WAAO,QAAQ,KAAK,KAAM;AAAA,EAC3B;AAAA,EAEU,iBAAiB;AAC1B,UAAM,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,KAAK,8BAA8B,CAAC;AAAA,MACvC,GAAG,KAAK,+BAA+B,CAAC;AAAA,MACxC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IACD;AACA,WAAO,QAAQ,KAAK,KAAM;AAAA,EAC3B;AAAA,EAEU,gCAAgC;AACzC,UAAMC,WAAU;AAAA,MACf,GAAG,KAAK,kCAAkC,CAAC;AAAA,MAC3C,KAAO,KAAK,mCAAmC,CAAC;AAAA,IACjD;AACA,WAAOA,SAAQ,KAAK,IAAI;AAAA,EACzB;AAAA,EAEU,oCAAoC;AAC7C,WAAO;AAAA,EACR;AAAA,EAEU,qCAAqC;AAC9C,WAAO;AAAA,EACR;AAAA,EAEU,iCAAiC;AAC1C,UAAM,UAAU;AAAA,MACf;AAAA,MACA;AAAA,IACD;AACA,WAAO,QAAQ,KAAK,MAAQ;AAAA,EAC7B;AAAA,EAEU,oBAAoB;AAC7B,UAAM,UAAU,CAAC,gCAAgC,uCAAuC;AACxF,WAAO,QAAQ,KAAK,MAAQ;AAAA,EAC7B;AAAA,EAEQ,uBAA6B;AACpC,UAAM,UAAU,KAAK,QAAQ,OAAO;AAAA,MACnC,CAAAF,WAASA,OAAM,OAAO,WAAW,CAAC;AAAA,IACnC;AAEA,UAAM,kBAAkB,wBAAC,YAA2C,gBAAwB;AAC3F,YAAM,EAAE,cAAc,UAAU,IAAI,WAAW;AAE/C,UAAI,CAAC,KAAK,gBAAgB,IAAI,WAAW,GAAG;AAC3C,aAAK,gBAAgB,IAAI,aAAa,oBAAI,IAAI,CAAC;AAAA,MAChD;AAEA,WAAK,gBAAgB,IAAI,WAAW,EAAG,IAAI,YAAY;AAEvD,iBAAW,OAAO,WAAW;AAC5B,YAAI,IAAI,mBAAmB,YAAY;AACtC,0BAAgB,KAAK,WAAW;AAAA,QACjC;AAAA,MACD;AAAA,IACD,GAdwB;AAgBxB,eAAW,UAAU,SAAS;AAC7B,UAAI,OAAO,WAAW,mBAAmB,uCAAgB,UAAU;AAClE,wBAAgB,OAAO,YAAY,OAAO,UAAU;AAAA,MACrD;AAAA,IACD;AAAA,EACD;AAAA,EAEQ,eAA2B;AAClC,UAAM,UAAU,oBAAI,IAAY;AAChC,UAAM,iBAAiB,oBAAI,IAAY;AACvC,UAAM,SAAqB,CAAC;AAE5B,UAAM,MAAM,wBAAC,MAAcJ,QAAiB,CAAC,MAAe;AAC3D,UAAI,CAAC,QAAQ,IAAI,IAAI,GAAG;AACvB,gBAAQ,IAAI,IAAI;AAChB,uBAAe,IAAI,IAAI;AAEvB,cAAM,YAAY,KAAK,gBAAgB,IAAI,IAAI,KAAK,oBAAI,IAAI;AAC5D,mBAAW,YAAY,WAAW;AACjC,cAAI,CAAC,QAAQ,IAAI,QAAQ,GAAG;AAC3B,gBAAI,IAAI,UAAU,CAAC,GAAGA,OAAM,IAAI,CAAC,GAAG;AACnC,qBAAO;AAAA,YACR;AAAA,UACD,WAAW,eAAe,IAAI,QAAQ,GAAG;AACxC,mBAAO,KAAK,CAAC,GAAGA,OAAM,MAAM,QAAQ,CAAC;AACrC,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAEA,qBAAe,OAAO,IAAI;AAC1B,aAAO;AAAA,IACR,GApBY;AAsBZ,eAAW,QAAQ,KAAK,gBAAgB,KAAK,GAAG;AAC/C,UAAI,CAAC,QAAQ,IAAI,IAAI,GAAG;AACvB,YAAI,IAAI;AAAA,MACT;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAEQ,6BAA6B;AACpC,UAAM,SAAS,KAAK,aAAa;AACjC,QAAI,OAAO,SAAS,GAAG;AACtB,YAAM,eAAe,OAAO,IAAI,WAAS,MAAM,KAAK,MAAM,CAAC;AAC3D,YAAM,IAAI,MAAM;AAAA,EAA0D,aAAa,KAAK,IAAI,CAAC,EAAE;AAAA,IACpG;AAAA,EACD;AAAA,EAEQ,0BAA0B;AACjC,UAAM,UAAU,KAAK,QAAQ,OAAO;AAAA,MACnC,CAAAI,WAASA,OAAM,OAAO,WAAW,CAAC;AAAA,IACnC;AACA,UAAM,aAAa,oBAAI,IAAY;AAEnC,UAAM,mBAAmB,wBAAC,aAAqB;AAC9C,UAAI,WAAW,IAAI,QAAQ,EAAG;AAE9B,YAAM,UAAU,QAAQ,KAAK,SAAO,IAAI,eAAe,QAAQ;AAC/D,UAAI,CAAC,QAAS;AAEd,YAAM,eAAe,KAAK,gBACxB,IAAI,QAAQ,KAAK,oBAAI,IAAI;AAC3B,iBAAW,OAAO,cAAc;AAC/B,YAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACzB,2BAAiB,GAAG;AAAA,QACrB;AAAA,MACD;AAEA,YAAM,eAAe,KAAK,gBAAgB,QAAQ,UAAU;AAC5D,WAAK,aAAa,KAAK,gCAAgC,QAAQ,aAAa,QAAQ,UAAU,KAAK,IAAI,CAAC,KAAK,YAAY,GAAG;AAC5H,iBAAW,IAAI,QAAQ;AAAA,IACxB,GAjByB;AAmBzB,eAAW,YAAY,KAAK,gBAAgB,KAAK,GAAG;AACnD,UAAI,CAAC,WAAW,IAAI,QAAQ,GAAG;AAC9B,yBAAiB,QAAQ;AAAA,MAC1B;AAAA,IACD;AAAA,EACD;AAAA,EAEU,qBAAqB;AAC9B,UAAM,UAAU,CAAC,iCAAiC,wCAAwC;AAC1F,WAAO,QAAQ,KAAK,MAAQ;AAAA,EAC7B;AAAA,EAEU,gCAAgC;AACzC,UAAM,2BAA2D,CAAC;AAElE,WAAO,QAAQ,KAAK,QAAQ,WAAW,EAAE;AAAA,MACxC,CAAC,CAACA,QAAO,WAAW,MAAM;AACzB,YAAIA,WAAU,mCAAY;AACzB,gBAAM,UAAU,OAAO,QAAQ,WAAW;AAC1C,kBAAQ,QAAQ,CAAC,CAACA,QAAO,MAAM,MAAM;AACpC,mBAAO,YAAY,QAAQ,CAAC,EAAE,QAAAG,QAAO,MAAM;AAC1C,uCAAyBH,MAAK,IAAI;AAAA,gBACjC,aAAa,CAAC,EAAE,QAAAG,SAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,cACnC;AAAA,YACD,CAAC;AAAA,UACF,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAEA,UAAM,qBAAqB,OAAO;AAAA,MACjC;AAAA,IACD,EAAE,SAAS;AAEX,WAAO,OAAO,QAAQ,KAAK,QAAQ,WAAW,EAAE;AAAA,MAC/C,CAAC,CAACH,QAAO,WAAW,MAAM;AACzB,cAAM,QAAQ,KAAK,gBAAgB,eAAe;AAAA,UACjD,MAAM,CAACA,MAAK;AAAA,QACb,CAAC,EAAE,CAAC;AACJ,YAAI,CAAC,MAAO,OAAM,IAAI,MAAM,SAASA,MAAK,YAAY;AACtD,YAAI,sBAAsBA,WAAU,mCAAY;AAC/C,wBAAc;AAAA,YACb,GAAG;AAAA,YACH,GAAG;AAAA,UACJ;AAAA,QACD;AAEA,eAAO,GAAG,KAAK;AAAA,EAAQ,KAAK,qBAAqB,WAAW,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,MACzE;AAAA,IACD;AAAA,EACD;AAAA,EAEU,uBAAuB,wBAAC,UAAkB;AACnD,UAAM,gBAAgB,KAAK,gBAAgB,aAAa;AAAA,MACvD,QAAQ,CAAC,KAAK;AAAA,IACf,CAAC,EAAE,CAAC;AAEJ,QAAI,kBAAkB,MAAM;AAC3B,YAAM,IAAI,MAAM,mBAAmB,KAAK,EAAE;AAAA,IAC3C;AAEA,UAAM,eAAe,KAAK,QAAQ,OAAO,KAAK,CAACI,kBAAiB;AAC/D,aAAOA,cAAa,OAAO;AAAA,IAC5B,CAAC;AAED,QAAI,CAAC,cAAc;AAClB,YAAM,IAAI,MAAM,mBAAmB,KAAK,EAAE;AAAA,IAC3C;AAEA,UAAM,SAAmB,CAAC;AAE1B,iBAAa,OAAO,mBAAmB,QAAQ,CAAC,QAAQ;AACvD,YAAM,aAAa,KAAK,eAAe,GAAG;AAE1C,aAAO,KAAK,GAAG,UAAU;AAAA,IAC1B,CAAC;AAED,QAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,WAAO;AAAA,EAAM,OAAO,KAAK,KAAK,CAAC;AAAA;AAAA,EAChC,GA5BiC;AAAA,EA8BzB,kBAAkB;AACzB,UAAM,aAAa,KAAK,QAAQ,OAAO,KAAK,CAACJ,WAAU;AACtD,aAAO,QAAQA,OAAM,OAAO,YAAY;AAAA,IACzC,CAAC;AAED,QAAI,YAAY;AACf,aAAO,WAAW;AAAA,IACnB;AAEA,UAAM,aAAa,KAAK,QAAQ,OAAO,CAAC,GAAG;AAE3C,QAAI,CAAC,YAAY;AAChB,YAAM,IAAI,MAAM,eAAe;AAAA,IAChC;AAEA,WAAO;AAAA,EACR;AAAA,EAEQ,iBAAiB,wBAAC,QAAsB;AAC/C,YAAI,6CAAqB,GAAG,GAAG;AAC9B,YAAM,EAAE,SAAAE,UAAS,QAAQ,IAAI;AAE7B,aAAO,QACL,IAAI,CAAC,EAAE,QAAQ,MAAM;AACrB,gBAAI,2CAAmB,OAAO,GAAG;AAChC,gBAAM;AAAA,YACL;AAAA,YACA,YAAY;AAAA,UACb,IAAI;AACJ,gBAAMN,QAAO,WAAW,cAAc;AAEtC,cACC,QAAQ,mBAAmB,uCAAgB,UAC1C;AACD,kBAAM,uBAAuB,KAC3B,mBAAmB,OAAO;AAC5B,mBAAO,YAAY,oBAAoB;AAAA,UACxC;AAEA,kBAAI,gDAAwB,OAAO,GAAG;AACrC,kBAAM,EAAE,WAAW,IAAI;AAEvB,kBAAM,uBAAuB,KAC3B,mBAAmB,UAAU;AAE/B,mBAAOE;AAAA,cACNF;AAAA,cACA;AAAA,cACA;AAAA,YACD;AAAA,UACD,OAAO;AACN,mBAAOE;AAAA,cACNF;AAAA,cACA;AAAA,YACD;AAAA,UACD;AAAA,QACD,OAAO;AACN,gBAAM,EAAE,WAAW,IAAI;AAEvB,gBAAM,uBAAuB,KAAK;AAAA,YACjC;AAAA,UACD;AACA,iBAAO,YAAY,oBAAoB;AAAA,QACxC;AAAA,MACD,CAAC,EACA,IAAI,CAAC,IAAI,UAAU;AACnB,cAAM,OAAOM,SAAQ,KAAK;AAC1B,YAAI,CAAC,MAAM;AACV,gBAAM,IAAI,MAAM,iCAAiC;AAAA,QAClD;AACA,cAAM,EAAE,QAAQ,IAAI;AACpB,cAAM,EAAE,YAAY,eAAe,IAAI;AAEvC,gBAAI,gDAAwB,OAAO,GAAG;AACrC,gBAAM,EAAE,WAAW,IAAI;AAEvB,gBAAM,uBAAuB,KAAK;AAAA,YACjC;AAAA,UACD;AAEA,iBAAO,IAAI,cAAc,4BAA4B,EAAE,+CAA+C,oBAAoB;AAAA,QAC3H,OAAO;AACN,iBAAO,IAAI,cAAc,4BAA4B,EAAE;AAAA,QACxD;AAAA,MACD,CAAC;AAAA,IACH,OAAO;AACN,YAAM,EAAE,SAAAA,SAAQ,IAAI;AACpB,aAAOA,SAAQ,IAAI,CAAC,EAAE,QAAQ,MAAM;AACnC,cAAM,EAAE,WAAW,IAAI;AACvB,gBAAI,gDAAwB,OAAO,GAAG;AACrC,gBAAM,kBAAkB,KAAK;AAAA,YAC5B,QAAQ;AAAA,UACT;AAEA,iBAAO,IAAI,UAAU,MAAMJ,2BAA0B,eAAe,YAAY,eAAe,CAAC;AAAA,QACjG,OAAO;AACN,iBAAO,IAAI,UAAU,MAAMA,2BAA0B,eAAe,UAAU,CAAC;AAAA,QAChF;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD,GAlFyB;AAAA,EAoFjB,yBAAyB,wBAAC,cAAsB;AACvD,UAAM,SAAS,KAAK,QAAQ,OAAO;AAAA,MAClC,CAAAE,WAASA,OAAM,OAAO;AAAA,IACvB;AAEA,QAAI,OAAO,QAAQ;AAClB,aAAO,OAAO;AAAA,QACb,CAAC,KAAK,SAAS;AACd,eAAK,OAAO,mBAAmB,QAAQ,CAAC,OAAO;AAC9C,eAAG,QAAQ,QAAQ,CAACK,QAAO;AAC1B,kBAAIA,IAAG,QAAQ,UAAU,IAAI;AAAA,YAC9B,CAAC;AAAA,UACF,CAAC;AACD,iBAAO;AAAA,QACR;AAAA,QACA,CAAC;AAAA,MACF;AAAA,IACD;AAEA,WAAO;AAAA,EACR,GApBiC;AAAA,EAsBzB,mBACP,YACC;AACD,WAAO,KAAK,YAAY,WAAW,cAAc,EAAE,UAAU;AAAA,EAC9D;AAAA,EAEQ,yBAAyB,YAAkC;AAClE,YAAQ,WAAW,gBAAgB;AAAA,MAClC,KAAK,uCAAgB;AACpB,eAAO,WAAW;AAAA,MACnB,KAAK,uCAAgB;AACpB,eAAO,KAAK,gBAAgB,UAAU;AAAA,MACvC;AACC,eAAO,KAAK,mBAAmB,UAAU;AAAA,IAC3C;AAAA,EACD;AAAA,EAEQ,mBAAsC;AAC7C,WAAO;AAAA,MACN,CAAC,uCAAgB,gBAAgB,GAAG,MAAM;AAAA,MAC1C,CAAC,uCAAgB,QAAQ,GAAG,CAAC,EAAE,WAAW,MAAM;AAC/C,YAAI,KAAK,cAAc,MAAM;AAC5B,gBAAM,IAAI,MAAM,mCAAmC;AAAA,QACpD;AAEA,YAAI,KAAK,UAAU,UAAU,MAAM,QAAW;AAC7C,gBAAM,IAAI,MAAM,sDAAsD,UAAU,EAAE;AAAA,QACnF;AACA,YAAI,OAAO,KAAK,UAAU,UAAU,MAAM,SAAU,QAAO,IAAI,KAAK,UAAU,UAAU,CAAC;AAEzF,eAAO,GAAG,KAAK,UAAU,UAAU,CAAC;AAAA,MACrC;AAAA,MACA,CAAC,uCAAgB,QAAQ,GAAG,CAAC,SAAS;AACrC,YAAI,kBAAkB;AACtB,cAAM,YAAY,wBAACC,UAA8B;AAChD,gBAAM,EAAE,oBAAoB,IAAIA;AAChC,gBAAM,EAAE,cAAc,UAAU,IAAI;AAEpC,gBAAMC,OAAgB,CAAC;AAEvB,cAAI,kBAAkB,2CAAoB;AACzC,sBAAU,QAAQ,CAAC,SAAS;AAC3B,sBAAI,2CAAmB,IAAI,GAAG;AAC7B,sBAAM,EAAE,gBAAgB,WAAW,IAAI;AACvC,sBAAMX,QAAO,WAAW,cAAc;AACtC,wBAAI,gDAAwB,IAAI,GAAG;AAClC,wBAAM,EAAE,WAAW,IAAI;AAEvB,sBAAI,WAAW,mBAAmB,uCAAgB,UAAU;AAC3D;AACA,oBAAAW,KAAI,KAAK,UAAU,UAAU,CAAC;AAAA,kBAC/B;AAEA,wBAAM,kBAAkB,KAAK,mBAAmB,UAAU;AAE1D,kBAAAA,KAAI,KAAK,GAAGT,2BAA0BF,OAAM,YAAY,eAAe,CAAC,EAAE;AAAA,gBAC3E,OAAO;AACN,sBAAI,KAAK,mBAAmB,uCAAgB,UAAU;AACrD,0BAAM,uBAAuB,KAAK,mBAAmB,IAAI;AACzD,oBAAAW,KAAI,KAAK,oBAAoB;AAAA,kBAC9B,OAAO;AACN,oBAAAA,KAAI,KAAK,GAAGT,2BAA0BF,OAAM,UAAU,CAAC,EAAE;AAAA,kBAC1D;AAAA,gBACD;AAAA,cACD,OAAO;AACN,oBAAI,KAAK,mBAAmB,uCAAgB,UAAU;AACrD,kBAAAW,KAAI,KAAK,UAAU,IAAI,CAAC;AAAA,gBACzB,OAAO;AACN,wBAAM,kBAAkB,KAAK,mBAAmB,IAAI;AACpD,kBAAAA,KAAI,KAAK,eAAe;AAAA,gBACzB;AAAA,cACD;AAAA,YACD,CAAC;AAAA,UACF,OAAO;AACN,kBAAM,IAAI,MAAM,yCAAyC,yCAAkB,EAAE;AAAA,UAC9E;AAEA,iBAAO,GAAGV,2BAA0B,YAAY,CAAC,IAAIU,KAAI,KAAK,IAAI,CAAC;AAAA,QACpE,GA5CkB;AA8ClB,cAAM,MAAM,UAAU,IAAI;AAC1B,eAAO;AAAA,MACR;AAAA,MACA,CAAC,uCAAgB,kBAAkB,GAAG,CAAC,EAAE,kBAAkB,MAAM;AAChE,eAAO,GAAG,iBAAiB;AAAA,MAC5B;AAAA,MACA,CAAC,uCAAgB,kBAAkB,GAAG,CAAC,EAAE,kBAAkB,MAAM;AAChE,eAAO,GAAG,iBAAiB;AAAA,MAC5B;AAAA,MACA,CAAC,uCAAgB,iBAAiB,GAAG,CAAC,EAAE,kBAAkB,MAAM;AAC/D,eAAO,IAAI,iBAAiB;AAAA,MAC7B;AAAA,MACA,CAAC,uCAAgB,OAAO,GAAG,CAAC,EAAE,WAAW,MAAM;AAC9C,eAAO,oBAAoB,UAAU;AAAA,MACtC;AAAA,MACA,CAAC,uCAAgB,OAAO,GAAG,CAAC,EAAE,WAAW,MAAM;AAC9C,eAAO,gBAAgB,UAAU;AAAA,MAClC;AAAA,IACD;AAAA,EACD;AACD;;;AEntBA,SAASC,qBAAoB;AAC5B,SAAO,IAAI,mBAAmB,MAAM,WAAW,kBAAkB,CAAC;AACnE;AAFS,OAAAA,oBAAA;AAIT,SAASC,sBAAqB;AAC7B,SAAO,IAAI,mBAAmB,MAAM,WAAW,mBAAmB,CAAC;AACpE;AAFS,OAAAA,qBAAA;AAIT,SAASC,cAAa;AACrB,SAAO,IAAI,mBAAmB,MAAM,WAAW,WAAW,CAAC;AAC5D;AAFS,OAAAA,aAAA;AAIT,SAASC,oBAAmB;AAC3B,SAAO;AACR;AAFS,OAAAA,mBAAA;AAIT,SAASC,qBAAoB,OAE1B;AACF,SAAO;AAAA,qBACa,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAMpC;AAVS,OAAAA,sBAAA;AAWT,SAASC,iBAAgB,OAEtB;AACF,SAAO,cAAc,MAAM,SAAS,yBAAyB,MAAM,SAAS,kCAAkC,MAAM,SAAS;AAC9H;AAJS,OAAAA,kBAAA;AAMT,SAASC,mBAAkB;AAC1B,SAAO;AACR;AAFS,OAAAA,kBAAA;AAIF,IAAMC,mBAAkB;AAAA,EAC9B,GAAG,mBAAmB,MAAM;AAAA,EAC5B,mBAAAP;AAAA,EACA,oBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,iBAAAC;AACD;;;AC9CO,IAAME,eAAc;AAAA,EAC1B,YAAYC;AACb;;;ACDO,IAAM,qBAAqB;AAAA,EACjC,OAAOC;AAAA,EACP,SAAS,mBAAmB;AAAA,EAC5B,cAAc,mBAAmB;AAAA,EACjC,aAAa,mBAAmB;AAAA,EAChC,SAAS,mBAAmB;AAAA,EAC5B,OAAO,mBAAmB;AAAA,EAC1B,QAAQ,mBAAmB;AAAA,EAC3B,OAAO,mBAAmB;AAC3B;;;ACNO,IAAM,oBAAN,cAAgC,kBAAqE;AAAA,EAN5G,OAM4G;AAAA;AAAA;AAAA,EAC3G,YAAY,QAAuB;AAClC,UAAM,MAAM;AACZ,SAAK,QAAQ,eAAe,EAAG,KAAK,2BAA2B,0BAA0B,YAAY;AAAA,EACtG;AAAA,EAEgB,QAAQ,SAA4D;AACnF,UAAM,QAAQ;AAAA,MACb,SAAS,KAAK;AAAA,MACd,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,MACd,iBAAiB,KAAK;AAAA,MACtB,kBAAkB,KAAK;AAAA,MACvB,iBAAiB,KAAK;AAAA,MACtB,aAAa,KAAK;AAAA,MAClB,cAAc,gBAAgB,KAAK,SAAS,KAAK,eAAe;AAAA,MAChE,wBAAwB,mBAAmB,aAAa;AAAA,MACxD,iBAAiB,mBAAmB,MAAM;AAAA,MAC1C,WAAW,QAAQ;AAAA,IACpB;AACA,WAAO;AAAA,KACJ,mBAAmB,QAAQ,WAAW,eAAe,KAAK,CAAC;AAAA,KAC3D,mBAAmB,aAAa,WAAW,oBAAoB,KAAK,CAAC;AAAA,KACrE,mBAAmB,OAAO,WAAW,oBAAoB,KAAK,CAAC;AAAA,KAC/D,mBAAmB,OAAO,WAAW,8BAA8B,CAAC;AAAA,KACpE,mBAAmB,aAAa,WAAW,cAAc,KAAK,CAAC;AAAA,KAC/D,mBAAmB,aAAa,WAAW,aAAa,KAAK,CAAC;AAAA,KAC9D,mBAAmB,aAAa,WAAW,yBAAyB,KAAK,CAAC;AAAA,yBACtD,QAAQ,SAAS;AAAA,KACrC,mBAAmB,QAAQ,WAAW,kBAAkB,KAAK,CAAC;AAAA,KAC9D,mBAAmB,QAAQ,WAAW,oBAAoB,KAAK,CAAC;AAAA,KAChE,mBAAmB,MAAM,WAAW,kBAAkB,KAAK,CAAC;AAAA,KAC5D,mBAAmB,aAAa,WAAW,0BAA0B,KAAK,CAAC;AAAA,KAC3E,mBAAmB,MAAM,WAAW,iBAAiB,KAAK,CAAC;AAAA,KAC3D,mBAAmB,aAAa,WAAW,4BAA4B,CAAC;AAAA,KACxE,mBAAmB,aAAa,WAAW,iCAAiC,KAAK,CAAC;AAAA,KAClF,mBAAmB,aAAa,WAAW,0CAA0C,CAAC;AAAA,KACtF,mBAAmB,aAAa,WAAW,yCAAyC,CAAC;AAAA;AAAA,EAuBzF;AACD;;;AC9DO,IAAM,cAAc;AAAA,EAC1B,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AACP;AAKO,IAAM,UAAU;AAAA,EACtB,CAAC,YAAY,UAAU,GAAG;AAAA,EAC1B,CAAC,YAAY,UAAU,GAAG;AAAA,EAC1B,CAAC,YAAY,MAAM,GAAG;AAAA,EACtB,CAAC,YAAY,IAAI,GAAG;AACrB;;;AxCfA,IAAM,gBAAgB,8BAAO,aAA6D;AACzF,MAAI,CAAC,UAAU;AACd,WAAO;AAAA,MACN,MAAM;AAAA,IACP;AAAA,EACD;AACA,QAAM,gBAAgB,iBAAAC,QAAK,QAAQ,QAAQ;AAE3C,MAAI,CAAC,CAAC,OAAO,KAAK,EAAE,SAAS,aAAa,GAAG;AAC5C,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACtD;AAEA,SAAO;AAAA,IACN,MAAM;AAAA,EACP;AACD,GAfsB;AAiBtB,IAAM,kBAAkG;AAAA,EACvG,CAAC,YAAY,UAAU,GAAG;AAAA,EAC1B,CAAC,YAAY,UAAU,GAAG;AAAA,EAC1B,CAAC,YAAY,MAAM,GAAG,MAAM;AAAE,UAAM,IAAI,UAAU,8CAA8C;AAAA,EAAG;AAAA,EACnG,CAAC,YAAY,IAAI,GAAG,MAAM;AAAE,UAAM,IAAI,UAAU,4CAA4C;AAAA,EAAG;AAEhG;AAEO,IAAM,cAAc,wBAAC,aAAuB;AAClD,MAAI,gBAAgB,QAAQ,GAAG;AAC9B,WAAO,gBAAgB,QAAQ;AAAA,EAChC;AACA,QAAM,IAAI,UAAU,YAAY,QAAQ,mBAAmB;AAC5D,GAL2B;;;AyCvBpB,IAAM,iBAAN,MAAqB;AAAA,EACpB,YACI,wBAET;AAFS;AAAA,EAER;AAAA,EAXJ,OAO4B;AAAA;AAAA;AAAA,EAM3B,MAAa,cAAc,SAA0B;AACpD,UAAM,oBAAoB,MAAM,YAAY,QAAQ,QAAQ,EAAE,QAAQ,gBAAgB;AAEtF,WAAO,IAAI,QAAQ,QAAQ,QAAQ,EAAE,EAAE,SAAS,KAAK,wBAAwB,WAAW,QAAQ,WAAW,kBAAkB,CAAC;AAAA,EAC/H;AACD;;;ACmFO,IAAM,kBAAkB;AAAA,EAC9B,SAAS;AAAA,EACT,cAAc;AACf;;;A3C/EA,eAAsB,iCAAiC,SAA8B,SAA4C;AAChI,QAAM,EAAE,QAAQ,aAAa,aAAa,IAAI;AAC9C,QAAM,iBAAiB,IAAI,sCAAc;AAEzC,QAAM,uBAAuB,OAAO,IAAI,CAACC,WAAU;AAClD,UAAM,QAAQA,OAAM,MAAM,QAAQ,OAAK,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,GAAG;AAC7D,QAAI,UAAU;AACb,aAAO,EAAE,GAAGA,QAAO,OAAO,KAAK;AAChC,WAAO,EAAE,GAAGA,QAAO,OAAO,eAAe,MAAM,KAAK,EAAE;AAAA,EACvD,CAAC;AAED,MAAI,YAAwC;AAE5C,MAAI,SAAS,WAAW;AACvB,gBAAY,KAAK,MAAM,QAAQ,SAAS;AAAA,EACzC;AAEA,MAAI,cAAc,MAAM;AACvB,WAAO,QAAQ,SAAS,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACnD,UAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC3D,cAAM,IAAI,UAAU,qCAAqC,GAAG,YAAY,KAAK,UAAU,KAAK,CAAC,EAAE;AAAA,MAChG;AAAA,IACD,CAAC;AAAA,EACF;AAEA,QAAM,UAAU,IAAI;AAAA,IACnB;AAAA,MACC,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,QAAM,UAAU,MAAM,QAAQ,cAAc;AAAA,IAC3C,UAAU,QAAQ,WAAW,YAAY;AAAA,IACzC;AAAA,IACA,kBAAkB,QAAQ,oBAAoB;AAAA,EAC/C,CAAC;AAED,SAAO,QAAQ,QAAQ,OAAO;AAC/B;AAxCsB;","names":["import_yantrix_parser","state","path","state","import_automata","import_mermaid_parser","state","el","import_mermaid_parser","import_yantrix_parser","import_yantrix_parser","import_yantrix_parser","path","func","res","path","context","path","diagramState","state","state","import_functions","import_yantrix_parser","getFunctionBody","dictionaries","expressions","state","import_yantrix_parser","state","path","imports","dictionaries","import_mermaid_parser","state","action","import_yantrix_parser","expressions","state","expressions","events","import_yantrix_parser","state","state","import_automata","import_mermaid_parser","import_yantrix_parser","getReferenceString","path","getFunctionFromDictionary","getDefaultPropertyContext","imports","state","content","context","action","diagramState","el","func","res","getStateValidator","getActionValidator","getIsKeyOf","getGetActionFunc","getCreateActionFunc","getHasStateFunc","getGetStateFunc","classSerializer","classModule","classSerializer","classModule","path","state"]}