@testgorilla/tgo-coding-test 1.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/testgorilla-tgo-coding-test.mjs +94 -94
- package/fesm2022/testgorilla-tgo-coding-test.mjs.map +1 -1
- package/lib/components/configurations/configurations.component.d.ts +1 -1
- package/package.json +15 -17
- package/esm2022/index.mjs +0 -12
- package/esm2022/lib/components/code-editor/code-editor.component.mjs +0 -335
- package/esm2022/lib/components/code-editor/code-editor.service.mjs +0 -72
- package/esm2022/lib/components/code-editor/helpers/c-helper.mjs +0 -40
- package/esm2022/lib/components/code-editor/helpers/code-editor-helper.base.mjs +0 -11
- package/esm2022/lib/components/code-editor/helpers/code-editor-helper.model.mjs +0 -2
- package/esm2022/lib/components/code-editor/helpers/cpp-helper.mjs +0 -41
- package/esm2022/lib/components/code-editor/helpers/csharp-helper.mjs +0 -42
- package/esm2022/lib/components/code-editor/helpers/go-helper.mjs +0 -42
- package/esm2022/lib/components/code-editor/helpers/index.mjs +0 -16
- package/esm2022/lib/components/code-editor/helpers/java-helper.mjs +0 -42
- package/esm2022/lib/components/code-editor/helpers/javascript-helper.mjs +0 -26
- package/esm2022/lib/components/code-editor/helpers/kotlin-helper.mjs +0 -42
- package/esm2022/lib/components/code-editor/helpers/php-helper.mjs +0 -26
- package/esm2022/lib/components/code-editor/helpers/python-helper.mjs +0 -26
- package/esm2022/lib/components/code-editor/helpers/r-helper.mjs +0 -26
- package/esm2022/lib/components/code-editor/helpers/ruby-helper.mjs +0 -26
- package/esm2022/lib/components/code-editor/helpers/scala-helper.mjs +0 -41
- package/esm2022/lib/components/code-editor/helpers/sql-helper.mjs +0 -34
- package/esm2022/lib/components/code-editor/helpers/swift-helper.mjs +0 -40
- package/esm2022/lib/components/code-editor/helpers/typescript-helper.mjs +0 -41
- package/esm2022/lib/components/code-editor/models/code-editor.model.mjs +0 -2
- package/esm2022/lib/components/code-editor/models/coding-snapshot.model.mjs +0 -2
- package/esm2022/lib/components/coding-question/coding-question.component.mjs +0 -126
- package/esm2022/lib/components/coding-section/coding-section.component.mjs +0 -188
- package/esm2022/lib/components/common/truncated-text/truncated-text.component.mjs +0 -38
- package/esm2022/lib/components/configurations/configurations.component.mjs +0 -97
- package/esm2022/lib/components/instructions/instructions.component.mjs +0 -139
- package/esm2022/lib/components/panel/panel.component.mjs +0 -34
- package/esm2022/lib/components/runnable-editor/runnable-editor.component.mjs +0 -169
- package/esm2022/lib/components/tests/test-cases/test-cases.component.mjs +0 -198
- package/esm2022/lib/components/tests/test-cases-content/test-cases-content.component.mjs +0 -96
- package/esm2022/lib/components/tests/test-cases-status/test-cases-status.component.mjs +0 -21
- package/esm2022/lib/components/tests/test-results.component.mjs +0 -127
- package/esm2022/lib/components/tgo-coding-test/tgo-coding-test.component.mjs +0 -280
- package/esm2022/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.mjs +0 -476
- package/esm2022/lib/config/index.mjs +0 -2
- package/esm2022/lib/config/tgo-coding-test.config.mjs +0 -2
- package/esm2022/lib/config/tgo-coding-test.provider.mjs +0 -34
- package/esm2022/lib/config/tgo-coding-test.token.mjs +0 -14
- package/esm2022/lib/models/auto-saved-data.mjs +0 -2
- package/esm2022/lib/models/code-event.mjs +0 -2
- package/esm2022/lib/models/coderunner-execution-results.mjs +0 -2
- package/esm2022/lib/models/configs.mjs +0 -2
- package/esm2022/lib/models/language-change-action.mjs +0 -2
- package/esm2022/lib/models/lat-languages.mjs +0 -3
- package/esm2022/lib/models/mixpanel-events.mjs +0 -2
- package/esm2022/lib/models/mode.mjs +0 -2
- package/esm2022/lib/models/paste-data.mjs +0 -2
- package/esm2022/lib/models/programming-language.mjs +0 -2
- package/esm2022/lib/models/test-cases.mjs +0 -7
- package/esm2022/lib/models/theme.mjs +0 -2
- package/esm2022/lib/models/translations.mjs +0 -2
- package/esm2022/lib/models/view-mode.mjs +0 -8
- package/esm2022/lib/pipes/memoize-func.pipe.mjs +0 -39
- package/esm2022/lib/services/candidate-coding-test-services/candidature-api.service.mjs +0 -19
- package/esm2022/lib/services/candidate-coding-test-services/coderunner-api.service.mjs +0 -58
- package/esm2022/lib/services/candidate-coding-test-services/coding-test-tour.service.mjs +0 -89
- package/esm2022/lib/services/candidate-coding-test-services/coding-test.service.mjs +0 -490
- package/esm2022/lib/services/candidate-coding-test-services/index.mjs +0 -5
- package/esm2022/lib/services/coding-test-config.service.mjs +0 -51
- package/esm2022/lib/services/configurations.service.mjs +0 -89
- package/esm2022/lib/services/lib-coding-test.service.mjs +0 -106
- package/esm2022/lib/services/storage.service.mjs +0 -624
- package/esm2022/lib/services/test-cases.service.mjs +0 -30
- package/esm2022/lib/services/theme.service.mjs +0 -36
- package/esm2022/lib/utils/additional-languages/erlang.mjs +0 -103
- package/esm2022/lib/utils/resize-element.mjs +0 -13
- package/esm2022/lib/utils/time-to-ms.util.mjs +0 -11
- package/esm2022/shared/index.mjs +0 -5
- package/esm2022/shared/lib/components/audio-animation/audio-animation.component.mjs +0 -114
- package/esm2022/shared/lib/components/audio-animation/index.mjs +0 -2
- package/esm2022/shared/lib/components/index.mjs +0 -3
- package/esm2022/shared/lib/components/vimeo-video/index.mjs +0 -2
- package/esm2022/shared/lib/components/vimeo-video/vimeo-video.component.mjs +0 -101
- package/esm2022/shared/lib/models/answer.mjs +0 -2
- package/esm2022/shared/lib/models/assessment.mjs +0 -2
- package/esm2022/shared/lib/models/environment.mjs +0 -2
- package/esm2022/shared/lib/models/index.mjs +0 -9
- package/esm2022/shared/lib/models/question-component.mjs +0 -2
- package/esm2022/shared/lib/models/question.mjs +0 -2
- package/esm2022/shared/lib/models/test.mjs +0 -2
- package/esm2022/shared/lib/models/translations.mjs +0 -2
- package/esm2022/shared/lib/models/window.mjs +0 -2
- package/esm2022/shared/lib/services/api/api.service.mjs +0 -97
- package/esm2022/shared/lib/services/api/mocked-api.service.mjs +0 -131
- package/esm2022/shared/lib/services/environment/environment.service.mjs +0 -13
- package/esm2022/shared/lib/services/index.mjs +0 -10
- package/esm2022/shared/lib/services/localization/languages.model.mjs +0 -19
- package/esm2022/shared/lib/services/localization/transloco-lazy-module-utils.mjs +0 -27
- package/esm2022/shared/lib/services/localization/transloco-testing.module.mjs +0 -11
- package/esm2022/shared/lib/services/media/media.service.mjs +0 -129
- package/esm2022/shared/lib/services/mixpanel/mixpanel.service.mjs +0 -30
- package/esm2022/shared/lib/services/theme/theme.service.mjs +0 -24
- package/esm2022/shared/test-mocks/assessment-test.mock.mjs +0 -112
- package/esm2022/shared/test-mocks/index.mjs +0 -3
- package/esm2022/shared/test-mocks/tgo-ui.mock.mjs +0 -39
- package/esm2022/testgorilla-tgo-coding-test.mjs +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testgorilla-tgo-coding-test.mjs","sources":["../../../../packages/tgo-coding-test/src/lib/models/lat-languages.ts","../../../../packages/tgo-coding-test/src/lib/models/view-mode.ts","../../../../packages/tgo-coding-test/src/lib/services/configurations.service.ts","../../../../packages/tgo-coding-test/src/lib/services/lib-coding-test.service.ts","../../../../packages/tgo-coding-test/src/lib/utils/time-to-ms.util.ts","../../../../packages/tgo-coding-test/src/lib/services/storage.service.ts","../../../../packages/tgo-coding-test/src/lib/services/test-cases.service.ts","../../../../packages/tgo-coding-test/src/lib/services/theme.service.ts","../../../../packages/tgo-coding-test/src/lib/utils/additional-languages/erlang.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/code-editor-helper.base.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/c-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/cpp-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/csharp-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/go-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/java-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/javascript-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/kotlin-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/php-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/python-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/r-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/ruby-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/scala-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/sql-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/swift-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/typescript-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/code-editor.service.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/code-editor.component.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/code-editor.component.html","../../../../packages/tgo-coding-test/src/lib/pipes/memoize-func.pipe.ts","../../../../packages/tgo-coding-test/src/lib/components/instructions/instructions.component.ts","../../../../packages/tgo-coding-test/src/lib/components/instructions/instructions.component.html","../../../../packages/tgo-coding-test/src/lib/utils/resize-element.ts","../../../../packages/tgo-coding-test/src/lib/components/coding-section/coding-section.component.ts","../../../../packages/tgo-coding-test/src/lib/components/coding-section/coding-section.component.html","../../../../packages/tgo-coding-test/src/lib/components/panel/panel.component.ts","../../../../packages/tgo-coding-test/src/lib/components/panel/panel.component.html","../../../../packages/tgo-coding-test/src/lib/components/configurations/configurations.component.ts","../../../../packages/tgo-coding-test/src/lib/components/configurations/configurations.component.html","../../../../packages/tgo-coding-test/src/lib/models/test-cases.ts","../../../../packages/tgo-coding-test/src/lib/components/tests/test-cases-status/test-cases-status.component.ts","../../../../packages/tgo-coding-test/src/lib/components/tests/test-cases-status/test-cases-status.component.html","../../../../packages/tgo-coding-test/src/lib/components/common/truncated-text/truncated-text.component.ts","../../../../packages/tgo-coding-test/src/lib/components/common/truncated-text/truncated-text.component.html","../../../../packages/tgo-coding-test/src/lib/components/tests/test-cases-content/test-cases-content.component.ts","../../../../packages/tgo-coding-test/src/lib/components/tests/test-cases-content/test-cases-content.component.html","../../../../packages/tgo-coding-test/src/lib/components/tests/test-cases/test-cases.component.ts","../../../../packages/tgo-coding-test/src/lib/components/tests/test-cases/test-cases.component.html","../../../../packages/tgo-coding-test/src/lib/components/tests/test-results.component.ts","../../../../packages/tgo-coding-test/src/lib/components/tests/test-results.component.html","../../../../packages/tgo-coding-test/src/lib/components/runnable-editor/runnable-editor.component.ts","../../../../packages/tgo-coding-test/src/lib/components/runnable-editor/runnable-editor.component.html","../../../../packages/tgo-coding-test/src/lib/components/coding-question/coding-question.component.ts","../../../../packages/tgo-coding-test/src/lib/components/coding-question/coding-question.component.html","../../../../packages/tgo-coding-test/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts","../../../../packages/tgo-coding-test/src/lib/components/tgo-coding-test/tgo-coding-test.component.html","../../../../packages/tgo-coding-test/src/lib/models/translations.ts","../../../../packages/tgo-coding-test/src/lib/models/coderunner-execution-results.ts","../../../../packages/tgo-coding-test/src/lib/config/tgo-coding-test.token.ts","../../../../packages/tgo-coding-test/src/lib/services/coding-test-config.service.ts","../../../../packages/tgo-coding-test/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts","../../../../packages/tgo-coding-test/src/lib/services/candidate-coding-test-services/coding-test.service.ts","../../../../packages/tgo-coding-test/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts","../../../../packages/tgo-coding-test/src/lib/services/candidate-coding-test-services/candidature-api.service.ts","../../../../packages/tgo-coding-test/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts","../../../../packages/tgo-coding-test/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html","../../../../packages/tgo-coding-test/src/lib/config/tgo-coding-test.provider.ts","../../../../packages/tgo-coding-test/src/index.ts","../../../../packages/tgo-coding-test/src/testgorilla-tgo-coding-test.ts"],"sourcesContent":["import { CodeEditorLanguages } from '../components/code-editor/helpers/code-editor-helper.model';\n\nexport type LATLanguage = {\n label: string;\n value: CodeEditorLanguages;\n version?: string;\n};\n\nexport type LATLanguages = LATLanguage[];\n\n// This is only used for LAT to enable auto saving for preview questions to let user see updated code whenever he switches back and forth between languages\nexport const AssessmentIdPreview = 'preview-id';\n","export enum ViewMode {\n Full = 'full',\n IDEOnly = 'ide',\n RunnableIde = 'runnable-ide',\n RunnableIdeWithLangSelector = 'runnable-ide-w-lang-selector',\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, distinctUntilChanged, map, Observable, Subject } from 'rxjs';\nimport { CodingAssistanceOptions, Config, FormattingOptions } from '../models/configs';\nimport { Themes } from '../models/theme';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfigurationsService {\n private defaultConfigs: Config = {\n [FormattingOptions.ColorTheme]: Themes.Default,\n [FormattingOptions.TabSize]: 4,\n [FormattingOptions.FontSize]: 14,\n [CodingAssistanceOptions.AutoComplete]: true,\n [CodingAssistanceOptions.ErrorHighlighting]: true,\n [CodingAssistanceOptions.AutoBrackets]: true,\n };\n\n private formattingOptions = {\n [FormattingOptions.ColorTheme]: [\n { label: 'Light', value: Themes.Default },\n { label: 'Dark', value: Themes.Dark },\n ],\n [FormattingOptions.TabSize]: [\n { label: '2', value: 2 },\n { label: '3', value: 3 },\n { label: '4 (default)', value: 4 },\n { label: '5', value: 5 },\n { label: '8', value: 8 },\n ],\n [FormattingOptions.FontSize]: [\n { label: '10px', value: 10 },\n { label: '12px', value: 12 },\n { label: '14px (default)', value: 14 },\n { label: '16px', value: 16 },\n { label: '18px', value: 18 },\n { label: '20px', value: 20 },\n ],\n };\n\n private codingAssistanceOptions = {\n [CodingAssistanceOptions.AutoComplete]: true,\n [CodingAssistanceOptions.ErrorHighlighting]: true,\n [CodingAssistanceOptions.AutoBrackets]: true,\n };\n\n private configSubj$ = new BehaviorSubject<Config>(this.defaultConfigs);\n config$: Observable<Config> = this.configSubj$.asObservable();\n\n private configFieldChangedSubj$ = new Subject<Partial<Config>>();\n configFieldChanged$ = this.configFieldChangedSubj$.asObservable();\n\n private currentConfig = { ...this.defaultConfigs };\n\n colorTheme$: Observable<Themes> = this.config$.pipe(\n map(config => config[FormattingOptions.ColorTheme] as Themes),\n distinctUntilChanged()\n );\n\n private codeComponentDestroyed = true;\n\n private configurationsPanelOpenSubj$ = new BehaviorSubject<boolean>(false);\n configurationsPanelOpen$ = this.configurationsPanelOpenSubj$.asObservable();\n\n setColorTheme(value: Themes): void {\n this.currentConfig[FormattingOptions.ColorTheme] = value;\n this.setConfig(this.currentConfig);\n }\n\n setConfig(config: Config) {\n this.configSubj$.next(config);\n this.currentConfig = config;\n }\n\n trackConfigChanged(changedField: Partial<Config>): void {\n this.configFieldChangedSubj$.next(changedField);\n }\n\n getInitialConfig(): Config {\n return { ...this.currentConfig };\n }\n\n openConfigPanel(): void {\n this.configurationsPanelOpenSubj$.next(true);\n }\n\n closeConfigPanel() {\n this.configurationsPanelOpenSubj$.next(false);\n }\n\n getFormattingOptions(): {\n [key: string]: {\n label: string;\n value: Themes | number;\n }[];\n } {\n return { ...this.formattingOptions };\n }\n\n getCodingAssistanceOptions(): { [key: string]: boolean } {\n return { ...this.codingAssistanceOptions };\n }\n\n getCodeComponentDestroyed(): boolean {\n return this.codeComponentDestroyed;\n }\n\n setCodeComponentDestroyed(value: boolean) {\n this.codeComponentDestroyed = value;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, map, merge, Observable, ReplaySubject, skip, Subject } from 'rxjs';\nimport { CodeEditorLanguages } from '../components/code-editor/helpers/code-editor-helper.model';\nimport { LanguageChangeAction } from '../models/language-change-action';\nimport { CustomTestCase, ExampleTestCase, TestCaseDeletionAction, TestCaseDeletionData } from '../models/test-cases';\nimport { Themes } from '../models/theme';\nimport { ConfigurationsService } from './configurations.service';\n\nexport const enum ResetCodeAction {\n Try = 'try',\n Confirm = 'confirm',\n}\n\ndeclare global {\n interface Window {\n monaco: any;\n hljs: any;\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LibCodingTestService {\n private readonly configurationsService = inject(ConfigurationsService);\n\n private codeResetSubj$ = new Subject<ResetCodeAction>();\n codeReset$: Observable<ResetCodeAction> = this.codeResetSubj$.asObservable();\n\n private codeChangeSubj$ = new Subject<string>();\n codeChange$: Observable<string> = this.codeChangeSubj$.asObservable();\n\n private isFullscreenSubj$ = new BehaviorSubject<boolean>(false);\n isFullscreen$: Observable<boolean> = this.isFullscreenSubj$.asObservable();\n\n private isBoilerplateLoadingSub$ = new BehaviorSubject<boolean>(true);\n isBoilerplateLoading$: Observable<boolean> = this.isBoilerplateLoadingSub$.asObservable();\n\n themeChanged$: Observable<Themes> = this.configurationsService.colorTheme$;\n\n private languageChangeSub$ = new Subject<LanguageChangeAction>();\n languageChange$: Observable<LanguageChangeAction> = this.languageChangeSub$.asObservable();\n\n private testCaseDeletionSub$ = new Subject<TestCaseDeletionData>();\n testCaseDeletion$: Observable<TestCaseDeletionData> = this.testCaseDeletionSub$.asObservable();\n\n private currentLanguageSub$ = new ReplaySubject<CodeEditorLanguages>(1);\n currentLanguage$: Observable<CodeEditorLanguages> = this.currentLanguageSub$.asObservable();\n\n private clearSavedCodeSub$ = new Subject<boolean>();\n clearSavedCode$ = this.clearSavedCodeSub$.asObservable();\n\n private clearLastLangSub$ = new Subject<boolean>();\n clearLastLang$ = this.clearLastLangSub$.asObservable();\n\n private startGuidedTourSubj$ = new Subject<void>();\n startGuidedTour$ = this.startGuidedTourSubj$.asObservable();\n\n private testCases: (ExampleTestCase | CustomTestCase)[];\n\n initCode: string;\n private version: string;\n\n configFieldChanged$ = merge(\n this.isFullscreen$.pipe(\n skip(1),\n map(isFullscreen => ({\n 'Full screen': isFullscreen,\n }))\n ),\n this.configurationsService.configFieldChanged$\n );\n\n setFullscreen(isEnabled: boolean): void {\n this.isFullscreenSubj$.next(isEnabled);\n }\n\n resetCode(): void {\n this.codeResetSubj$.next(ResetCodeAction.Try);\n }\n\n startGuidedTour(): void {\n this.startGuidedTourSubj$.next();\n }\n\n confirmReset(): void {\n this.codeResetSubj$.next(ResetCodeAction.Confirm);\n }\n\n changeCurrentCode(code: string): void {\n this.codeChangeSubj$.next(code);\n }\n\n cancelLanguageChange(): void {\n this.languageChangeSub$.next(LanguageChangeAction.Cancel);\n }\n\n confirmLanguageChange(): void {\n this.languageChangeSub$.next(LanguageChangeAction.Confirm);\n }\n\n handleTestCaseDeletion(index: number): void {\n this.testCaseDeletionSub$.next({ action: TestCaseDeletionAction.Try, index });\n }\n\n confirmTestCaseDeletion(index: number): void {\n this.testCaseDeletionSub$.next({ action: TestCaseDeletionAction.Confirm, index });\n }\n\n changeCurrentLanguage(value: CodeEditorLanguages): void {\n this.currentLanguageSub$.next(value);\n }\n\n updateTestCases(testCases: (ExampleTestCase | CustomTestCase)[]) {\n this.testCases = testCases;\n }\n\n getTestCases(): (ExampleTestCase | CustomTestCase)[] {\n return this.testCases;\n }\n\n getValidTestCases(): (ExampleTestCase | CustomTestCase)[] {\n return this.testCases.filter(({ input, expectedOutput }) => input && expectedOutput);\n }\n\n getTestCasesCount(): number {\n return this.testCases?.length || 0;\n }\n\n setVersion(version: string) {\n this.version = version;\n }\n\n getVersion(): string {\n return this.version;\n }\n\n setInitCode(code: string) {\n this.initCode = code;\n }\n\n getInitCode(): string {\n return this.initCode;\n }\n\n setBoilerplateLoadingStatus(value: boolean) {\n this.isBoilerplateLoadingSub$.next(value);\n }\n\n triggerClearSavedCode(): void {\n this.clearSavedCodeSub$.next(true);\n }\n\n clearLastLanguageSelected(): void {\n this.clearLastLangSub$.next(true);\n }\n}\n","export function timeToMs(time: number, type: 'days' | 'hours' = 'days'): number {\n switch (type) {\n case 'hours':\n return time * 60 * 60 * 1000;\n case 'days':\n return time * 24 * 60 * 60 * 1000;\n default:\n throw new Error('Invalid type. Use \"hours\" or \"days\".');\n }\n}\n","import { Injectable } from '@angular/core';\nimport { LocalStorageService } from 'ngx-webstorage';\nimport { filter, Subscription } from 'rxjs';\nimport { CodeEditorLanguages } from '../components/code-editor/helpers/code-editor-helper.model';\nimport { AutoSavedData, AutoSavedDataV1, AutoSavedDataV2, QuestionData, TestData } from '../models/auto-saved-data';\nimport { Config } from '../models/configs';\nimport { AssessmentIdPreview } from '../models/lat-languages';\nimport { Modes } from '../models/mode';\nimport { CustomTestCase, ExampleTestCase } from '../models/test-cases';\nimport { ConfigurationsService } from './configurations.service';\nimport { LibCodingTestService } from './lib-coding-test.service';\nimport { timeToMs } from '../utils/time-to-ms.util';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class StorageCodingService {\n private readonly CURRENT_STORAGE_VERSION = 2;\n private autoSavedData: AutoSavedData = {\n version: this.CURRENT_STORAGE_VERSION,\n config: {} as Config,\n isFullscreen: false,\n assessments: {},\n lastModified: Date.now(),\n };\n private readonly key = 'savedData';\n private assessmentId: string;\n private questionId: string;\n private language: CodeEditorLanguages;\n private codeSaveEnabled: boolean;\n private testCasesSaveEnabled: boolean;\n private isLAT: boolean;\n private currentMode: Modes;\n private isPreview: boolean;\n private codeChangeSubscription: Subscription;\n private configSubscription: Subscription;\n private isFullscreenSubscription: Subscription;\n private currentLanguageSubscription: Subscription;\n private isCodeComponentAlive = filter(() => !this.configurationsService.getCodeComponentDestroyed());\n\n // Maximum age of entire storage data in days\n private readonly MAX_STORAGE_AGE_DAYS = 7;\n // Maximum age for assessment inner data in days\n private readonly MAX_QUESTION_DATA_AGE_DAYS = 1;\n // Maximum number of assessments to keep\n private readonly MAX_ASSESSMENTS = 10;\n // The default question ID used for migrated v1 data\n private readonly DEFAULT_MIGRATION_QUESTION_ID = 'default-question';\n\n // todo: remove\n // storage = {\n // retrieve: (key: string) => {\n // return {} as any;\n // },\n // store: (key: string, value: any) => {\n // return {} as any;\n // },\n // clear: (key: string) => {\n // return {} as any;\n // },\n // };\n\n constructor(\n // todo\n private storage: LocalStorageService,\n private libCodingTestService: LibCodingTestService,\n private configurationsService: ConfigurationsService\n ) {\n // Perform safety check on localStorage data\n this.performStorageSafetyCheck();\n }\n\n /**\n * Performs a safety check on localStorage data.\n * This is called at service initialization to ensure data integrity.\n */\n private performStorageSafetyCheck(): void {\n try {\n const savedData = this.storage.retrieve(this.key);\n\n // If no data, nothing to check\n if (!savedData) {\n return;\n }\n\n // Check storage format and migrate if needed\n if (!('version' in savedData)) {\n // It's v1 format, so we'll migrate it when it's actually needed\n // No need to do anything right now\n } else {\n // It's v2 format, so we can perform cleanup right away\n this.autoSavedData = savedData as AutoSavedData;\n }\n } catch (error) {\n // If any error occurs during safety check, reset storage to avoid issues\n console.error('Error during storage safety check, resetting storage:', error);\n this.autoSavedData = {\n version: this.CURRENT_STORAGE_VERSION,\n config: {} as Config,\n isFullscreen: false,\n assessments: {},\n lastModified: Date.now(),\n };\n this.storeData();\n }\n }\n\n initializeSaving(): void {\n if (!this.codeChangeSubscription) {\n this.codeChangeSubscription = this.libCodingTestService.codeChange$\n .pipe(this.isCodeComponentAlive)\n .subscribe((code: string) => {\n if (this.codeSaveEnabled && this.assessmentId && this.questionId) {\n this.ensureDataStructure();\n const questionData = this.autoSavedData.assessments[this.assessmentId][this.questionId];\n const targetTestData = this.isPreview ? questionData.preview : questionData.actual;\n targetTestData.code[this.language] = code!;\n this.updateLastModified(targetTestData);\n this.storeData();\n }\n });\n }\n\n if (!this.configSubscription) {\n this.configSubscription = this.configurationsService.config$\n .pipe(this.isCodeComponentAlive)\n .subscribe((config: Config) => {\n this.autoSavedData.config = { ...config };\n this.updateLastModified(this.autoSavedData);\n this.storeData();\n });\n }\n\n if (!this.isFullscreenSubscription) {\n this.isFullscreenSubscription = this.libCodingTestService.isFullscreen$\n .pipe(this.isCodeComponentAlive)\n .subscribe((isFullscreen: boolean) => {\n this.autoSavedData.isFullscreen = isFullscreen;\n this.updateLastModified(this.autoSavedData);\n this.storeData();\n });\n }\n\n if (!this.currentLanguageSubscription && this.isLAT) {\n this.currentLanguageSubscription = this.libCodingTestService.currentLanguage$\n .pipe(this.isCodeComponentAlive)\n .subscribe((language: CodeEditorLanguages) => {\n this.autoSavedData.lastLanguageLAT = {\n value: language,\n version: this.libCodingTestService.getVersion(),\n };\n this.updateLastModified(this.autoSavedData);\n this.storeData();\n });\n }\n }\n\n setupAutoSavedData(\n language: CodeEditorLanguages,\n assessmentId: string,\n questionId: string,\n codeSaveEnabled: boolean,\n testCasesSaveEnabled: boolean,\n isLAT: boolean,\n mode: Modes\n ) {\n this.language = language;\n this.assessmentId = assessmentId;\n this.questionId = questionId;\n this.codeSaveEnabled = codeSaveEnabled;\n this.testCasesSaveEnabled = testCasesSaveEnabled;\n this.isLAT = isLAT;\n this.currentMode = mode;\n this.isPreview = mode === Modes.Preview || mode === Modes.NonAssessmentPreview;\n\n // Get saved data\n const savedData = this.storage.retrieve(this.key);\n\n // Handle migration if needed\n if (savedData) {\n // Check if it's v1 schema (no version field)\n if (!('version' in savedData)) {\n this.migrateFromV1ToV2(savedData as AutoSavedDataV1);\n } else {\n this.autoSavedData = savedData as AutoSavedData;\n }\n\n // Apply loaded config and fullscreen setting\n this.configurationsService.setConfig(this.autoSavedData.config);\n this.libCodingTestService.setFullscreen(this.autoSavedData.isFullscreen);\n }\n }\n\n private migrateFromV1ToV2(v1Data: AutoSavedDataV1): void {\n // Create a new v2 data structure\n const v2Data: AutoSavedDataV2 = {\n version: this.CURRENT_STORAGE_VERSION,\n config: v1Data.config,\n isFullscreen: v1Data.isFullscreen,\n lastLanguageLAT: v1Data.lastLanguageLAT,\n assessments: {},\n lastModified: Date.now(),\n };\n\n // Migrate assessment data\n // In v1, assessments were directly mapped to TestData\n // In v2, we need to organize by questionId\n for (const [assessmentId, testData] of Object.entries(v1Data.assessments)) {\n if (assessmentId === AssessmentIdPreview) {\n continue;\n }\n\n // We use a consistent default questionId for migration to ensure backward compatibility\n const defaultQuestionId = this.DEFAULT_MIGRATION_QUESTION_ID;\n\n // Initialize the assessment entry if it doesn't exist\n if (!v2Data.assessments[assessmentId]) {\n v2Data.assessments[assessmentId] = {};\n }\n\n // Create question data with the migrated test data\n const questionData: QuestionData = {};\n\n questionData.actual = {\n ...testData,\n lastModified: Date.now(),\n };\n\n // Set last modified time for the question data\n questionData.lastModified = Date.now();\n\n // Add to the v2 structure\n v2Data.assessments[assessmentId][defaultQuestionId] = questionData;\n }\n\n // Update our instance with migrated data\n this.autoSavedData = { ...v2Data };\n\n // Save the migrated data\n this.storeData();\n }\n\n private ensureDataStructure(): void {\n // Make sure assessment exists\n if (!this.autoSavedData.assessments[this.assessmentId]) {\n this.autoSavedData.assessments[this.assessmentId] = {};\n }\n\n // Make sure question exists\n if (!this.autoSavedData.assessments[this.assessmentId][this.questionId]) {\n this.autoSavedData.assessments[this.assessmentId][this.questionId] = {\n lastModified: Date.now(),\n };\n }\n\n const questionData = this.autoSavedData.assessments[this.assessmentId][this.questionId];\n\n // Ensure preview or actual exists based on current mode\n if (this.isPreview && !questionData.preview) {\n questionData.preview = {\n code: {},\n testCasesLAT: [],\n lastModified: Date.now(),\n };\n } else if (!this.isPreview && !questionData.actual) {\n questionData.actual = {\n code: {},\n testCasesLAT: [],\n lastModified: Date.now(),\n };\n }\n }\n\n private updateLastModified(data: TestData | QuestionData | AutoSavedData): void {\n const now = Date.now();\n data.lastModified = now;\n\n // If updating a TestData, also update its parent QuestionData\n if ('code' in data && this.assessmentId && this.questionId) {\n this.autoSavedData.assessments[this.assessmentId][this.questionId].lastModified = now;\n }\n\n // Always update root timestamp regardless of the object being modified\n this.autoSavedData.lastModified = now;\n }\n\n /**\n * Cleanup with a temporary age threshold\n * @param maxAgeDays Maximum age in days for data to be considered valid\n */\n private cleanupWithReducedThreshold(maxAgeDays: number): void {\n // Call the unified cleanup method with more aggressive parameters\n this.cleanupStorageData({\n storageAgeMultiplier: 2, // More aggressive multiplier\n customStorageAgeDays: maxAgeDays, // Use the provided custom age\n minQuestionDataAgeDays: 0.5, // 12 hours minimum\n assessmentLimitMultiplier: 0.5, // Half the normal assessment limit\n });\n }\n\n /**\n * Unified method to clean up localStorage data with configurable intensity\n * @param options Cleanup options to control the aggressiveness of the cleanup\n */\n private cleanupStorageData(options: {\n storageAgeMultiplier?: number; // Multiplier for storage age threshold (default: 1)\n customStorageAgeDays?: number; // Custom storage age in days (overrides MAX_STORAGE_AGE_DAYS if provided)\n useStandardQuestionDataAge?: boolean; // Whether to use standard question data age (default: false)\n minQuestionDataAgeDays?: number; // Minimum age for question data in days (default: 0.5 - 12 hours)\n assessmentLimitMultiplier?: number; // Multiplier for maximum assessments (default: 1)\n }): void {\n const now = Date.now();\n\n // Determine the storage age threshold\n const storageAgeDays = options.customStorageAgeDays ?? this.MAX_STORAGE_AGE_DAYS;\n const storageAgeThreshold = timeToMs(storageAgeDays); // Convert days to milliseconds\n const multiplier = options.storageAgeMultiplier ?? 1;\n\n // Check if the entire storage is too old and needs cleanup\n if (this.autoSavedData.lastModified && now - this.autoSavedData.lastModified > storageAgeThreshold * multiplier) {\n // If the entire storage is very old, just reset everything\n this.autoSavedData = {\n version: this.CURRENT_STORAGE_VERSION,\n config: this.autoSavedData.config, // Keep the config settings\n isFullscreen: this.autoSavedData.isFullscreen, // Keep fullscreen setting\n assessments: {},\n lastModified: now,\n };\n this.storeData();\n return;\n }\n\n // Structure for collecting assessment data with metadata\n interface AssessmentMetadata {\n id: string;\n lastModified: number;\n }\n\n const assessmentMetadata: AssessmentMetadata[] = [];\n\n // Determine the question data age threshold\n let questionDataAgeThreshold: number;\n if (options.useStandardQuestionDataAge) {\n // Use the standard threshold for normal cleanup\n questionDataAgeThreshold = timeToMs(this.MAX_QUESTION_DATA_AGE_DAYS);\n } else {\n // For maintenance/aggressive cleanup, use a custom threshold\n const minAgeHours = (options.minQuestionDataAgeDays ?? 0.5) * 24; // Convert days to hours\n questionDataAgeThreshold = Math.max(\n timeToMs(this.MAX_QUESTION_DATA_AGE_DAYS), // Standard age in milliseconds\n timeToMs(minAgeHours, 'hours') // Minimum age in milliseconds\n );\n }\n\n // Collect assessments with their latest modification times\n for (const [assessmentId, questions] of Object.entries(this.autoSavedData.assessments)) {\n let assessmentLastModified = 0;\n\n // Check all questions in this assessment\n let hasValidQuestions = false;\n\n for (const [questionId, questionData] of Object.entries(questions)) {\n // Skip if undefined\n if (!questionData) {\n continue;\n }\n\n // Get the latest modification time from preview and actual\n const previewTime = questionData.preview?.lastModified || 0;\n const actualTime = questionData.actual?.lastModified || 0;\n const questionLastModified = Math.max(previewTime, actualTime, questionData.lastModified || 0);\n\n // Check if data is too old - using configured threshold\n const isPreviewTooOld = previewTime > 0 && now - previewTime > questionDataAgeThreshold;\n const isActualTooOld = actualTime > 0 && now - actualTime > questionDataAgeThreshold;\n\n // Clean up old data within the question\n if (isPreviewTooOld && questionData.preview) {\n delete questionData.preview;\n }\n\n if (isActualTooOld && questionData.actual) {\n delete questionData.actual;\n }\n\n // If neither preview nor actual exists, remove the question\n if (!questionData.preview && !questionData.actual) {\n delete questions[questionId];\n } else {\n hasValidQuestions = true;\n assessmentLastModified = Math.max(assessmentLastModified, questionLastModified);\n }\n }\n\n // If no valid questions, remove the assessment\n if (!hasValidQuestions) {\n delete this.autoSavedData.assessments[assessmentId];\n } else {\n // Add to our list for potential size-based cleanup\n assessmentMetadata.push({\n id: assessmentId,\n lastModified: assessmentLastModified,\n });\n }\n }\n\n // Determine the assessment limit based on the multiplier\n const limitMultiplier = options.assessmentLimitMultiplier ?? 1;\n const assessmentLimit = Math.ceil(this.MAX_ASSESSMENTS * limitMultiplier);\n\n // If we have too many assessments, remove the oldest ones\n if (assessmentMetadata.length > assessmentLimit) {\n // Sort by lastModified (most recent first)\n assessmentMetadata.sort((a, b) => b.lastModified - a.lastModified);\n\n // Remove oldest assessments that exceed our limit\n for (let i = assessmentLimit; i < assessmentMetadata.length; i++) {\n delete this.autoSavedData.assessments[assessmentMetadata[i].id];\n }\n }\n\n // Save the cleaned data\n this.storeData();\n }\n\n changeLanguage(language: CodeEditorLanguages) {\n this.language = language;\n }\n\n /**\n * Gets data from v1 schema format\n * Used for backward compatibility when retrieving data\n */\n private getDataFromV1Schema(retrievedData: AutoSavedDataV1): string | (ExampleTestCase | CustomTestCase)[] | null | undefined {\n // For v1, we need to handle the case where we don't have questionId\n // We're now using questionId in the app, but stored data might still be in v1 format\n\n // For preview data, the assessment ID would be AssessmentIdPreview\n if (this.assessmentId === AssessmentIdPreview) {\n if (this.isPreview) {\n // For preview mode on preview assessment, get the code directly\n const code = retrievedData.assessments[this.assessmentId]?.code;\n if (code && this.language in code) {\n return code[this.language];\n }\n }\n // We don't expect actual/non-preview data for AssessmentIdPreview\n return null;\n } else {\n // For regular assessments, v1 only had code in the \"actual\" section\n if (!this.isPreview) {\n const code = retrievedData.assessments[this.assessmentId]?.code;\n if (code && this.language in code) {\n return code[this.language];\n }\n }\n // We don't have preview data for regular assessments in v1\n return null;\n }\n }\n\n getSavedCode(): string | null | undefined {\n const retrievedData = this.retrieveData();\n if (!retrievedData) {\n return null;\n }\n\n // Check if using v2 schema\n if ('version' in retrievedData) {\n // Handle v2 schema\n const v2Data = retrievedData;\n const assessmentData = v2Data.assessments[this.assessmentId];\n\n if (!assessmentData) {\n return null;\n }\n\n // First try with provided questionId\n if (this.questionId && assessmentData[this.questionId]) {\n const questionData = assessmentData[this.questionId];\n const testData = this.isPreview ? questionData.preview : questionData.actual;\n if (testData?.code && this.language in testData.code) {\n return testData.code[this.language];\n }\n }\n\n if (\n this.questionId !== this.DEFAULT_MIGRATION_QUESTION_ID &&\n assessmentData[this.DEFAULT_MIGRATION_QUESTION_ID]\n ) {\n const questionData = assessmentData[this.DEFAULT_MIGRATION_QUESTION_ID];\n const testData = this.isPreview ? questionData.preview : questionData.actual;\n if (testData?.code && this.language in testData.code) {\n return testData.code[this.language];\n }\n }\n\n return null;\n } else {\n // Handle v1 schema for backward compatibility\n return this.getDataFromV1Schema(retrievedData) as string;\n }\n }\n\n getLastLanguageLAT(): {\n value: CodeEditorLanguages;\n version: string;\n } | null {\n const retrievedData = this.retrieveData();\n if (!retrievedData) {\n return null;\n }\n\n return retrievedData.lastLanguageLAT || null;\n }\n\n getSavedTestCases(): (ExampleTestCase | CustomTestCase)[] | null | undefined {\n const retrievedData = this.retrieveData();\n if (!retrievedData) {\n return null;\n }\n\n // Check if using v2 schema\n if ('version' in retrievedData) {\n // Handle v2 schema\n const v2Data = retrievedData;\n const assessmentData = v2Data.assessments[this.assessmentId];\n\n if (!assessmentData) {\n return null;\n }\n\n // First try with provided questionId\n if (this.questionId && assessmentData[this.questionId]) {\n const questionData = assessmentData[this.questionId];\n const testData = this.isPreview ? questionData.preview : questionData.actual;\n if (testData?.testCasesLAT) {\n return testData.testCasesLAT;\n }\n }\n\n // If not found and questionId != DEFAULT_MIGRATION_QUESTION_ID,\n // also try with the default migration ID as a fallback\n if (\n this.questionId !== this.DEFAULT_MIGRATION_QUESTION_ID &&\n assessmentData[this.DEFAULT_MIGRATION_QUESTION_ID]\n ) {\n const questionData = assessmentData[this.DEFAULT_MIGRATION_QUESTION_ID];\n const testData = this.isPreview ? questionData.preview : questionData.actual;\n if (testData?.testCasesLAT) {\n return testData.testCasesLAT;\n }\n }\n\n return null;\n } else {\n // Handle v1 schema test cases (test cases were only in the actual mode)\n const v1Data = retrievedData;\n if (!this.isPreview && v1Data.assessments[this.assessmentId]?.testCasesLAT) {\n return v1Data.assessments[this.assessmentId].testCasesLAT;\n }\n return null;\n }\n }\n\n getSavedConfig(): Config | null {\n const retrievedData = this.retrieveData();\n return retrievedData?.config ? { ...retrievedData.config } : null;\n }\n\n getSavedFullScreenMode(): boolean | null {\n const retrievedData = this.retrieveData();\n return retrievedData?.isFullscreen !== undefined ? retrievedData.isFullscreen : null;\n }\n\n clearSavedCode(): void {\n this.ensureDataStructure();\n const questionData = this.autoSavedData.assessments[this.assessmentId][this.questionId];\n const targetTestData = this.isPreview ? [questionData.preview] : [questionData.preview, questionData.actual];\n\n let hasChanged = false;\n targetTestData.forEach(testData => {\n if (testData) {\n testData.code = {};\n this.updateLastModified(testData);\n hasChanged = true;\n }\n });\n if (hasChanged) {\n this.storeData();\n }\n }\n\n clearLastLang(): void {\n this.autoSavedData.lastLanguageLAT = null;\n this.updateLastModified(this.autoSavedData);\n this.storeData();\n }\n\n clearSavedTestCases(): void {\n this.ensureDataStructure();\n const questionData = this.autoSavedData.assessments[this.assessmentId][this.questionId];\n const targetTestData = this.isPreview ? questionData.preview : questionData.actual;\n\n if (targetTestData) {\n const hasNoCode = !Object.keys(targetTestData.code ?? {}).length;\n\n if (this.isPreview) {\n targetTestData.testCasesLAT = [];\n this.updateLastModified(targetTestData);\n } else if (hasNoCode) {\n const allQuestions = this.autoSavedData.assessments[this.assessmentId];\n delete allQuestions[this.questionId];\n this.autoSavedData.assessments[this.assessmentId] = { ...allQuestions };\n this.updateLastModified(this.autoSavedData);\n }\n this.storeData();\n }\n }\n\n updateVersion(version: string): void {\n if (this.autoSavedData.lastLanguageLAT) {\n this.autoSavedData.lastLanguageLAT.version = version;\n this.updateLastModified(this.autoSavedData);\n this.storeData();\n }\n }\n\n updateTestCases(testCases: (ExampleTestCase | CustomTestCase)[]) {\n if (this.assessmentId && this.questionId && this.testCasesSaveEnabled) {\n this.ensureDataStructure();\n const questionData = this.autoSavedData.assessments[this.assessmentId][this.questionId];\n const targetTestData = this.isPreview ? questionData.preview : questionData.actual;\n\n if (targetTestData) {\n targetTestData.testCasesLAT = testCases;\n this.updateLastModified(targetTestData);\n this.storeData();\n }\n }\n }\n\n private storeData(): void {\n this.storage.store(this.key, this.autoSavedData);\n }\n\n private retrieveData(): AutoSavedData | AutoSavedDataV1 {\n return this.storage.retrieve(this.key) as AutoSavedData | AutoSavedDataV1;\n }\n\n /**\n * Manually triggers data cleanup and migration.\n * Useful for handling large localStorage or migration when needed.\n * This can be called from application startup or after major events.\n */\n performMaintenanceAndCleanup(): void {\n // Get current data\n const savedData = this.storage.retrieve(this.key);\n\n // If no data, nothing to do\n if (!savedData) {\n return;\n }\n\n // Check if migration needed\n if (!('version' in savedData)) {\n this.migrateFromV1ToV2(savedData as AutoSavedDataV1);\n } else {\n // Already migrated, just perform cleanup\n this.autoSavedData = savedData as AutoSavedData;\n\n // Perform a more aggressive cleanup for manual maintenance\n // by temporarily modifying the cleanup thresholds\n const originalMaxAge = this.MAX_STORAGE_AGE_DAYS;\n const halfAge = Math.floor(originalMaxAge / 2); // Cut threshold in half\n\n // Create a custom cleanup function with reduced threshold\n this.cleanupWithReducedThreshold(halfAge);\n }\n\n // Verify localStorage size is manageable\n try {\n const serializedData = JSON.stringify(this.autoSavedData);\n const sizeInKB = Math.round(serializedData.length / 1024);\n\n // If data is too large (over 2MB), perform more aggressive cleanup\n if (sizeInKB > 2048) {\n console.warn(`Local storage data is large (${sizeInKB}KB), performing deep cleanup`);\n\n // Use extremely aggressive cleanup settings\n this.cleanupStorageData({\n storageAgeMultiplier: 0.5, // Even more aggressive - half the normal age\n minQuestionDataAgeDays: 0.25, // 6 hours minimum\n assessmentLimitMultiplier: 0.2, // Keep only 20% of assessments\n });\n\n // If still too large, keep only a few most recent assessments\n const newSerializedData = JSON.stringify(this.autoSavedData);\n const newSizeInKB = Math.round(newSerializedData.length / 1024);\n\n if (newSizeInKB > 1024) {\n // Keep only recent assessments\n const assessments = this.autoSavedData.assessments;\n // Find the newest timestamp in each assessment\n const getNewestTimestamp = (obj: Record<string, QuestionData>) =>\n Object.values(obj).reduce((max, questionData) => Math.max(max, questionData?.lastModified || 0), 0);\n const entries = Object.entries(assessments).sort(\n ([, a], [, b]) =>\n getNewestTimestamp(b as Record<string, QuestionData>) -\n getNewestTimestamp(a as Record<string, QuestionData>)\n );\n\n // Keep only the 5 most recent assessments\n const keepCount = Math.min(5, entries.length);\n this.autoSavedData.assessments = {};\n\n for (let i = 0; i < keepCount; i++) {\n const [id, data] = entries[i];\n this.autoSavedData.assessments[id] = data as Record<string, QuestionData>;\n }\n\n this.storeData();\n }\n }\n } catch (error) {\n console.error('Error checking localStorage size', error);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TestCasesService {\n private lastTestCaseLocalId = 0;\n\n private activeTestCaseIndexSubj$ = new BehaviorSubject<number | null>(0);\n activeTestCaseIndex$ = this.activeTestCaseIndexSubj$.asObservable();\n\n setActiveTestCase(index: number | null): void {\n this.activeTestCaseIndexSubj$.next(index);\n }\n\n createTestCaseLocalId(): number {\n this.lastTestCaseLocalId += 1;\n return this.lastTestCaseLocalId;\n }\n\n updateTestCaseLocalId(value: number): void {\n this.lastTestCaseLocalId = value;\n }\n\n resetLastTestCaseLocalId(): void {\n this.lastTestCaseLocalId = 0;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { LibCodingTestService } from './lib-coding-test.service';\nimport { Themes } from '../models/theme';\nimport { BehaviorSubject, combineLatest, map } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n private defaultCompanyColor = '#46a997';\n private companyColorSubject = new BehaviorSubject<string>(this.defaultCompanyColor);\n private themeSubject = new BehaviorSubject<Themes>(Themes.Default);\n\n themeColors$ = combineLatest([this.themeSubject, this.companyColorSubject]).pipe(\n map(([theme, companyColor]) => {\n const themeSpecificColor = this.getAdjustedColorForTheme(theme, companyColor);\n return { companyColor, themeSpecificColor };\n })\n );\n\n constructor(private libCodingService: LibCodingTestService) {\n this.libCodingService.themeChanged$.subscribe(theme => {\n this.themeSubject.next(theme);\n });\n }\n\n set companyColor(color: string) {\n this.companyColorSubject.next(color);\n }\n\n private getAdjustedColorForTheme(theme: Themes, color: string): string {\n return theme === Themes.Dark && color.toUpperCase() === '#D410AA' ? '#FFFFFF' : color;\n }\n}\n","export const erlangLanguage = {\n // Define default token\n defaultToken: '',\n\n // Define keywords\n keywords: [\n 'after',\n 'and',\n 'andalso',\n 'band',\n 'begin',\n 'bnot',\n 'bor',\n 'bsl',\n 'bsr',\n 'bxor',\n 'case',\n 'catch',\n 'cond',\n 'div',\n 'end',\n 'fun',\n 'if',\n 'let',\n 'not',\n 'of',\n 'or',\n 'orelse',\n 'query',\n 'receive',\n 'rem',\n 'try',\n 'when',\n 'xor',\n 'define',\n 'elif',\n 'else',\n 'endif',\n 'error',\n 'ifdef',\n 'ifndef',\n 'include',\n 'include_lib',\n 'undef',\n ],\n\n // Define type and function patterns\n typeKeywords: [\n 'atom',\n 'binary',\n 'bitstring',\n 'boolean',\n 'byte',\n 'char',\n 'float',\n 'integer',\n 'list',\n 'number',\n 'pid',\n 'port',\n 'reference',\n 'term',\n 'tuple',\n ],\n\n // Define operators\n operators: ['+', '-', '*', '/', '>', '<', '=', '==', '/=', '=:=', '=/=', '=<', '=>', '&&', '||', '!'],\n\n // Define symbols and delimiters\n symbols: /[=><!~?:&|+\\-*/^%]+/,\n\n // The main tokenizer for Erlang\n tokenizer: {\n root: [\n // Identifiers and keywords\n [/[a-z][\\w$]*/, { cases: { '@keywords': 'keyword', '@default': 'identifier' } }],\n [/[A-Z][\\w$]*/, 'type.identifier'], // to handle the type and module names\n\n // Whitespace\n { include: '@whitespace' },\n\n // Delimiters and operators\n [/[{}()[\\]\\\\]]/, '@brackets'],\n [/@symbols/, { cases: { '@operators': 'operator', '@default': '' } }],\n\n // Numbers\n [/\\d+\\.\\d*([eE][-+]?\\d+)?/, 'number.float'],\n [/\\d+/, 'number'],\n\n // Strings\n [/\"/, { token: 'string', bracket: '@open', next: '@string' }],\n\n // Atoms\n [/'([^'\\\\]|\\\\.)*$/, 'string.invalid'], // non-terminated atom\n [/'/, { token: 'string', bracket: '@open', next: '@atom' }],\n ],\n\n string: [\n [/[^\\\\\"]+/, 'string'],\n [/\\\\./, 'string.escape'],\n [/\"/, { token: 'string', bracket: '@close', next: '@pop' }],\n ],\n\n atom: [\n [/[^\\\\']+/, 'string'],\n [/\\\\./, 'string.escape'],\n [/'/, { token: 'string', bracket: '@close', next: '@pop' }],\n ],\n\n whitespace: [\n [/[ \\t\\r\\n]+/, 'white'],\n [/%.*$/, 'comment'], // Single line comment\n ],\n },\n};\n","import { CodeEditorLanguages, CodeEditorTypesMap } from './code-editor-helper.model';\n\nexport abstract class CodeEditorHelperBase {\n protected language: CodeEditorLanguages;\n protected typesMap: CodeEditorTypesMap;\n\n abstract getFunctionOpening(): string;\n\n getEditorLang(): CodeEditorLanguages {\n return this.language;\n }\n\n protected parseType(type: keyof CodeEditorTypesMap): string {\n return this.typesMap[type];\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorCHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.C;\n typesMap: CodeEditorTypesMap = {\n boolean: 'bool',\n int: 'int',\n number: 'int',\n double: 'double',\n float: 'float',\n str: 'char *',\n array_boolean: 'bool *',\n array_int: 'int *',\n array_float: 'float *',\n array_double: 'double *',\n };\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `${showingReturnType} ${funcName}(${params}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${this.parseType(values.type)} ${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorCppHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.CppEditor;\n typesMap: CodeEditorTypesMap = {\n boolean: 'bool',\n int: 'int',\n number: 'int',\n double: 'double',\n float: 'float',\n str: 'std::string',\n array_boolean: 'std::vector<bool>',\n array_int: 'std::vector<int>',\n array_float: 'std::vector<float>',\n array_double: 'std::vector<double>',\n array_str: 'std::vector<std::string>',\n };\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `${showingReturnType} ${funcName}(${params}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${this.parseType(values.type)} ${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorCSharpHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.CSharpEditor;\n typesMap: CodeEditorTypesMap = {\n boolean: 'bool',\n int: 'int',\n number: 'int',\n double: 'double',\n float: 'float',\n str: 'string',\n array_boolean: 'bool[]',\n array_int: 'int[]',\n array_float: 'Float[]',\n array_double: 'double[]',\n array_str: 'string[]',\n };\n\n private importText =\n 'using System;\\nusing System.Linq;\\nnamespace TestTaker\\n{\\n\\tpublic static class CustomCode\\n\\t{\\n';\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.importText}${this.getFunctionOpening()}\\t\\t //Insert your code here \\n\\t\\t}\\n\\t}\\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `\\t\\tpublic static ${showingReturnType} ${funcName}(${params}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${this.parseType(values.type)} ${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorGoHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Go;\n typesMap: CodeEditorTypesMap = {\n boolean: 'bool',\n int: 'int',\n number: 'int',\n double: 'double',\n float: 'float64',\n str: 'string',\n array_boolean: '[]bool',\n array_int: '[]int',\n array_float: '[]float64',\n array_str: '[]string',\n };\n\n private importPackagesText = 'package testtaker\\nimport ()\\n';\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.importPackagesText}${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n const uppercasedFuncName = `${funcName.charAt(0).toUpperCase()}${funcName.slice(1)}`;\n\n return `func ${uppercasedFuncName}(${params}) ${showingReturnType} {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name} ${this.parseType(values.type)}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorJavaHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Java;\n typesMap: CodeEditorTypesMap = {\n boolean: 'Boolean',\n int: 'Integer',\n number: 'Integer',\n double: 'Double',\n float: 'Float',\n str: 'String',\n array_boolean: 'Boolean[]',\n array_int: 'Integer[]',\n array_float: 'Float[]',\n array_double: 'Double[]',\n array_str: 'String[]',\n };\n\n private classOpening = 'public class TestTaker {\\n';\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.classOpening}${this.getFunctionOpening()}\\t\\t //Insert your code here \\n\\t}\\n`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `\\tpublic static ${showingReturnType} ${funcName}(${params}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${this.parseType(values.type)} ${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport { CodeEditorFuncOptions, CodeEditorHelper, CodeEditorLanguages } from './code-editor-helper.model';\n\nexport class CodeEditorJavascriptHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Javascript;\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName } = this.functionOptions;\n\n return `export function ${funcName}(${this.getParamsString()}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorKotlinHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Kotlin;\n typesMap: CodeEditorTypesMap = {\n boolean: 'Boolean',\n int: 'Int',\n number: 'int',\n double: 'Double',\n float: 'Float',\n str: 'String',\n array_boolean: 'Array<Boolean>',\n array_int: 'Array<Int>',\n array_float: 'Array<Float>',\n array_double: 'Array<Double>',\n array_str: 'Array<String>',\n };\n\n private packagesText = 'package com.testgorilla.testtaker\\n';\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.packagesText}${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `fun ${funcName}(${params}): ${showingReturnType} {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}: ${this.parseType(values.type)}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport { CodeEditorFuncOptions, CodeEditorHelper, CodeEditorLanguages } from './code-editor-helper.model';\n\nexport class CodeEditorPhpHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Php;\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t //Insert your code here \\n}\\n ?>`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName } = this.functionOptions;\n\n return `<?php function ${funcName}(${this.getParamsString()}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `$${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport { CodeEditorFuncOptions, CodeEditorHelper, CodeEditorLanguages } from './code-editor-helper.model';\n\nexport class CodeEditorPythonHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Python;\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t #Insert your code here \\n`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName } = this.functionOptions;\n\n return `def ${funcName}(${this.getParamsString()}): \\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport { CodeEditorFuncOptions, CodeEditorHelper, CodeEditorLanguages } from './code-editor-helper.model';\n\nexport class CodeEditorRHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.R;\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t #Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName } = this.functionOptions;\n\n return `${funcName} <- function(${this.getParamsString()}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport { CodeEditorFuncOptions, CodeEditorHelper, CodeEditorLanguages } from './code-editor-helper.model';\n\nexport class CodeEditorRubyHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Ruby;\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t #Insert your code here \\nend`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName } = this.functionOptions;\n\n return `def ${funcName}(${this.getParamsString()})\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorScalaHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Scala;\n typesMap: CodeEditorTypesMap = {\n boolean: 'Boolean',\n int: 'Int',\n double: 'Double',\n float: 'Float',\n str: 'String',\n array_boolean: 'Array[Boolean]',\n array_int: 'Array[Integer]',\n array_float: 'Array[Float]',\n array_double: 'Array[Double]',\n array_str: 'Array[String]',\n };\n\n private packagesText = 'package Testgorilla\\nobject TestTaker\\n';\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.packagesText}${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `def ${funcName}(${params}) : ${showingReturnType} = {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}: ${this.parseType(values.type)}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorSqlOperations,\n} from './code-editor-helper.model';\n\nexport class CodeEditorSqlHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Sql;\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}${this.getOperationCode()}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName } = this.functionOptions;\n\n return `${funcName || ''}\\n`;\n }\n\n private getOperationCode(): string {\n const { name: funcName } = this.functionOptions;\n\n switch (funcName) {\n case CodeEditorSqlOperations.Select:\n return '## FROM ## WHERE ##;\\n';\n case CodeEditorSqlOperations.Update:\n return '## SET ## WHERE ##;\\n';\n case CodeEditorSqlOperations.Insert:\n return 'INTO ## WHERE ##;\\n';\n case CodeEditorSqlOperations.Delete:\n return '## FROM ## WHERE ##;\\n';\n case CodeEditorSqlOperations.CreateTable:\n return '## VALUES ##;\\n';\n default:\n return '';\n }\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorSwiftHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Swift;\n typesMap: CodeEditorTypesMap = {\n boolean: 'Bool',\n int: 'Int',\n double: 'Double',\n float: 'Float',\n str: 'String',\n array_boolean: '[Bool]',\n array_int: '[Int]',\n array_float: '[Float]',\n array_double: '[Double]',\n array_str: '[String]',\n };\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `func ${funcName}(${params}) -> ${showingReturnType} {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `_ ${values.name}: ${this.parseType(values.type)}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorTypescriptHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Typescript;\n typesMap: CodeEditorTypesMap = {\n boolean: 'boolean',\n int: 'number',\n number: 'number',\n double: 'number',\n float: 'number',\n str: 'string',\n array_boolean: 'Array<boolean>',\n array_int: 'Array<number>',\n array_float: 'Array<number>',\n array_double: 'Array<number>',\n array_str: 'Array<string>',\n };\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `export default function ${funcName}(${params}): ${showingReturnType} {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}: ${this.parseType(values.type)}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n CodeEditorCHelper,\n CodeEditorCppHelper,\n CodeEditorCSharpHelper,\n CodeEditorGoHelper,\n CodeEditorJavaHelper,\n CodeEditorJavascriptHelper,\n CodeEditorKotlinHelper,\n CodeEditorPhpHelper,\n CodeEditorPythonHelper,\n CodeEditorRHelper,\n CodeEditorRubyHelper,\n CodeEditorScalaHelper,\n CodeEditorSqlHelper,\n CodeEditorSwiftHelper,\n CodeEditorTypescriptHelper,\n} from './helpers';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n} from './helpers/code-editor-helper.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CodeEditorService {\n private helper: CodeEditorHelper;\n\n setHelper(language: string, funcParams: CodeEditorFuncOptions): void {\n this.helper = this.createHelper(language, funcParams);\n }\n\n getInitCode(): string {\n return this.helper.getInitCode();\n }\n\n getEditorLang(): string {\n return this.helper.getEditorLang();\n }\n\n private createHelper(lang: string, funcParams: CodeEditorFuncOptions): CodeEditorHelper {\n // todo: review this logic according to new TAT, remove generated init code if not needed ?\n switch (lang as CodeEditorLanguages) {\n case CodeEditorLanguages.Javascript:\n return new CodeEditorJavascriptHelper(funcParams);\n case CodeEditorLanguages.Typescript:\n return new CodeEditorTypescriptHelper(funcParams);\n case CodeEditorLanguages.Php:\n return new CodeEditorPhpHelper(funcParams);\n case CodeEditorLanguages.Python:\n return new CodeEditorPythonHelper(funcParams);\n case CodeEditorLanguages.Java:\n return new CodeEditorJavaHelper(funcParams);\n case CodeEditorLanguages.Ruby:\n return new CodeEditorRubyHelper(funcParams);\n case CodeEditorLanguages.C:\n return new CodeEditorCHelper(funcParams);\n case CodeEditorLanguages.Cpp:\n return new CodeEditorCppHelper(funcParams);\n case CodeEditorLanguages.R:\n return new CodeEditorRHelper(funcParams);\n case CodeEditorLanguages.Scala:\n return new CodeEditorScalaHelper(funcParams);\n case CodeEditorLanguages.CSharp:\n case CodeEditorLanguages.CSharpLegacy:\n return new CodeEditorCSharpHelper(funcParams);\n case CodeEditorLanguages.Go:\n return new CodeEditorGoHelper(funcParams);\n case CodeEditorLanguages.Sql:\n case CodeEditorLanguages.Sqlite:\n return new CodeEditorSqlHelper(funcParams);\n default: {\n const versionedHelper = lang && this.getVersionedHelper(lang, funcParams);\n\n if (!versionedHelper) {\n throw new Error(`language ${lang} is not supported`);\n }\n\n return versionedHelper;\n }\n }\n }\n\n private getVersionedHelper(lang: string, funcParams: CodeEditorFuncOptions): CodeEditorHelper {\n if (lang.startsWith(CodeEditorLanguages.Kotlin)) {\n return new CodeEditorKotlinHelper(funcParams);\n }\n if (lang.startsWith(CodeEditorLanguages.Swift)) {\n return new CodeEditorSwiftHelper(funcParams);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { editor, IDisposable } from 'monaco-editor';\nimport { combineLatest, distinctUntilChanged, filter, first, interval, map, take } from 'rxjs';\nimport { MonacoEditorModule } from 'ngx-monaco-editor-v2';\n\nimport { erlangLanguage } from '../../utils/additional-languages/erlang';\nimport { CodingAssistanceOptions, Config, FormattingOptions } from '../../models/configs';\nimport { Themes } from '../../models/theme';\nimport { ConfigurationsService } from '../../services/configurations.service';\nimport { LibCodingTestService, ResetCodeAction } from '../../services/lib-coding-test.service';\nimport { StorageCodingService } from '../../services/storage.service';\nimport { CodeEditorService } from './code-editor.service';\nimport { CodeEditorFuncParam, CodeEditorLanguages, CodeEditorTypesMap } from './helpers/code-editor-helper.model';\nimport { MonacoColorTheme, PasteData } from './models/code-editor.model';\nimport { CodingSnapshot } from './models/coding-snapshot.model';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'tgo-code-editor',\n templateUrl: './code-editor.component.html',\n styleUrls: ['./code-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, MonacoEditorModule],\n})\nexport class CodeEditorComponent implements OnInit, OnDestroy, OnChanges {\n private readonly libCodingTestService = inject(LibCodingTestService);\n private readonly configurationsService = inject(ConfigurationsService);\n private readonly codeEditorService = inject(CodeEditorService);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly StorageCodingService = inject(StorageCodingService);\n\n @Input() initCode: string;\n @Input() functionParams: CodeEditorFuncParam[];\n @Input() functionName: string;\n @Input() returnType: keyof CodeEditorTypesMap;\n @Input() hasCodingConfigPanel: boolean;\n @Input() isReadonly: boolean;\n @Input() autoHeight: boolean;\n @Input() shouldGenerateInitCode: boolean;\n\n @Input() set snapshot(snap: CodingSnapshot) {\n if (snap) {\n this.currentSnapshot = snap;\n this.handleSnapshot(snap.text);\n }\n }\n\n @Output() pasteEvent = new EventEmitter<PasteData>();\n @Output() codeChange = new EventEmitter<string>();\n\n @ViewChild('editor', { read: ElementRef }) codeEditorElRef: ElementRef;\n\n code = '';\n codePublished = '';\n codeLanguage = '';\n editorOptions: { [key: string]: any } = {\n theme: MonacoColorTheme.Dark,\n fontSize: '14',\n scrollBeyondLastLine: false,\n minimap: { enabled: false },\n fixedOverflowWidgets: true,\n insertSpaces: false,\n detectIndentation: false,\n automaticLayout: true,\n };\n\n editor: editor.ICodeEditor;\n previousConfig = this.StorageCodingService.getSavedConfig();\n\n currentSnapshot: CodingSnapshot;\n previousMonacoDecoration: editor.IEditorDecorationsCollection;\n\n private pasteListener: IDisposable;\n private contentChangedSub: IDisposable;\n\n ngOnInit(): void {\n if (!this.previousConfig) {\n this.previousConfig = this.configurationsService.getInitialConfig();\n }\n\n if (this.hasCodingConfigPanel) {\n this.updateIDEConfig();\n }\n this.listenUpdates();\n\n this.setupConfigs();\n this.setupCode();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (typeof changes.initCode?.currentValue === 'string') {\n this.code = changes.initCode.currentValue;\n }\n }\n\n ngOnDestroy(): void {\n this.contentChangedSub?.dispose();\n this.pasteListener?.dispose();\n }\n\n initEditor(editor: editor.ICodeEditor): void {\n this.editor = editor;\n\n this.pasteListener = this.editor.onDidPaste(event => this.catchEvent(event));\n\n if (this.currentSnapshot) {\n this.handleSnapshot(this.currentSnapshot.text);\n }\n\n if (this.autoHeight) {\n this.listenContentHeight(editor);\n }\n }\n\n private catchEvent(event: editor.IPasteEvent): void {\n const data = this.editor.getModel()?.getValueInRange(event.range);\n if (data) {\n this.pasteEvent.emit({ type: 'paste', data });\n }\n }\n\n publishCode(code): void {\n if (code !== this.codePublished) {\n this.codePublished = code;\n this.codeChange.emit(this.codePublished);\n }\n }\n\n private updateIDEConfig(): void {\n this.configurationsService.config$\n .pipe(distinctUntilChanged(), untilDestroyed(this))\n .subscribe((config: Config) => {\n let configObject = {};\n // eslint-disable-next-line guard-for-in\n for (const key in config) {\n if (config[key] !== this.previousConfig[key]) {\n switch (key as FormattingOptions | CodingAssistanceOptions) {\n case FormattingOptions.ColorTheme:\n configObject = {\n theme:\n config[FormattingOptions.ColorTheme] === Themes.Default\n ? MonacoColorTheme.Light\n : MonacoColorTheme.Dark,\n };\n\n break;\n case CodingAssistanceOptions.AutoComplete:\n configObject = {\n quickSuggestions: {\n other: config[CodingAssistanceOptions.AutoComplete],\n },\n };\n\n break;\n case CodingAssistanceOptions.AutoBrackets:\n configObject = {\n autoClosingBrackets: config[CodingAssistanceOptions.AutoBrackets] ? 'always' : 'never',\n };\n\n break;\n case FormattingOptions.TabSize:\n configObject = {\n tabSize: config[FormattingOptions.TabSize],\n };\n\n break;\n case FormattingOptions.FontSize:\n configObject = {\n fontSize: config[FormattingOptions.FontSize],\n };\n\n break;\n case CodingAssistanceOptions.ErrorHighlighting:\n this.libCodingTestService.currentLanguage$.pipe(take(1)).subscribe(language => {\n if (language === CodeEditorLanguages.Javascript) {\n window['monaco'].languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n noSyntaxValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n });\n } else if (language === CodeEditorLanguages.Typescript) {\n window['monaco'].languages.typescript.typescriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n noSyntaxValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n });\n }\n });\n break;\n }\n this.editorOptions = Object.assign({}, this.editorOptions, configObject);\n }\n }\n this.changeDetectorRef.detectChanges();\n this.previousConfig = config;\n });\n\n this.editorOptions = Object.assign({}, this.editorOptions, {\n automaticLayout: true,\n });\n }\n\n private listenContentHeight(editor: editor.ICodeEditor): void {\n const updateHeight = () => {\n window.requestAnimationFrame(() => {\n const { width } = this.codeEditorElRef.nativeElement.getBoundingClientRect();\n const contentHeight = Math.min(1000, editor.getContentHeight());\n this.codeEditorElRef.nativeElement.style.height = `${contentHeight}px`;\n editor.layout({ width, height: contentHeight });\n });\n };\n\n this.contentChangedSub = editor.onDidContentSizeChange(updateHeight);\n updateHeight();\n }\n\n private setupConfigs(): void {\n const { functionParams: params, functionName: name, returnType } = this;\n\n const config = this.previousConfig;\n\n const wordWrap = this.currentSnapshot ? 'on' : 'off';\n const theme = this.getInitialColorTheme(config, this.currentSnapshot);\n\n this.libCodingTestService.currentLanguage$.pipe(untilDestroyed(this)).subscribe((language: CodeEditorLanguages) => {\n if (this.shouldGenerateInitCode) {\n this.codeEditorService.setHelper(language, { params, name, returnType });\n this.codeLanguage = this.codeEditorService.getEditorLang();\n } else {\n if (language === CodeEditorLanguages.Cpp) {\n this.codeLanguage = CodeEditorLanguages.CppEditor;\n } else if (language === CodeEditorLanguages.CSharp || language === CodeEditorLanguages.CSharpLegacy) {\n this.codeLanguage = CodeEditorLanguages.CSharpEditor;\n } else if (language === CodeEditorLanguages.Sqlite) {\n this.codeLanguage = CodeEditorLanguages.Sql;\n } else {\n this.codeLanguage = language;\n }\n }\n this.editorOptions = Object.assign({}, this.editorOptions, {\n language: this.codeLanguage,\n });\n });\n\n this.editorOptions = Object.assign({}, this.editorOptions, {\n readOnly: this.isReadonly,\n quickSuggestions: {\n other: config[CodingAssistanceOptions.AutoComplete],\n },\n autoClosingBrackets: config[CodingAssistanceOptions.AutoBrackets] ? 'always' : 'never',\n tabSize: config[FormattingOptions.TabSize],\n fontSize: config[FormattingOptions.FontSize],\n theme,\n wordWrap,\n });\n const monacoLibraryReady$ = interval(100).pipe(\n map(() => window.monaco),\n filter(Boolean),\n first()\n );\n combineLatest({\n monaco: monacoLibraryReady$,\n language: this.libCodingTestService.currentLanguage$,\n })\n .pipe(take(1))\n .subscribe(result => {\n if (result.language === CodeEditorLanguages.Javascript) {\n result.monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n noSyntaxValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n });\n } else if (result.language === CodeEditorLanguages.Typescript) {\n result.monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n noSyntaxValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n });\n }\n result.monaco.languages.register({ id: CodeEditorLanguages.Erlang });\n result.monaco.languages.setMonarchTokensProvider(CodeEditorLanguages.Erlang, erlangLanguage);\n });\n }\n\n private getInitialColorTheme(config: Config, snapshot: CodingSnapshot): string {\n let theme: MonacoColorTheme;\n\n if (snapshot) {\n theme = MonacoColorTheme.Dark;\n } else {\n theme = config[FormattingOptions.ColorTheme] === Themes.Default ? MonacoColorTheme.Light : MonacoColorTheme.Dark;\n }\n\n return theme;\n }\n\n private setupCode(calledFromReset = false) {\n this.handleInitCode(calledFromReset);\n this.publishCode(this.code);\n }\n\n private handleInitCode(calledFromReset = false): void {\n if (calledFromReset) {\n this.code = this.libCodingTestService.getInitCode();\n } else if (this.initCode) {\n this.code = this.initCode;\n } else if (this.currentSnapshot) {\n return;\n } else if (this.shouldGenerateInitCode) {\n this.code = this.codeEditorService.getInitCode();\n }\n }\n\n private listenUpdates(): void {\n this.libCodingTestService.codeReset$\n .pipe(\n filter(val => val === ResetCodeAction.Confirm),\n untilDestroyed(this)\n )\n .subscribe(() => {\n this.setupCode(true);\n });\n }\n\n private handleSnapshot(code: string): void {\n this.code = code;\n\n if (!this.editor) {\n return;\n }\n\n this.editor.setValue(code); // make sure editor model has the latest value of the code\n\n if (this.previousMonacoDecoration) {\n this.previousMonacoDecoration.clear();\n }\n\n if (this.currentSnapshot.copied_text) {\n // if the snapshot contains copyPasted code, find it's range in monaco\n const matches = this.editor\n .getModel()\n .findMatches(this.currentSnapshot.copied_text, false, false, true, null, true);\n\n if (matches.length) {\n // if the range is found in editor model, decorate it with additional class to highlight on the ui\n this.previousMonacoDecoration = this.editor.createDecorationsCollection([\n {\n range: matches[0].range,\n options: { inlineClassName: 'copy-pasted-code' },\n },\n ]);\n }\n }\n }\n}\n","<div class=\"container notranslate\" translate=\"no\">\n <ngx-monaco-editor\n #editor\n class=\"editor\"\n [options]=\"editorOptions\"\n [(ngModel)]=\"code\"\n (ngModelChange)=\"publishCode($event)\"\n (onInit)=\"initEditor($event)\"\n ></ngx-monaco-editor>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * USAGE:\n * {{ argument | memoizeFunc : method [: context] }}\n *\n * You could provide multiple arguments for the function like that:\n * {{ [argument1, argument2] | memoizeFunc : method [: context] }}\n *\n *\n * FUNCTION WITH CONTEXT\n * We still could have optimization in impure functions with Angular pipes. Just provide context as second parameter\n * to the memoizeFunc pipe.\n *\n * {{ argument | memoizeFunc : method : this }}\n *\n * Alternative variant use 'bind'\n *\n * {{ argument | memoizeFunc : method.bind(this) }}\n *\n * */\n@Pipe({\n name: 'memoizeFunc',\n standalone: true,\n})\nexport class MemoizeFuncPipe implements PipeTransform {\n transform<T, K>(value: T, handler: (value: T) => K, context?: any): K {\n if (context) {\n return handler.call(context, value);\n }\n\n return handler(value);\n }\n}\n","import { Component, ElementRef, inject, Input, OnInit, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport Quill from 'quill';\nimport { TableCell, TableContainer, TableRow } from 'quill/formats/table';\nimport { asyncScheduler, observeOn, of, take } from 'rxjs';\nimport { QuillModule } from 'ngx-quill';\nimport { TooltipComponentModule, IconComponentModule, DividerComponentModule } from '@testgorilla/tgo-ui';\n\nimport { Modes } from '../../models/mode';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';\n\nclass TGOTableCell extends TableCell {\n public static className = 'td-q';\n}\n\nclass TGOTableRow extends TableRow {\n public static className = 'tr-q';\n}\n\nclass TGOTableContainer extends TableContainer {\n public static className = 'table-q';\n}\n\n@Component({\n standalone: true,\n selector: 'tgo-code-instructions',\n templateUrl: 'instructions.component.html',\n styleUrls: ['instructions.component.scss'],\n imports: [\n CommonModule,\n QuillModule,\n TooltipComponentModule,\n IconComponentModule,\n DividerComponentModule,\n MemoizeFuncPipe,\n ],\n})\nexport class InstructionsComponent implements OnInit {\n private readonly libCodingTestService = inject(LibCodingTestService);\n\n readonly PreviewMode = Modes.Preview;\n readonly RunningMode = Modes.Running;\n readonly NonAssessmentPreview = Modes.NonAssessmentPreview;\n @Input() mode = Modes.Preview;\n @Input() questionText: string;\n @Input() translations: Record<string, unknown>;\n @Input() isDarkTheme: boolean;\n @Input() isLAT = false;\n language$ = this.libCodingTestService.currentLanguage$;\n\n @ViewChild('quill', { read: ElementRef }) set QuillElement(quill: ElementRef) {\n if (!quill) {\n return;\n }\n\n this.manualHighlight(quill.nativeElement);\n }\n\n languages = {\n c: 'C GCC',\n 'c#': 'C# SDK',\n 'c#_legacy': 'C# SDK',\n 'c++': 'C++ G++',\n java: 'Java OpenJDK',\n python: 'Python',\n javascript: 'JavaScript Node',\n php: 'PHP',\n sql: 'SQL SQLite',\n typescript: 'Typescript',\n ruby: 'Ruby',\n go: 'Go',\n r: 'R',\n kotlin: 'Kotlin',\n elixir: 'Elixir',\n rust: 'Rust',\n dart: 'Dart',\n erlang: 'Erlang',\n julia: 'Julia',\n perl: 'Perl',\n swift: 'Swift',\n scala: 'Scala',\n };\n languagesVersion: { [key: string]: string } = {\n c: '10',\n 'c#': '3.1.300',\n 'c#_legacy': '3.1.300',\n 'c++': '10',\n java: '12',\n python: '3.8',\n javascript: '13',\n php: '7.4',\n sql: '3.31.1',\n typescript: '4.3.4',\n ruby: '3',\n go: '1.16',\n r: '4.1.0',\n kotlin: '',\n elixir: '',\n rust: '',\n dart: '',\n erlang: '',\n julia: '',\n perl: '',\n swift: '',\n scala: '2.11',\n };\n\n private manualHighlight(quillElement: HTMLElement): void {\n const codeElements = quillElement.getElementsByTagName('pre');\n\n if (!codeElements.length) {\n return;\n }\n\n of(Array.from(codeElements))\n .pipe(observeOn(asyncScheduler), take(1))\n .subscribe((codeElements: HTMLPreElement[]) => {\n if (!window.hljs) {\n return;\n }\n\n codeElements.forEach(el => {\n window.hljs.highlightBlock(el);\n });\n });\n }\n\n ngOnInit(): void {\n Quill.register(TGOTableCell, true);\n Quill.register(TGOTableRow, true);\n Quill.register(TGOTableContainer, true);\n }\n\n getVersion([isLAT, key]: [boolean, string]): string {\n return isLAT ? this.libCodingTestService.getVersion() : this.languagesVersion[key];\n }\n}\n","<ng-container *ngIf=\"language$ | async as language\">\n <section *ngIf=\"questionText\" class=\"question\" id=\"question-section\">\n <header class=\"question-header\">\n <h2 class=\"question-heading\">{{ translations['HEADINGS']['INSTRUCTIONS'] }}</h2>\n </header>\n <div class=\"question-content\">\n <ng-container *ngIf=\"mode === PreviewMode\">\n <div class=\"tips\">\n <ui-tooltip [message]=\"translations['PRACTICE_QUESTIONS_STAGE']['INFO']\" class=\"tips-icon\">\n <ui-icon [name]=\"'Info'\" [size]=\"'24'\"></ui-icon>\n </ui-tooltip>\n <p class=\"tips-panel-text\">\n {{ translations['PRACTICE_QUESTIONS_STAGE']['QUESTIONS_INDEXING_AS_LAST'] }}\n </p>\n </div>\n <p class=\"tips-text\" [innerHTML]=\"translations['CODE_QUESTION']['PRACTICE_INTRODUCTION']\"></p>\n <ui-divider class=\"divider\" [size]=\"'small'\"></ui-divider>\n </ng-container>\n\n <quill-view\n #quill\n class=\"disable-text-selection question-text\"\n [class.question-text-dark]=\"isDarkTheme\"\n theme=\"snow\"\n [content]=\"questionText\"\n ></quill-view>\n <div [ngSwitch]=\"language\">\n <span class=\"mr-4\">{{ translations['CODE_QUESTION']['LANGUAGE_USING'] }} </span>\n <ng-container *ngFor=\"let item of languages | keyvalue\">\n <span *ngSwitchCase=\"item.key\">\n <span class=\"bold mr-4\">{{ item.value + ' ' + ([isLAT, item.key] | memoizeFunc: getVersion : this) }}</span>\n </span>\n </ng-container>\n <span *ngIf=\"mode === RunningMode || mode === NonAssessmentPreview\">\n <br />\n <span>{{ translations['CODE_QUESTION']['ADD_COMMENTS'] }}</span>\n </span>\n </div>\n </div>\n </section>\n</ng-container>\n","import { Observable, Subscriber } from 'rxjs';\n\nexport function resizeElement(element: Element): Observable<ResizeObserverEntry> {\n return new Observable((observer: Subscriber<ResizeObserverEntry>) => {\n const resizeObserver = new ResizeObserver(([entry]) => {\n observer.next(entry);\n });\n\n resizeObserver.observe(element);\n\n return () => {\n resizeObserver.disconnect();\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { distinctUntilChanged, Observable, of, take, tap } from 'rxjs';\nimport {\n ApplicationTheme,\n OptionType,\n TooltipComponentModule,\n DropdownComponentModule,\n ButtonComponentModule,\n SpinnerComponentModule,\n} from '@testgorilla/tgo-ui';\n\nimport { LanguageChangeAction } from '../../models/language-change-action';\nimport { LATLanguages } from '../../models/lat-languages';\nimport { ConfigurationsService } from '../../services/configurations.service';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport { StorageCodingService } from '../../services/storage.service';\nimport {\n CodeEditorFuncParam,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from '../code-editor/helpers/code-editor-helper.model';\nimport { PasteData } from '../code-editor/models/code-editor.model';\nimport { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';\nimport { CodeEditorComponent } from '../code-editor/code-editor.component';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'tgo-coding-section',\n templateUrl: './coding-section.component.html',\n styleUrls: ['./coding-section.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TooltipComponentModule,\n DropdownComponentModule,\n ButtonComponentModule,\n SpinnerComponentModule,\n MemoizeFuncPipe,\n CodeEditorComponent,\n ],\n})\nexport class CodingSectionComponent implements OnInit, OnChanges {\n private readonly configurationsService = inject(ConfigurationsService);\n private readonly libCodingTestService = inject(LibCodingTestService);\n private readonly StorageCodingService = inject(StorageCodingService);\n private readonly fb = inject(FormBuilder);\n\n @Input() initCode: string;\n @Input() functionParams: CodeEditorFuncParam[];\n @Input() functionName: string;\n @Input() returnType: keyof CodeEditorTypesMap;\n @Input() isLAT = false;\n @Input() languages: LATLanguages;\n @Input() isFullViewMode: boolean;\n @Input() shouldGenerateInitCode: boolean;\n @Input() isRunnableWithLangSelector: boolean;\n @Input() autoHeight: boolean;\n @Input() translations: Record<string, unknown>;\n @Input() isMobile: boolean;\n @Input() applicationTheme: ApplicationTheme;\n\n @Output() pasteEvent = new EventEmitter<PasteData>();\n @Output() codeChange = new EventEmitter<string>();\n @Output() languageChange = new EventEmitter<CodeEditorLanguages>();\n\n headerForm: FormGroup;\n isFullscreenMode$ = this.libCodingTestService.isFullscreen$;\n previousLanguage: CodeEditorLanguages;\n code: string;\n\n languagesFormattedList: OptionType[];\n\n ngOnInit() {\n if (this.isLAT) {\n this.createHeaderForm().subscribe(() => {\n this.initializeLanguage();\n this.listenLanguageDropdownChanges();\n this.handleLanguageChangeModal();\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (typeof changes.initCode?.currentValue === 'string') {\n this.codeChange.emit(changes.initCode.currentValue);\n this.libCodingTestService.changeCurrentCode(changes.initCode.currentValue);\n }\n if (changes.languages?.currentValue) {\n this.languagesFormattedList = this.languages.map(({ value, label }) => ({\n value,\n displayValue: label,\n }));\n }\n }\n\n private createHeaderForm(): Observable<CodeEditorLanguages> {\n return this.libCodingTestService.currentLanguage$.pipe(\n take(1),\n tap(lastLanguage => {\n this.headerForm = this.fb.group({\n language: lastLanguage ? lastLanguage : this.languages[0].value,\n });\n if (this.languages.length === 1) {\n this.language.disable();\n }\n })\n );\n }\n\n private initializeLanguage() {\n this.previousLanguage = this.language.value as CodeEditorLanguages;\n }\n\n private listenLanguageDropdownChanges() {\n this.language.valueChanges\n .pipe(untilDestroyed(this), distinctUntilChanged())\n .subscribe((value: CodeEditorLanguages) => {\n if (value !== this.previousLanguage) {\n this.languageChange.emit(value);\n }\n });\n }\n\n private handleLanguageChangeModal() {\n this.libCodingTestService.languageChange$.pipe(untilDestroyed(this)).subscribe(value => {\n if (value === LanguageChangeAction.Cancel) {\n // Revert language to previous selection if user cancels\n this.language.setValue(this.previousLanguage);\n } else if (value === LanguageChangeAction.Confirm) {\n this.previousLanguage = this.language.value as CodeEditorLanguages;\n // Update current language if user confirms the new selection\n this.libCodingTestService.changeCurrentLanguage(this.language.value as CodeEditorLanguages);\n this.setVersion();\n }\n });\n }\n\n parseCodeChange(code: string): void {\n this.codeChange.emit(code);\n this.libCodingTestService.changeCurrentCode(code);\n this.code = code;\n }\n\n get hasNoCodeChanges(): boolean {\n return this.code === this.libCodingTestService.getInitCode();\n }\n\n resetCode(): void {\n this.libCodingTestService.resetCode();\n }\n\n startGuidedTour(): void {\n this.libCodingTestService.startGuidedTour();\n }\n\n disableFullscreen(): void {\n this.libCodingTestService.setFullscreen(false);\n }\n\n openConfigPanel(): void {\n this.configurationsService.openConfigPanel();\n }\n\n isCodeLoading$(isLAT: boolean): Observable<boolean> {\n if (isLAT) {\n return this.libCodingTestService.isBoilerplateLoading$;\n }\n return of(false);\n }\n\n get language(): AbstractControl {\n return this.headerForm.controls.language;\n }\n\n private setVersion() {\n const version = this.languages.find(x => x.value === this.language.value).version;\n this.libCodingTestService.setVersion(version);\n if (this.isFullViewMode) {\n this.StorageCodingService.updateVersion(version);\n }\n }\n}\n","<section class=\"section\">\n <header *ngIf=\"isFullViewMode || isRunnableWithLangSelector\" class=\"section-header\">\n <h2 class=\"heading\">{{ translations['HEADINGS']['CODING'] }}</h2>\n <div class=\"header-controls\" [class.is-full-screen]=\"isFullscreenMode$ | async\">\n <form *ngIf=\"isLAT\" [formGroup]=\"headerForm\" class=\"header-form\">\n <ui-tooltip [message]=\"languages.length === 1 ? translations['TOOLTIPS']['DISABLE_LANGUAGE'] : null\">\n <ui-dropdown\n id=\"language-dropdown\"\n class=\"language-dropdown\"\n formControlName=\"language\"\n [valueList]=\"languagesFormattedList\"\n [showBottomContent]=\"false\"\n [allowClear]=\"false\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-dropdown>\n </ui-tooltip>\n </form>\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Reset'\"\n [tooltip]=\"translations['TOOLTIPS']['RESET_CODE']\"\n [disabled]=\"hasNoCodeChanges\"\n [applicationTheme]=\"applicationTheme\"\n (buttonClickEvent)=\"resetCode()\"\n class=\"themed-button\"\n >\n </ui-button>\n <ui-button\n *ngIf=\"isLAT && !isMobile && !isRunnableWithLangSelector\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Help'\"\n [tooltip]=\"translations['TOOLTIPS']['HELP']\"\n [applicationTheme]=\"applicationTheme\"\n (buttonClickEvent)=\"startGuidedTour()\"\n class=\"themed-button\"\n >\n </ui-button>\n <ui-button\n *ngIf=\"!isRunnableWithLangSelector\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Settings'\"\n [tooltip]=\"translations['TOOLTIPS']['CONFIGURATIONS']\"\n [applicationTheme]=\"applicationTheme\"\n id=\"configuration-ide-button\"\n class=\"themed-button\"\n (buttonClickEvent)=\"openConfigPanel()\"\n >\n </ui-button>\n\n <ui-button\n *ngIf=\"(isFullscreenMode$ | async) && !isMobile\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Minimize'\"\n [tooltip]=\"translations['TOOLTIPS']['MINIMIZE']\"\n [tooltipPosition]=\"'left'\"\n [applicationTheme]=\"applicationTheme\"\n class=\"themed-button\"\n (buttonClickEvent)=\"disableFullscreen()\"\n >\n </ui-button>\n </div>\n </header>\n\n <div class=\"ide\" [class.spinner]=\"isLAT | memoizeFunc: isCodeLoading$ : this | async\">\n <tgo-code-editor\n *ngIf=\"(isLAT | memoizeFunc: isCodeLoading$ : this | async) === false; else showSpinner\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [shouldGenerateInitCode]=\"!isFullViewMode && !isRunnableWithLangSelector && shouldGenerateInitCode\"\n [hasCodingConfigPanel]=\"isFullViewMode\"\n [autoHeight]=\"autoHeight\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"parseCodeChange($event)\"\n >\n </tgo-code-editor>\n <ng-template #showSpinner>\n <ui-spinner [isLoader]=\"false\" class=\"code-loading-spinner\"></ui-spinner>\n </ng-template>\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui';\n\n@Component({\n standalone: true,\n selector: 'tgo-code-panel',\n templateUrl: 'panel.component.html',\n styleUrls: ['panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, MatSidenavModule, ButtonComponentModule],\n})\nexport class PanelComponent implements OnChanges {\n @Input() heading: string;\n @Input() openPanel: boolean;\n @Output() closeEvent = new EventEmitter<boolean>();\n @ViewChild('sidenav', { static: true }) sidenav: MatSidenav;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.openPanel.currentValue) {\n this.sidenav.open();\n }\n }\n}\n","<mat-sidenav-container class=\"sidenav-container\">\n <mat-sidenav #sidenav position=\"end\" (closedStart)=\"closeEvent.emit(true)\">\n <div class=\"container\">\n <div class=\"header\">\n <h2 class=\"heading\">{{ heading }}</h2>\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [tooltip]=\"'Close'\"\n (buttonClickEvent)=\"sidenav.close()\"\n class=\"themed-button\"\n ></ui-button>\n </div>\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n </mat-sidenav>\n</mat-sidenav-container>\n","import { ChangeDetectionStrategy, Component, inject, Input, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { distinctUntilChanged } from 'rxjs';\nimport { ApplicationTheme, OptionType, DropdownComponentModule, ToggleComponentModule } from '@testgorilla/tgo-ui';\nimport { CodingAssistanceOptions, Config } from '../../models/configs';\nimport { ConfigurationsService } from '../../services/configurations.service';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport { StorageCodingService } from '../../services/storage.service';\nimport { CodeEditorLanguages } from '../code-editor/helpers/code-editor-helper.model';\nimport { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';\nimport { PanelComponent } from '../panel/panel.component';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'tgo-code-configurations',\n templateUrl: 'configurations.component.html',\n styleUrls: ['configurations.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n DropdownComponentModule,\n ToggleComponentModule,\n MemoizeFuncPipe,\n PanelComponent,\n ],\n})\nexport class ConfigurationsComponent implements OnInit {\n private readonly fb = inject(FormBuilder);\n private readonly configurationsService = inject(ConfigurationsService);\n private readonly StorageCodingService = inject(StorageCodingService);\n private readonly libCodingTestService = inject(LibCodingTestService);\n\n @Input() translations: Record<string, unknown>;\n @Input() companyColor: string;\n @Input() applicationTheme: ApplicationTheme;\n\n formattingOptions = this.configurationsService.getFormattingOptions();\n codingAssistanceOptions = this.configurationsService.getCodingAssistanceOptions();\n initialConfig = this.StorageCodingService.getSavedConfig();\n language$ = this.libCodingTestService.currentLanguage$;\n\n configForm: FormGroup;\n formObject = {};\n configurationsPanelOpen$ = this.configurationsService.configurationsPanelOpen$;\n\n ngOnInit() {\n if (!this.initialConfig) {\n this.initialConfig = this.configurationsService.getInitialConfig();\n }\n this.addConfigControls(this.formattingOptions);\n this.addConfigControls(this.codingAssistanceOptions);\n this.configForm = this.fb.group(this.formObject);\n this.configForm.valueChanges.pipe(distinctUntilChanged(), untilDestroyed(this)).subscribe((value: Config) => {\n this.configurationsService.setConfig(value);\n });\n }\n\n trackConfigChange(controlName: string): void {\n const controlValue = this.configForm.value[controlName];\n this.configurationsService.trackConfigChanged({\n [controlName]: controlValue,\n });\n }\n\n closeConfigPanel() {\n this.configurationsService.closeConfigPanel();\n }\n\n private addConfigControls(configObject: object) {\n // eslint-disable-next-line guard-for-in\n for (const option in configObject) {\n this.formObject[option] = this.initialConfig[option];\n }\n }\n\n getFormattedOptions(configurationOptions: { label: string; value: any }[]): OptionType[] {\n return configurationOptions.map(({ value, label }) => ({\n value,\n displayValue: label,\n }));\n }\n\n isValidRow([language, editorOption]: [CodeEditorLanguages, CodingAssistanceOptions]) {\n if (\n language !== CodeEditorLanguages.Javascript &&\n language !== CodeEditorLanguages.Typescript &&\n (editorOption === CodingAssistanceOptions.AutoComplete ||\n editorOption === CodingAssistanceOptions.ErrorHighlighting)\n ) {\n return false;\n }\n return true;\n }\n}\n","<tgo-code-panel\n [openPanel]=\"configurationsPanelOpen$ | async\"\n [heading]=\"translations['HEADINGS']['CONFIGURATIONS']\"\n (closeEvent)=\"closeConfigPanel()\"\n>\n <form [formGroup]=\"configForm\" class=\"configs\">\n <div id=\"formatting\" *ngIf=\"formattingOptions\">\n <h3>{{ translations['HEADINGS']['FORMATTING'] }}</h3>\n <ng-container\n [ngTemplateOutlet]=\"config\"\n [ngTemplateOutletContext]=\"{ data: formattingOptions, inputType: 'dropdown' }\"\n ></ng-container>\n </div>\n <div id=\"codingAssistance\" *ngIf=\"codingAssistanceOptions\">\n <h3>{{ translations['HEADINGS']['CODING_ASSISTANCE'] }}</h3>\n <ng-container\n [ngTemplateOutlet]=\"config\"\n [ngTemplateOutletContext]=\"{\n data: codingAssistanceOptions,\n inputType: 'toggle'\n }\"\n ></ng-container>\n </div>\n <ng-template #config let-configData=\"data\" let-inputType=\"inputType\">\n <ng-container *ngIf=\"language$ | async as language\">\n <ng-container *ngFor=\"let row of configData | keyvalue\">\n <div\n class=\"config-row\"\n *ngIf=\"[language, row.key] | memoizeFunc: isValidRow\"\n [class.config-row-toggle]=\"inputType === 'toggle'\"\n >\n <p class=\"config-name\">{{ row.key }}</p>\n <ui-dropdown\n *ngIf=\"inputType === 'dropdown'\"\n class=\"config-dropdown\"\n [formControlName]=\"row.key\"\n [valueList]=\"row.value | memoizeFunc: getFormattedOptions\"\n [allowClear]=\"false\"\n [applicationTheme]=\"applicationTheme\"\n [showBottomContent]=\"false\"\n (change)=\"trackConfigChange(row.key)\"\n ></ui-dropdown>\n <ui-toggle\n *ngIf=\"inputType === 'toggle'\"\n [applicationTheme]=\"applicationTheme\"\n [formControlName]=\"row.key\"\n (toggle)=\"trackConfigChange(row.key)\"\n class=\"config-toggle\"\n [class.config-toggle-company-colored]=\"!!companyColor\"\n [style.--toggle-checked-color]=\"companyColor\"\n ></ui-toggle>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </form>\n</tgo-code-panel>\n","export type CustomTestCase = {\n localId?: number;\n name: string;\n // input is optional for sql test cases\n input?: string;\n expectedOutput: string;\n preloaded: boolean;\n};\n\nexport type ExampleTestCase = CustomTestCase & {\n id: number;\n};\n\nexport type TestCaseResult = {\n actualOutput: string;\n logs: string;\n status: TestCaseStatus;\n};\n\nexport type AllowedModificationFields = {\n input: string;\n expectedOutput: string;\n};\n\nexport enum TestCaseStatus {\n Passed = 'passed',\n Error = 'error',\n Empty = 'empty',\n}\n\nexport interface TestCaseDeletionData {\n index: number;\n action: TestCaseDeletionAction;\n}\n\nexport const enum TestCaseDeletionAction {\n Try = 'try',\n Confirm = 'confirm',\n}\n\nexport interface LATFormattedTestCases {\n input: string;\n solution: string;\n}\n\nexport interface SqlTestCase {\n id?: number;\n name: string;\n category: CategorySqlTestCaseEnum;\n /** Expected test case result */\n result?: string;\n initial_sql?: string;\n /** Previous sql query for checking */\n pre_sql?: string;\n /** Post sql query for checking */\n post_sql?: string;\n}\n\nexport interface Testcase {\n id?: number;\n name: string;\n input?: string;\n solution?: string;\n points?: number;\n}\n\nexport interface GroupedTestCasesResult {\n custom: { failed: number; passed: number },\n example: { failed: number; passed: number }\n}\n\ntype CategorySqlTestCaseEnum =\n 'user' |\n 'validation';\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { IconLabelComponentModule } from '@testgorilla/tgo-ui';\nimport { TestCaseStatus } from '../../../models/test-cases';\n\n@Component({\n standalone: true,\n selector: 'tgo-test-cases-status',\n templateUrl: './test-cases-status.component.html',\n styleUrls: ['./test-cases-status.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [IconLabelComponentModule],\n})\nexport class TestCasesStatusComponent {\n @Input() status: TestCaseStatus;\n @Input() translations: Record<string, unknown>;\n\n readonly TestCaseStatus = TestCaseStatus;\n}\n","@switch (status) { @case (TestCaseStatus.Passed) {\n<div class=\"test-case-status test-case-status-passed\">\n <ui-icon-label class=\"label-icon\" [iconName]=\"'Check'\" [iconSize]=\"'16'\" [text]=\"translations['PASSED']\">\n </ui-icon-label>\n</div>\n} @case (TestCaseStatus.Error) {\n<div class=\"test-case-status test-case-status-error\">\n <ui-icon-label class=\"label-icon\" [iconName]=\"'Close'\" [iconSize]=\"'16'\" [text]=\"translations['ERROR']\">\n </ui-icon-label>\n</div>\n} @case (TestCaseStatus.Empty) {\n<div class=\"test-case-status test-case-status-empty\">\n <ui-icon-label class=\"label-icon\" [iconName]=\"'Help'\" [iconSize]=\"'16'\" [text]=\"translations['EMPTY']\">\n </ui-icon-label>\n</div>\n} }\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MemoizeFuncPipe } from '../../../pipes/memoize-func.pipe';\n\nconst DEFAULT_MAX_CHARACTERS = 135;\n\n@Component({\n standalone: true,\n selector: 'tgo-truncated-text',\n templateUrl: './truncated-text.component.html',\n styleUrls: ['./truncated-text.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, MemoizeFuncPipe],\n})\nexport class TruncatedTextComponent implements OnChanges {\n @Input() text = '';\n @Input() maxChars = DEFAULT_MAX_CHARACTERS;\n @Input() isWordWrap = false;\n\n isTruncated: boolean;\n\n ngOnChanges({ text }: SimpleChanges): void {\n if (text?.firstChange && text?.currentValue) {\n this.isTruncated = this.text.length > this.maxChars;\n }\n }\n\n getShownText([isTruncated, fullText]: [boolean, string]): string {\n // todo: add as an improvement:\n // If the first line contains only a few characters, it would be good to truncate the second line to ~55 characters // Anna\n return isTruncated ? `${this.text.slice(0, this.maxChars)}... ` : fullText;\n }\n\n toggleTruncation() {\n this.isTruncated = !this.isTruncated;\n }\n}\n","<div class=\"text-container\" [class.text-container-word-wrap]=\"isWordWrap\">\n <span class=\"text\" [class.expanded]=\"!isTruncated\"\n >{{ [isTruncated, text] | memoizeFunc: getShownText : this\n }}<a class=\"show-more-link\" *ngIf=\"isTruncated\" (click)=\"toggleTruncation()\">Show more</a></span\n >\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { ApplicationTheme, FieldComponentModule } from '@testgorilla/tgo-ui';\nimport {\n AllowedModificationFields,\n CustomTestCase,\n ExampleTestCase,\n TestCaseResult,\n TestCaseStatus,\n} from '../../../models/test-cases';\nimport { MemoizeFuncPipe } from '../../../pipes/memoize-func.pipe';\nimport { TruncatedTextComponent } from '../../common/truncated-text/truncated-text.component';\nimport { TestCasesStatusComponent } from '../test-cases-status/test-cases-status.component';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'tgo-test-cases-content',\n templateUrl: './test-cases-content.component.html',\n styleUrls: ['./test-cases-content.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FieldComponentModule,\n MemoizeFuncPipe,\n TruncatedTextComponent,\n TestCasesStatusComponent,\n ],\n})\nexport class TestCasesContentComponent implements OnInit, OnChanges {\n private readonly fb = inject(FormBuilder);\n \n @Input() testCase: ExampleTestCase | CustomTestCase;\n @Input() testCaseResult: TestCaseResult;\n @Input() areTestsRun: boolean;\n @Input() translations: Record<string, unknown>;\n @Input() applicationTheme: ApplicationTheme;\n @Input() isSQL: boolean;\n\n @Output() valueChange = new EventEmitter<AllowedModificationFields>();\n\n isCustomTestCase: boolean;\n // todo: add validators when backend implements validation on their side\n form = this.fb.group({\n input: new FormControl<string>(''),\n expectedOutput: new FormControl<string>(''),\n });\n\n ngOnInit(): void {\n if (this.testCase?.input && this.testCase?.expectedOutput) {\n this.form.patchValue({\n input: this.testCase.input,\n expectedOutput: this.testCase.expectedOutput,\n });\n }\n\n if (this.testCase?.preloaded) {\n this.form.disable();\n }\n\n this.listenFormChanges();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.testCase?.currentValue) {\n this.form.patchValue({\n input: this.testCase.input,\n expectedOutput: this.testCase.expectedOutput,\n });\n if (this.testCase.preloaded) {\n this.form.disable();\n } else {\n this.form.enable();\n }\n\n this.isCustomTestCase = !this.testCase.preloaded;\n }\n }\n\n isEmptyTestCase(status: TestCaseStatus): boolean {\n return status === TestCaseStatus.Empty;\n }\n\n private listenFormChanges(): void {\n this.form.valueChanges.pipe(untilDestroyed(this)).subscribe((value: AllowedModificationFields) => {\n this.valueChange.emit(value);\n });\n }\n}\n","@if (testCase) {\n<div class=\"test-cases-content\" [class.test-cases-content-tests-run]=\"areTestsRun\">\n @if (areTestsRun && isCustomTestCase && (testCaseResult?.status | memoizeFunc: isEmptyTestCase)) {\n <div class=\"custom-tests-hint-container\">\n <p class=\"custom-tests-info\">{{ translations['BOTH_FIELDS_MUST_BE_FILLED'] }}</p>\n </div>\n } @if (!isCustomTestCase && !areTestsRun) {\n <p class=\"custom-tests-info custom-tests-info-indented\">\n {{ translations['EXAMPLE_TEST_CASE_INFO'] }}\n </p>\n } @if (isCustomTestCase && (!testCaseResult || (testCaseResult?.status | memoizeFunc: isEmptyTestCase))) {\n <p class=\"custom-tests-info custom-tests-info-indented\">\n {{ translations['FILL_ALL_FIELDS'] }}\n </p>\n } @if (testCaseResult && !(testCaseResult?.status | memoizeFunc: isEmptyTestCase)) {\n <div class=\"custom-tests-logs\">\n <div class=\"custom-tests-log-row\">\n <h4 class=\"custom-tests-log-header\">{{ translations['LOG'] }}</h4>\n <div class=\"custom-tests-log-content\">\n <tgo-truncated-text [text]=\"testCaseResult.logs\" class=\"custom-tests-info\"></tgo-truncated-text>\n </div>\n </div>\n @if (isSQL) {\n <div class=\"custom-tests-log-row custom-tests-log-row-cols\">\n <div class=\"custom-tests-log-col custom-tests-log-col-expected-query\">\n <div class=\"custom-tests-log-heading\">\n <h4 class=\"custom-tests-log-header\">{{ translations['EXPECTED_QUERY'] }}</h4>\n </div>\n <div class=\"custom-tests-log-content\">\n <tgo-truncated-text\n [text]=\"testCase.expectedOutput\"\n [isWordWrap]=\"true\"\n class=\"custom-tests-info\"\n ></tgo-truncated-text>\n </div>\n </div>\n <div class=\"custom-tests-log-col\">\n <div class=\"custom-tests-log-heading\">\n <h4 class=\"custom-tests-log-header\">{{ translations['QUERY_RESULT'] }}</h4>\n <tgo-test-cases-status\n [status]=\"testCaseResult.status\"\n [translations]=\"translations['STATUSES']\"\n ></tgo-test-cases-status>\n </div>\n <div class=\"custom-tests-log-content\">\n <tgo-truncated-text\n [text]=\"testCaseResult.actualOutput\"\n [isWordWrap]=\"true\"\n class=\"custom-tests-info\"\n ></tgo-truncated-text>\n </div>\n </div>\n </div>\n } @else {\n <div class=\"custom-tests-log-row\">\n <div class=\"custom-tests-log-heading\">\n <h4 class=\"custom-tests-log-header\">{{ translations['OUTPUT'] }}</h4>\n <tgo-test-cases-status\n [status]=\"testCaseResult.status\"\n [translations]=\"translations['STATUSES']\"\n ></tgo-test-cases-status>\n </div>\n <div class=\"custom-tests-log-content\">\n <tgo-truncated-text [text]=\"testCaseResult.actualOutput\" class=\"custom-tests-info\"></tgo-truncated-text>\n </div>\n </div>\n }\n </div>\n } @if (!isSQL) {\n <form [formGroup]=\"form\">\n <div class=\"custom-tests-inputs-container\">\n <ui-field\n class=\"custom-tests-input\"\n [label]=\"translations['INPUT']\"\n [type]=\"'multi-line'\"\n [disabled]=\"testCase.preloaded\"\n [maxRows]=\"3\"\n [applicationTheme]=\"applicationTheme\"\n formControlName=\"input\"\n ></ui-field>\n <ui-field\n class=\"custom-tests-input\"\n [label]=\"translations['EXPECTED_OUTPUT']\"\n [type]=\"'multi-line'\"\n [maxRows]=\"3\"\n [disabled]=\"testCase.preloaded\"\n [applicationTheme]=\"applicationTheme\"\n formControlName=\"expectedOutput\"\n ></ui-field>\n </div>\n </form>\n }\n</div>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatTabGroup, MatTabsModule } from '@angular/material/tabs';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { filter } from 'rxjs';\nimport { ApplicationTheme, IconComponentModule, ButtonComponentModule } from '@testgorilla/tgo-ui';\nimport {\n AllowedModificationFields,\n CustomTestCase,\n ExampleTestCase,\n TestCaseDeletionAction,\n TestCaseResult,\n TestCaseStatus,\n} from '../../../models/test-cases';\nimport { LibCodingTestService } from '../../../services/lib-coding-test.service';\nimport { StorageCodingService } from '../../../services/storage.service';\nimport { TestCasesService } from '../../../services/test-cases.service';\nimport { TestCasesStatusComponent } from '../test-cases-status/test-cases-status.component';\nimport { TestCasesContentComponent } from '../test-cases-content/test-cases-content.component';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'tgo-test-cases',\n templateUrl: 'test-cases.component.html',\n styleUrls: ['test-cases.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n MatTabsModule,\n IconComponentModule,\n ButtonComponentModule,\n TestCasesStatusComponent,\n TestCasesContentComponent,\n ],\n})\nexport class TestCasesComponent implements OnInit, OnChanges {\n @Input() exampleTestCases: ExampleTestCase[];\n @Input() apiTestCasesResult: TestCaseResult[];\n @Input() testCasesStatus: any;\n @Input() testCases: (CustomTestCase | ExampleTestCase)[];\n @Input() translations: Record<string, unknown>;\n @Input() areTestsRun: boolean;\n @Input() applicationTheme: ApplicationTheme;\n @Input() canAddCustomTestCases: boolean;\n @Input() isSQL: boolean;\n\n @ViewChild('tabGroup') tabGroup: MatTabGroup;\n\n testCasesResult: TestCaseResult[];\n\n activeTestCaseIndex: number | null;\n maxTestCasesAllowed = 6; //Could be taken from backend\n\n isAddTestCasesDisabled: boolean;\n isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n isContentViewOpened: boolean;\n\n constructor(\n private libCodingTestService: LibCodingTestService,\n private changeDetectorRef: ChangeDetectorRef,\n private testCasesService: TestCasesService,\n private StorageCodingService: StorageCodingService\n ) {}\n\n ngOnInit() {\n this.testCasesService.activeTestCaseIndex$.pipe(untilDestroyed(this)).subscribe(index => {\n this.activeTestCaseIndex = index;\n });\n\n this.setDefaultTestCases();\n if (this.canAddCustomTestCases) {\n this.updateAddCustomTestCaseDisabled();\n this.listenTestCaseDeletion();\n }\n }\n\n ngOnChanges({ apiTestCasesResult }: SimpleChanges): void {\n if (!apiTestCasesResult) {\n return;\n }\n const apiTestCases: TestCaseResult[] = apiTestCasesResult.currentValue;\n\n if (apiTestCases) {\n this.testCasesResult = apiTestCases.length ? this.handleEmptyTestCases(apiTestCases) : [];\n }\n }\n\n private setDefaultTestCases() {\n if (!this.testCases.length) {\n this.testCases = [...(this.exampleTestCases || [])];\n this.onTestCasesChanged();\n this.setActiveTestCaseIndex(this.isMobile ? null : 0);\n }\n }\n\n addTestCase(): void {\n const testCaseLocalId = this.testCasesService.createTestCaseLocalId();\n\n this.testCases.push({\n localId: testCaseLocalId,\n name: `Test ${testCaseLocalId}`,\n input: '',\n expectedOutput: '',\n preloaded: false,\n });\n this.onTestCasesChanged();\n this.testCasesService.setActiveTestCase(this.testCases.length - 1);\n this.isContentViewOpened = this.isMobile;\n this.updateAddCustomTestCaseDisabled();\n\n if (!this.isMobile) {\n this.setFocus();\n }\n }\n\n removeTestCase(index: number): void {\n this.libCodingTestService.handleTestCaseDeletion(index);\n }\n\n modifyTestCase(index: number, modifiedValue: AllowedModificationFields): void {\n if (!this.testCases[index].preloaded) {\n this.testCases[index].input = modifiedValue.input;\n this.testCases[index].expectedOutput = modifiedValue.expectedOutput;\n this.onTestCasesChanged();\n }\n }\n\n private setFocus() {\n const tabHeaderId = `mat-tab-label-${this.tabGroup['_groupId']}-${this.activeTestCaseIndex}`;\n const tabHeaderElement: HTMLElement = document.getElementById(tabHeaderId);\n if (tabHeaderElement) {\n tabHeaderElement.focus();\n }\n }\n\n private onTestCasesChanged() {\n this.libCodingTestService.updateTestCases([...this.testCases]);\n this.StorageCodingService.updateTestCases([...this.testCases]);\n }\n\n setActiveTestCaseIndex(index: number): void {\n this.testCasesService.setActiveTestCase(index);\n this.isContentViewOpened = index !== null ? this.isMobile : false;\n }\n\n closeTestCaseMobileView(): void {\n this.isContentViewOpened = false;\n this.testCasesService.setActiveTestCase(null);\n }\n\n private listenTestCaseDeletion(): void {\n this.libCodingTestService.testCaseDeletion$\n .pipe(\n filter(({ action }) => action === TestCaseDeletionAction.Confirm),\n untilDestroyed(this)\n )\n .subscribe(({ index }) => {\n this.testCases.splice(index, 1);\n this.testCasesResult.splice(index, 1);\n this.onTestCasesChanged();\n\n if (this.isMobile) {\n this.closeTestCaseMobileView();\n } else {\n this.testCasesService.setActiveTestCase(index - 1);\n }\n\n this.updateAddCustomTestCaseDisabled();\n this.changeDetectorRef.detectChanges();\n });\n }\n\n private handleEmptyTestCases(apiTestCasesResults: TestCaseResult[]): TestCaseResult[] {\n const testCasesResult = [...apiTestCasesResults];\n\n this.testCases.forEach(({ input, expectedOutput }, index) => {\n const isEmpty = this.isSQL ? !expectedOutput : !input || !expectedOutput;\n if (isEmpty) {\n testCasesResult.splice(index, 0, {\n actualOutput: null,\n logs: null,\n status: TestCaseStatus.Empty,\n });\n }\n });\n\n return testCasesResult;\n }\n\n private updateAddCustomTestCaseDisabled(): void {\n const exampleTestCasesCount = this.exampleTestCases?.length || 0;\n this.isAddTestCasesDisabled = this.testCases.length - exampleTestCasesCount < this.maxTestCasesAllowed;\n }\n}\n","<div class=\"test-case-container\">\n <div\n id=\"test-cases\"\n class=\"test-case-tabs-wrapper\"\n [ngClass]=\"{\n 'test-case-tabs-wrapper-tests-run': areTestsRun,\n 'test-case-tabs-wrapper-mobile': isMobile,\n 'test-case-tabs-wrapper-hidden': isContentViewOpened\n }\"\n >\n @if (!isMobile) {\n <mat-tab-group\n #tabGroup\n class=\"test-cases-tabs\"\n [selectedIndex]=\"activeTestCaseIndex\"\n (selectedIndexChange)=\"setActiveTestCaseIndex($event)\"\n >\n @for (testCase of testCases; track testCase; let index = $index) {\n <mat-tab label=\"{{ testCase.name }}\">\n <ng-template mat-tab-label>\n <div class=\"tab-label-wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"testCaseHeading\"\n [ngTemplateOutletContext]=\"{ testCase: testCase, index: index }\"\n ></ng-container>\n </div>\n </ng-template>\n </mat-tab>\n }\n </mat-tab-group>\n } @else {\n <div class=\"test-cases-tabs test-cases-tabs-mobile\">\n @for (testCase of testCases; track testCase; let index = $index) {\n <div class=\"tab-label-wrapper\" (click)=\"setActiveTestCaseIndex(index)\">\n <div class=\"test-case-name-status-wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"testCaseHeading\"\n [ngTemplateOutletContext]=\"{ testCase: testCase, index: index }\"\n ></ng-container>\n </div>\n @if (isMobile) {\n <ui-icon [name]=\"'Arrow-chevron-right-filled'\" [size]=\"'24'\" class=\"themed-button\"></ui-icon>\n }\n </div>\n }\n </div>\n } @if (canAddCustomTestCases) {\n <ui-button\n class=\"add-test-case themed-button\"\n [variant]=\"'tertiary'\"\n [iconName]=\"'Plus'\"\n [iconPosition]=\"'left'\"\n [disabled]=\"!isAddTestCasesDisabled\"\n [fullWidth]=\"true\"\n [tooltip]=\"!isAddTestCasesDisabled ? translations['TOOLTIPS']['CANT_ADD_TEST_CASE'] : null\"\n [label]=\"\n translations['TEST_RESULTS']['TEST_CASES']['ADD_TEST_CASE'] +\n ' (' +\n (testCases?.length - exampleTestCases?.length) +\n '/' +\n maxTestCasesAllowed +\n ')'\n \"\n (buttonClickEvent)=\"addTestCase()\"\n >\n </ui-button>\n }\n </div>\n\n @if (!isMobile) {\n <div class=\"test-case-content-wrapper\">\n <ng-container [ngTemplateOutlet]=\"testCasesContentTpl\"></ng-container>\n </div>\n } @if (isMobile && isContentViewOpened) {\n <div class=\"test-case-content-wrapper-mobile\">\n <div class=\"test-case-mobile-name-wrapper\">\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n [tooltip]=\"''\"\n [size]=\"'small'\"\n (buttonClickEvent)=\"closeTestCaseMobileView()\"\n class=\"themed-button\"\n >\n </ui-button>\n <ng-container\n [ngTemplateOutlet]=\"testCaseHeading\"\n [ngTemplateOutletContext]=\"{\n testCase: testCases[activeTestCaseIndex],\n index: activeTestCaseIndex,\n hideStatus: true\n }\"\n ></ng-container>\n </div>\n <ng-container [ngTemplateOutlet]=\"testCasesContentTpl\"></ng-container>\n </div>\n }\n</div>\n\n<ng-template #testCaseHeading let-testCase=\"testCase\" let-index=\"index\" let-hideStatus=\"hideStatus\">\n <div class=\"tab-label\">\n @if (testCase.preloaded) {\n <ui-icon [name]=\"'Lock'\" class=\"preloaded-icon\"></ui-icon>\n }\n <span class=\"tab-label-value\">{{ testCase.name }}</span>\n </div>\n\n @if (!hideStatus && testCasesResult?.length) {\n <tgo-test-cases-status\n [status]=\"testCasesResult?.[index]?.status\"\n [translations]=\"translations['TEST_RESULTS']['TEST_CASES']['STATUSES']\"\n ></tgo-test-cases-status>\n } @if (!testCase.preloaded) {\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Delete'\"\n [tooltip]=\"translations['TOOLTIPS']['DELETE_TEST_CASE'] || ''\"\n (buttonClickEvent)=\"removeTestCase(index)\"\n class=\"delete-test-case themed-button\"\n >\n </ui-button>\n }\n</ng-template>\n\n<ng-template #testCasesContentTpl>\n <tgo-test-cases-content\n [testCase]=\"testCases[activeTestCaseIndex]\"\n [testCaseResult]=\"testCasesResult?.[activeTestCaseIndex]\"\n [areTestsRun]=\"areTestsRun\"\n [translations]=\"translations['TEST_RESULTS']['TEST_CASES']\"\n [isSQL]=\"isSQL\"\n [applicationTheme]=\"applicationTheme\"\n (valueChange)=\"modifyTestCase(activeTestCaseIndex, $event)\"\n ></tgo-test-cases-content>\n</ng-template>\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { debounceTime, distinctUntilChanged, map, of } from 'rxjs';\nimport { ApplicationTheme, ButtonComponentModule, ProgressBarComponentModule } from '@testgorilla/tgo-ui';\nimport { CustomTestCase, ExampleTestCase } from '../../models/test-cases';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';\nimport { TestCasesComponent } from './test-cases/test-cases.component';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'tgo-code-test-results',\n templateUrl: 'test-results.component.html',\n styleUrls: ['test-results.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ButtonComponentModule,\n ProgressBarComponentModule,\n MemoizeFuncPipe,\n TestCasesComponent,\n ],\n animations: [\n trigger('slideInOut', [\n transition(':enter', [\n style({ transform: 'translateY(100%)', opacity: '0' }),\n animate('500ms ease', style({ transform: 'translateY(0)', opacity: '1' })),\n ]),\n ]),\n ],\n})\nexport class TestResultsComponent implements OnInit {\n @Input() companyColor: string;\n @Input() testCasesStatus: any;\n @Input() loading: boolean;\n @Input() runTestResponse = [];\n @Input() translations: Record<string, unknown>;\n @Input() isLAT = false;\n @Input() isSQL = false;\n @Input() exampleTestCases: ExampleTestCase[];\n @Input() canChangeProgrammingLang: boolean;\n @Input() showTestCases: boolean;\n @Input() canAddCustomTestCases: boolean;\n @Input() applicationTheme: ApplicationTheme;\n\n @Output() runTestClick = new EventEmitter<boolean>();\n\n runTestFirstClick = false;\n emptySpaceRegex = /^\\s*$/;\n disableRun$ = of(false);\n\n constructor(\n private libCodingTestService: LibCodingTestService,\n private changeDetectorRef: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n if (this.isLAT) {\n if (this.canChangeProgrammingLang) {\n this.listenLanguageChange();\n }\n } else {\n this.disableRun$ = this.libCodingTestService.codeChange$.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n map(code => !!code.match(this.emptySpaceRegex)),\n untilDestroyed(this)\n );\n }\n }\n\n trackByFunction(index: number, item: any): any {\n return item;\n }\n\n runTest() {\n this.runTestClick.emit(true);\n if (!this.runTestFirstClick) {\n this.runTestFirstClick = true;\n }\n }\n\n getTestCases([canAddCustomTestCases]: [boolean]): (ExampleTestCase | CustomTestCase)[] {\n const savedTestCases = this.libCodingTestService.getTestCases() ?? [];\n return canAddCustomTestCases ? savedTestCases : [];\n }\n\n private listenLanguageChange(): void {\n this.libCodingTestService.currentLanguage$.pipe(untilDestroyed(this)).subscribe(() => {\n this.runTestFirstClick = false;\n this.runTestResponse = [];\n this.changeDetectorRef.detectChanges();\n });\n }\n}\n","<div class=\"test-output\" [class.test-output-lat]=\"isLAT\">\n <div>\n <div class=\"barra\">\n <h3 class=\"barra-title\">{{ translations['HEADINGS']['TESTS'] }}</h3>\n <ui-button\n [size]=\"'small'\"\n [variant]=\"'primary'\"\n [label]=\"translations['TEST_RESULTS']['RUN_TESTS']\"\n [iconPosition]=\"'left'\"\n [iconName]=\"'Play-filled'\"\n [companyColor]=\"companyColor ? companyColor : '#46a997'\"\n [disabled]=\"this.loading || (disableRun$ | async)\"\n (buttonClickEvent)=\"runTest()\"\n class=\"run-test-btn\"\n ></ui-button>\n </div>\n @if (showTestCases && loading) {\n <ui-progress-bar [mode]=\"'query'\" class=\"progress-bar\"></ui-progress-bar>\n }\n </div>\n @if (!showTestCases) {\n <div class=\"html\">\n @if (!this.loading) { @if (runTestResponse.length !== 0) {\n <div>\n <!-- todo: remove legacy non-testcase view after sunsetting of the old flow -->\n @if (isSQL) {\n <div class=\"response-message\">\n <span>{{ runTestResponse[0]['response_msg'] }}</span>\n </div>\n @for (returnTest of runTestResponse; track trackByFunction($index, returnTest); let isLast = $last) {\n <div class=\"test-case-block\">\n @if (returnTest.content) {\n <div class=\"test-validation\">\n <span class=\"title\">{{ translations['TEST_RESULTS']['TEST_CASES']['TEST_VALIDATION'] }}</span>\n <span class=\"result\">{{ returnTest.content }}</span>\n </div>\n }\n <div class=\"sql-stdout\" [class.no-border]=\"isLast\">\n <span class=\"title\">{{ translations['TEST_RESULTS']['TEST_CASES']['RESULT'] }}</span>\n <span\n [ngClass]=\"{\n result: true,\n passed: returnTest.test_result === 'OK',\n error: returnTest.test_result !== 'OK' || returnTest.stderr\n }\"\n >{{ returnTest.stderr ? returnTest.stderr : returnTest.stdout[0] }}</span\n >\n @if (returnTest.test_result === 'OK') {\n <span class=\"result passed\">OK</span>\n } @else {\n <span class=\"title error\">{{ translations['TEST_RESULTS']['TEST_CASES']['EXPECTED'] }}</span>\n <span class=\"result\">{{ returnTest.test_result }}</span>\n }\n </div>\n </div>\n } } @else { @for (returnTest of runTestResponse; track returnTest) {\n <div>\n <span>{{ returnTest['response_msg'] }}</span>\n <br />\n <span>{{ returnTest['stderr'] }}</span>\n <br />\n @for (item of returnTest['stdout']; track item; let j = $index) {\n <div class=\"stdout\">\n @if (item?.includes('@@')) {\n <span class=\"result\">{{ item.replace('@@', '').replace('@@', '').trim() }}</span>\n } @if (item?.includes('##')) {\n <span class=\"passed\">{{ item.replace('##', '').replace('##', '').trim() }}</span>\n } @if (item?.includes('$$')) {\n <span class=\"error\">{{ item.replace('$$', '').replace('$$', '').trim() }}</span>\n } @if (!item?.includes('~~') && !item?.includes('@@') && !item?.includes('##') && !item?.includes('$$')) {\n <span class=\"info\">{{ item?.trim() }}</span>\n }\n </div>\n }\n <br />\n </div>\n } }\n </div>\n } @else {\n <span>\n {{\n this.loading ? translations['TEST_RESULTS']['TESTS_RUNNING'] : translations['TEST_RESULTS']['TESTS_CHECK']\n }}</span\n >\n } } @else {\n <ui-progress-bar class=\"progress-bar\" [mode]=\"'query'\"></ui-progress-bar>\n }\n </div>\n } @else { @if (!loading) {\n <div class=\"LAT-tests\" [class.LAT-tests-with-status]=\"runTestFirstClick\">\n <tgo-test-cases\n [exampleTestCases]=\"exampleTestCases\"\n [testCases]=\"[canAddCustomTestCases, loading] | memoizeFunc: getTestCases : this\"\n [apiTestCasesResult]=\"runTestResponse\"\n [testCasesStatus]=\"testCasesStatus\"\n [translations]=\"translations\"\n [areTestsRun]=\"runTestFirstClick\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [applicationTheme]=\"applicationTheme\"\n [isSQL]=\"isSQL\"\n ></tgo-test-cases>\n </div>\n } }\n <div class=\"status\">\n @if (runTestFirstClick) {\n <div @slideInOut class=\"status-child\">\n @if (testCasesStatus) {\n <p class=\"passed\">\n {{ translations['TEST_RESULTS']['PASSED'] + testCasesStatus['ok'] }}\n </p>\n <p class=\"error\">\n {{ translations['TEST_RESULTS']['ERROR'] + testCasesStatus['error'] }}\n </p>\n <p>{{ translations['TEST_RESULTS']['TOTAL'] + testCasesStatus['total'] }}</p>\n }\n </div>\n }\n </div>\n</div>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport {\n animationFrameScheduler,\n concat,\n debounceTime,\n distinctUntilChanged,\n map,\n Observable,\n observeOn,\n of,\n} from 'rxjs';\nimport { AngularSplitModule } from 'angular-split';\nimport { ApplicationTheme } from '@testgorilla/tgo-ui';\n\nimport { LATLanguages } from '../../models/lat-languages';\nimport { ExampleTestCase } from '../../models/test-cases';\nimport { resizeElement } from '../../utils/resize-element';\nimport {\n CodeEditorFuncParam,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from '../code-editor/helpers/code-editor-helper.model';\nimport { PasteData } from '../code-editor/models/code-editor.model';\nimport { CodingSectionComponent } from '../coding-section/coding-section.component';\nimport { ConfigurationsComponent } from '../configurations/configurations.component';\nimport { TestResultsComponent } from '../tests/test-results.component';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'tgo-runnable-editor',\n templateUrl: './runnable-editor.component.html',\n styleUrls: ['./runnable-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AngularSplitModule,\n CodingSectionComponent,\n ConfigurationsComponent,\n TestResultsComponent,\n ],\n})\nexport class RunnableEditorComponent implements AfterViewInit {\n @Input() initCode: string;\n @Input() functionParams: CodeEditorFuncParam[];\n @Input() functionName: string;\n @Input() returnType: keyof CodeEditorTypesMap;\n @Input() isFullViewMode: boolean;\n @Input() isLAT: boolean;\n @Input() isSQL: boolean;\n @Input() canAddCustomTestCases: boolean;\n @Input() hideTestCases: boolean;\n @Input() languages: LATLanguages;\n @Input() shouldGenerateInitCode: boolean;\n @Input() autoHeight: boolean;\n @Input() translations: Record<string, unknown>;\n @Input() questionText: string;\n @Input() companyColor: string;\n @Input() testCasesStatus: any;\n @Input() loading: boolean;\n @Input() runTestResponse = [];\n @Input() exampleTestCases: ExampleTestCase[];\n @Input() isRunnableWithLangSelector: boolean;\n @Input() applicationTheme: ApplicationTheme;\n\n @Output() pasteEvent = new EventEmitter<PasteData>();\n @Output() codeChange = new EventEmitter<string>();\n @Output() runTestClick = new EventEmitter<boolean>();\n @Output() languageChange = new EventEmitter<CodeEditorLanguages>();\n\n @ViewChild('codingTestsSplit', { read: ElementRef }) codingTestsSplitRef: ElementRef;\n @ViewChild('testsSplitArea', { read: ElementRef }) testsSplitAreaRef: ElementRef;\n\n minTestsSplitHeight: number;\n currentIdeSplitHeight = 55;\n currentTestsSplitHeight = 45;\n\n MIN_TESTS_HEIGHT_PX = 119;\n MIN_LAT_TESTS_HEIGHT_PX = 202;\n GUTTER_SIZE = 1;\n\n isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n constructor(private changeDetectorRef: ChangeDetectorRef) {}\n\n ngAfterViewInit(): void {\n if (this.isMobile) {\n return;\n }\n\n if (this.isFullViewMode) {\n this.setCodingSplitListener();\n } else {\n const { offsetHeight: height } = this.codingTestsSplitRef.nativeElement;\n this.minTestsSplitHeight = this.getMinTestsPercentHeight(height);\n }\n }\n\n /* listens to area height changes and calculates the maximum % size of coding window area */\n private setCodingSplitListener(): void {\n concat(this.getInitialMaxHeight$(), resizeElement(this.codingTestsSplitRef.nativeElement))\n .pipe(\n observeOn(animationFrameScheduler),\n debounceTime(300),\n map(({ contentRect: { height } }) => height),\n distinctUntilChanged(),\n untilDestroyed(this)\n )\n .subscribe(height => {\n this.calculateCurrentHeights(height);\n\n this.changeDetectorRef.detectChanges();\n });\n }\n\n private calculateCurrentHeights(fullHeight: number): void {\n const { offsetHeight: testsSplitHeight } = this.testsSplitAreaRef.nativeElement;\n this.minTestsSplitHeight = this.getMinTestsPercentHeight(fullHeight);\n\n let testsPercentHeight = this.getPercentHeightFromWhole(fullHeight, testsSplitHeight);\n\n if (testsPercentHeight < this.minTestsSplitHeight) {\n testsPercentHeight = this.minTestsSplitHeight;\n }\n\n this.currentTestsSplitHeight = testsPercentHeight;\n this.currentIdeSplitHeight = 100 - this.currentTestsSplitHeight;\n }\n\n private getInitialMaxHeight$(): Observable<any> {\n const { offsetHeight: height } = this.codingTestsSplitRef.nativeElement;\n return of({ contentRect: { height: this.getMinTestsPercentHeight(height) } });\n }\n\n private getPercentHeightFromWhole(fullHeight: number, areaHeight: number): number {\n return (areaHeight * 100) / (fullHeight - this.GUTTER_SIZE * 2);\n }\n\n private getMinTestsPercentHeight(height: number): number {\n const minTestsHeightPx = this.isLAT ? this.MIN_LAT_TESTS_HEIGHT_PX : this.MIN_TESTS_HEIGHT_PX;\n return (minTestsHeightPx * 100) / height;\n }\n}\n","<as-split\n *ngIf=\"!isMobile; else mobileTpl\"\n #codingTestsSplit\n class=\"as-split\"\n direction=\"vertical\"\n restrictMove=\"true\"\n [gutterSize]=\"GUTTER_SIZE\"\n>\n <as-split-area class=\"ide-split-area\" [size]=\"currentIdeSplitHeight\">\n <ng-container [ngTemplateOutlet]=\"ide\"></ng-container>\n </as-split-area>\n <as-split-area #testsSplitArea [size]=\"currentTestsSplitHeight\" [minSize]=\"minTestsSplitHeight\">\n <ng-container [ngTemplateOutlet]=\"tests\"></ng-container>\n </as-split-area>\n</as-split>\n\n<ng-template #mobileTpl>\n <div class=\"container-mobile\">\n <ng-container [ngTemplateOutlet]=\"ide\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"tests\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #ide>\n <div class=\"ide-container\">\n <tgo-coding-section\n class=\"coding-section\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [isFullViewMode]=\"isFullViewMode\"\n [isRunnableWithLangSelector]=\"isRunnableWithLangSelector\"\n [shouldGenerateInitCode]=\"shouldGenerateInitCode\"\n [isLAT]=\"isLAT\"\n [languages]=\"languages\"\n [autoHeight]=\"autoHeight\"\n [translations]=\"translations\"\n [isMobile]=\"isMobile\"\n [applicationTheme]=\"applicationTheme\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n ></tgo-coding-section>\n\n <tgo-code-configurations\n *ngIf=\"isFullViewMode\"\n [translations]=\"translations\"\n [companyColor]=\"companyColor\"\n [applicationTheme]=\"applicationTheme\"\n >\n </tgo-code-configurations>\n </div>\n</ng-template>\n\n<ng-template #tests>\n <div class=\"tests\" [class.tests-lat]=\"isLAT\">\n <tgo-code-test-results\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [runTestResponse]=\"runTestResponse\"\n [translations]=\"translations\"\n [exampleTestCases]=\"exampleTestCases\"\n [canChangeProgrammingLang]=\"languages?.length > 1\"\n [showTestCases]=\"isLAT || (isSQL && !hideTestCases)\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [applicationTheme]=\"applicationTheme\"\n (runTestClick)=\"runTestClick.emit($event)\"\n >\n </tgo-code-test-results>\n </div>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { map } from 'rxjs';\nimport { MatCardModule } from '@angular/material/card';\nimport { AngularSplitModule } from 'angular-split';\nimport { ApplicationTheme, ButtonComponentModule } from '@testgorilla/tgo-ui';\nimport { LATLanguages } from '../../models/lat-languages';\nimport { Modes } from '../../models/mode';\nimport { ExampleTestCase } from '../../models/test-cases';\nimport { Themes } from '../../models/theme';\nimport { ConfigurationsService } from '../../services/configurations.service';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport {\n CodeEditorFuncParam,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from '../code-editor/helpers/code-editor-helper.model';\nimport { PasteData } from '../code-editor/models/code-editor.model';\nimport { InstructionsComponent } from '../instructions/instructions.component';\nimport { RunnableEditorComponent } from '../runnable-editor/runnable-editor.component';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'tgo-coding-question',\n templateUrl: './coding-question.component.html',\n styleUrls: ['./coding-question.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n MatCardModule,\n AngularSplitModule,\n ButtonComponentModule,\n InstructionsComponent,\n RunnableEditorComponent,\n ],\n})\nexport class CodingQuestionComponent implements OnInit, OnDestroy {\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly libCodingTestService = inject(LibCodingTestService);\n private readonly configurationsService = inject(ConfigurationsService);\n \n @Input() initCode: string;\n @Input() functionParams: CodeEditorFuncParam[];\n @Input() functionName: string;\n @Input() returnType: keyof CodeEditorTypesMap;\n @Input() isLAT: boolean;\n @Input() isSQL: boolean;\n @Input() canAddCustomTestCases: boolean;\n @Input() languages: LATLanguages;\n @Input() autoHeight: boolean;\n @Input() translations: Record<string, unknown>;\n @Input() questionText: string;\n @Input() mode: Modes;\n @Input() companyColor: string;\n @Input() testCasesStatus: any;\n @Input() loading: boolean;\n @Input() hideTestCases: boolean;\n @Input() runTestResponse = [];\n @Input() exampleTestCases: ExampleTestCase[];\n @Input() applicationTheme: ApplicationTheme;\n\n @Output() pasteEvent = new EventEmitter<PasteData>();\n @Output() codeChange = new EventEmitter<string>();\n @Output() runTestClick = new EventEmitter<boolean>();\n @Output() languageChange = new EventEmitter<CodeEditorLanguages>();\n\n isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n isFullscreenMode: boolean;\n\n GUTTER_SIZE = 1;\n\n isDarkTheme$ = this.configurationsService.colorTheme$.pipe(map(theme => theme === Themes.Dark));\n\n ngOnInit(): void {\n this.libCodingTestService.isFullscreen$.pipe(untilDestroyed(this)).subscribe(isFullscreen => {\n this.isFullscreenMode = isFullscreen;\n });\n }\n\n ngOnDestroy(): void {\n this.configurationsService.setCodeComponentDestroyed(true);\n this.configurationsService.setColorTheme(Themes.Default);\n this.configurationsService.closeConfigPanel();\n }\n\n enableFullScreenMode(): void {\n this.libCodingTestService.setFullscreen(true);\n }\n}\n","<div\n *ngIf=\"!isMobile; else mobileTpl\"\n class=\"main-container\"\n [ngClass]=\"{ 'main-container-fullscreen': isFullscreenMode }\"\n>\n <mat-card appearance=\"outlined\" class=\"main-card\">\n <as-split class=\"as-split\" direction=\"horizontal\" [useTransition]=\"true\" [gutterSize]=\"GUTTER_SIZE\">\n <as-split-area size=\"38\" minSize=\"24\">\n <ng-container [ngTemplateOutlet]=\"instructions\"></ng-container>\n </as-split-area>\n <as-split-area size=\"62\" minSize=\"30\">\n <ng-container [ngTemplateOutlet]=\"runnableIde\"></ng-container>\n </as-split-area>\n </as-split>\n\n <ui-button\n *ngIf=\"!isFullscreenMode\"\n class=\"fullscreen-btn themed-button\"\n [variant]=\"'secondary'\"\n [iconName]=\"'Full-screen'\"\n [justIcon]=\"true\"\n [size]=\"'big'\"\n [applicationTheme]=\"applicationTheme\"\n [tooltip]=\"translations['TOOLTIPS']['MAXIMISE']\"\n [tooltipPosition]=\"'left'\"\n (buttonClickEvent)=\"enableFullScreenMode()\"\n >\n </ui-button>\n </mat-card>\n</div>\n\n<ng-template #mobileTpl>\n <div class=\"main-container main-container-mobile\">\n <mat-card appearance=\"outlined\" class=\"main-card main-card-mobile\">\n <ng-container [ngTemplateOutlet]=\"instructions\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"runnableIde\"></ng-container>\n </mat-card>\n </div>\n</ng-template>\n\n<ng-template #instructions>\n <tgo-code-instructions\n [mode]=\"mode\"\n [isLAT]=\"isLAT\"\n [questionText]=\"questionText\"\n [translations]=\"translations\"\n [isDarkTheme]=\"isDarkTheme$ | async\"\n ></tgo-code-instructions>\n</ng-template>\n<ng-template #runnableIde>\n <tgo-runnable-editor\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [isFullViewMode]=\"true\"\n [shouldGenerateInitCode]=\"false\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [languages]=\"languages\"\n [autoHeight]=\"autoHeight\"\n [translations]=\"translations\"\n [questionText]=\"questionText\"\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [runTestResponse]=\"runTestResponse\"\n [exampleTestCases]=\"exampleTestCases\"\n [hideTestCases]=\"hideTestCases\"\n [applicationTheme]=\"applicationTheme\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (runTestClick)=\"runTestClick.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n >\n </tgo-runnable-editor>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { take } from 'rxjs';\nimport { ApplicationTheme } from '@testgorilla/tgo-ui';\n\nimport {\n CodeEditorFuncParam,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from '../code-editor/helpers/code-editor-helper.model';\nimport { PasteData } from '../code-editor/models/code-editor.model';\nimport { CodingSnapshot } from '../code-editor/models/coding-snapshot.model';\nimport { AssessmentIdPreview, LATLanguage, LATLanguages } from '../../models/lat-languages';\nimport { Modes } from '../../models/mode';\nimport { ExampleTestCase } from '../../models/test-cases';\nimport { ViewMode } from '../../models/view-mode';\nimport { ConfigurationsService } from '../../services/configurations.service';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport { StorageCodingService } from '../../services/storage.service';\nimport { TestCasesService } from '../../services/test-cases.service';\nimport { ThemeService } from '../../services/theme.service';\nimport { timeToMs } from '../../utils/time-to-ms.util';\nimport { CodeEditorComponent } from '../code-editor/code-editor.component';\nimport { CodingQuestionComponent } from '../coding-question/coding-question.component';\nimport { RunnableEditorComponent } from '../runnable-editor/runnable-editor.component';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'tgo-coding-test[languages]',\n templateUrl: './tgo-coding-test.component.html',\n styleUrl: './tgo-coding-test.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n CodeEditorComponent,\n CodingQuestionComponent,\n RunnableEditorComponent,\n ],\n})\nexport class TgoCodingTestComponent implements OnInit, OnChanges {\n\n private readonly configurationsService = inject(ConfigurationsService);\n private readonly libCodingTestService = inject(LibCodingTestService);\n private readonly testCasesService = inject(TestCasesService);\n private readonly StorageCodingService = inject(StorageCodingService);\n private readonly themeService = inject(ThemeService);\n\n @Input() initCode: string;\n @Input() snapshot: CodingSnapshot;\n @Input() functionParams: CodeEditorFuncParam[];\n @Input() functionName: string;\n @Input() returnType: keyof CodeEditorTypesMap;\n @Input() isLAT: boolean;\n @Input() isSQL: boolean;\n @Input() shouldGenerateInitCode = true;\n @Input() canAddCustomTestCases = true;\n\n @Input() selectedProgrammingLanguage: LATLanguage;\n\n @Input()\n set languages(value: LATLanguages) {\n if (!value.length) {\n throw new Error('At least one language is required');\n } else {\n Object.defineProperty(this, 'languages', {\n value,\n writable: true,\n });\n this.updateLanguage();\n }\n }\n\n @Input() isReadonly: boolean;\n @Input() autoHeight: boolean;\n @Input() translations: Record<string, unknown>;\n @Input() questionText: string;\n @Input() mode: Modes;\n @Input() assessmentId: string;\n @Input() companyColor: string;\n @Input() testCasesStatus: any;\n @Input() loading: boolean;\n @Input() runTestResponse = [];\n @Input() viewMode: ViewMode;\n @Input() exampleTestCases: ExampleTestCase[];\n // todo: remove this property from everywhere after sunsetting of the old flow\n @Input() hideTestCases: boolean;\n @Input() applicationTheme: ApplicationTheme = 'light';\n @Input() questionId: number;\n\n @Output() pasteEvent = new EventEmitter<PasteData>();\n @Output() codeChange = new EventEmitter<string>();\n @Output() runTestClick = new EventEmitter<boolean>();\n @Output() languageChange = new EventEmitter<CodeEditorLanguages>();\n\n colorTheme$ = this.configurationsService.colorTheme$;\n isFullscreenMode$ = this.libCodingTestService.isFullscreen$;\n\n isFullViewMode: boolean;\n ViewModes = ViewMode;\n themeSpecificColor: string;\n\n ngOnInit() {\n this.setIsFullViewMode();\n this.setCompanyColor();\n this.libCodingTestService.setInitCode(this.initCode);\n\n // Local Data should be maintained only for candidate environment\n if (this.isFullViewMode) {\n // Perform periodic storage maintenance\n this.performPeriodicMaintenance();\n\n const storageAssessmentId =\n this.isLAT && this.mode === Modes.NonAssessmentPreview\n ? AssessmentIdPreview\n : this.assessmentId;\n const storageCodeEnable =\n this.isLAT && (this.mode === Modes.Preview || this.mode === Modes.NonAssessmentPreview)\n ? true\n : this.mode === Modes.Running;\n const storageTestCasesEnable = this.mode === Modes.Running && this.isLAT;\n const storageQuestionId = Number.isInteger(this.questionId)\n ? String(this.questionId)\n : 'default-question-id';\n\n this.libCodingTestService.currentLanguage$.pipe(take(1)).subscribe(language => {\n this.StorageCodingService.setupAutoSavedData(\n language,\n storageAssessmentId,\n storageQuestionId,\n storageCodeEnable,\n storageTestCasesEnable,\n this.isLAT,\n this.mode\n );\n if (storageTestCasesEnable) {\n this.updateTestCases();\n }\n this.configurationsService.setCodeComponentDestroyed(false);\n this.updateInitCode(this.initCode);\n this.StorageCodingService.initializeSaving();\n });\n\n if (this.mode !== Modes.NonAssessmentPreview || this.isLAT) {\n this.libCodingTestService.clearSavedCode$.pipe(untilDestroyed(this)).subscribe(() => {\n this.StorageCodingService.clearSavedCode();\n if (this.isLAT) {\n this.StorageCodingService.clearSavedTestCases();\n }\n });\n\n if (this.isLAT) {\n this.libCodingTestService.clearLastLang$.pipe(untilDestroyed(this)).subscribe(() => {\n this.StorageCodingService.clearLastLang();\n });\n }\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes.initCode?.firstChange && typeof changes.initCode?.currentValue === 'string') {\n this.libCodingTestService.currentLanguage$.pipe(take(1)).subscribe(language => {\n this.StorageCodingService.changeLanguage(language);\n this.libCodingTestService.setInitCode(this.initCode);\n this.updateInitCode(changes.initCode.currentValue);\n });\n }\n if (changes.companyColor && changes.companyColor?.currentValue) {\n this.themeService.companyColor = changes.companyColor.currentValue;\n }\n }\n\n updateInitCode(code: string) {\n const savedCode = this.StorageCodingService.getSavedCode();\n this.initCode = savedCode ? savedCode : code;\n }\n\n private updateLanguage() {\n const lastLanguageLAT = this.StorageCodingService.getLastLanguageLAT();\n if (this.isLAT && this.isSavedLangRelevant(lastLanguageLAT)) {\n this.libCodingTestService.changeCurrentLanguage(lastLanguageLAT.value);\n const langVersion = this.getRelevantLangVersion(lastLanguageLAT);\n\n if (langVersion) {\n this.libCodingTestService.setVersion(langVersion);\n }\n } else {\n const language = this.selectedProgrammingLanguage || this.languages[0];\n this.libCodingTestService.changeCurrentLanguage(language.value);\n if (language.version) {\n this.libCodingTestService.setVersion(language.version);\n }\n }\n }\n\n private isSavedLangRelevant(lastLanguageLAT: {\n value: CodeEditorLanguages;\n version: string;\n }): boolean {\n return !!lastLanguageLAT && this.languages.some(({ value }) => value === lastLanguageLAT.value);\n }\n\n private getRelevantLangVersion(lastLang: {\n value: CodeEditorLanguages;\n version: string;\n }): string {\n const relevantLang = this.languages.find(({ value }) => value === lastLang?.value);\n\n return relevantLang ? relevantLang.version : lastLang.version;\n }\n\n private updateTestCases() {\n if (this.isLAT || (this.isSQL && !this.hideTestCases)) {\n const testCases = this.StorageCodingService.getSavedTestCases();\n if (testCases?.length) {\n this.libCodingTestService.updateTestCases([...testCases]);\n this.StorageCodingService.updateTestCases([...testCases]);\n if (testCases[testCases.length - 1].localId) {\n this.testCasesService.updateTestCaseLocalId(testCases[testCases.length - 1].localId);\n }\n } else {\n this.libCodingTestService.updateTestCases([]);\n this.StorageCodingService.updateTestCases([]);\n this.testCasesService.resetLastTestCaseLocalId();\n }\n }\n }\n\n private setIsFullViewMode(): void {\n this.isFullViewMode = this.viewMode === ViewMode.Full;\n }\n\n private setCompanyColor(): void {\n this.themeService.themeColors$\n .pipe(untilDestroyed(this))\n .subscribe(({ companyColor, themeSpecificColor }) => {\n this.companyColor = companyColor;\n this.themeSpecificColor = themeSpecificColor;\n });\n }\n\n /**\n * Performs periodic maintenance on localStorage data\n * This is done with a random chance to distribute cleanup over time\n * and prevent all users from cleaning up storage at the same time.\n */\n private performPeriodicMaintenance(): void {\n // Check the last time maintenance was done (stored in a separate key)\n const maintenanceKey = 'lastCodingTestStorageMaintenance';\n const lastMaintenance = localStorage.getItem(maintenanceKey);\n const now = Date.now();\n const isDoneLaterThanDay = now - parseInt(lastMaintenance, 10) > timeToMs(1);\n\n // If maintenance was never done or was done more than a day ago,\n // perform it with a 20% chance to distribute load\n if (!lastMaintenance || isDoneLaterThanDay) {\n // Perform maintenance with 20% probability to distribute load\n if (Math.random() < 0.2) {\n // Perform the cleanup silently\n this.StorageCodingService.performMaintenanceAndCleanup();\n localStorage.setItem(maintenanceKey, now.toString());\n }\n }\n }\n}\n","@switch (viewMode) {\n @case (ViewModes.Full) {\n <tgo-coding-question\n [ngClass]=\"[\n 'coding-question',\n colorTheme$ | async,\n (isFullscreenMode$ | async) ? 'coding-question-fullscreen' : '',\n ]\"\n [ngStyle]=\"{\n '--company-color': companyColor,\n '--company-theme-specific-color': themeSpecificColor,\n }\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [autoHeight]=\"autoHeight\"\n [questionText]=\"questionText\"\n [mode]=\"mode\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [exampleTestCases]=\"exampleTestCases\"\n [languages]=\"languages\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (runTestClick)=\"runTestClick.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n [translations]=\"translations\"\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [runTestResponse]=\"runTestResponse\"\n [applicationTheme]=\"applicationTheme\"\n [hideTestCases]=\"hideTestCases\"\n >\n </tgo-coding-question>\n }\n @case (ViewModes.RunnableIde) {\n <ng-container [ngTemplateOutlet]=\"runnableEditorTpl\"></ng-container>\n }\n @case (ViewModes.RunnableIdeWithLangSelector) {\n <ng-container [ngTemplateOutlet]=\"runnableEditorTpl\"></ng-container>\n }\n @default {\n <tgo-code-editor\n [initCode]=\"initCode\"\n [snapshot]=\"snapshot\"\n [shouldGenerateInitCode]=\"!isFullViewMode && shouldGenerateInitCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [hasCodingConfigPanel]=\"isFullViewMode\"\n [isReadonly]=\"isReadonly\"\n [autoHeight]=\"autoHeight\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n >\n </tgo-code-editor>\n }\n}\n\n<ng-template #runnableEditorTpl>\n <tgo-runnable-editor\n [ngClass]=\"colorTheme$ | async\"\n [ngStyle]=\"{\n '--company-color': companyColor,\n '--company-theme-specific-color': themeSpecificColor,\n }\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [isFullViewMode]=\"false\"\n [shouldGenerateInitCode]=\"shouldGenerateInitCode\"\n [isRunnableWithLangSelector]=\"viewMode === ViewModes.RunnableIdeWithLangSelector\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [languages]=\"languages\"\n [autoHeight]=\"autoHeight\"\n [translations]=\"translations\"\n [questionText]=\"questionText\"\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [runTestResponse]=\"runTestResponse\"\n [exampleTestCases]=\"exampleTestCases\"\n [applicationTheme]=\"applicationTheme\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (runTestClick)=\"runTestClick.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n >\n </tgo-runnable-editor>\n</ng-template>\n","export const ROOT_TRANSLATIONS_SCOPE = 'CODING_QUESTION';\n","export interface SqlTestResult {\n content: string;\n response_msg: string;\n stderr: string | null;\n stdout: string[];\n test_result: string;\n}\n\nexport interface CodeTestResult {\n actualOutput: string;\n logs: string;\n status: 'passed' | 'error';\n}\n\nexport type TestResult = SqlTestResult | CodeTestResult;\n\nexport interface CodingTestsResultsModel {\n listResponse: TestResult[];\n resume: {\n ok: number;\n error: number;\n total: number;\n };\n}\n\nexport interface CoderunnerAttemptModel {\n code?: string;\n created_at?: string;\n executions?: CoderunnerTestCaseExecutionModel[];\n id?: string;\n language?: string;\n question_result_id?: number;\n updated_at?: string;\n}\n\nexport interface CoderunnerTestCaseExecutionModel {\n input: string;\n evaluation: {\n testcase?: string;\n };\n run: CodeRunnerTestCaseExecutionOutputModel;\n compile: CodeRunnerTestCaseExecutionOutputModel;\n attempt_id: null;\n submission_id: null;\n validation_id: null;\n id: string;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CodeRunnerTestCaseExecutionOutputModel {\n stdout?: string;\n stderr?: string;\n signal?: string;\n output?: string;\n}\n\nexport const TIMEOUT_SIGNAL = 'SIGKILL';\n","import { InjectionToken } from '@angular/core';\nimport { TgoCodingTestConfig } from './tgo-coding-test.config';\n\n/**\n * Injection token for the TGO Coding Test library configuration.\n * \n * This token is used to inject the runtime configuration provided\n * by the consuming application into library services.\n */\nexport const TGO_CODING_TEST_CONFIG = new InjectionToken<TgoCodingTestConfig>(\n 'TGO_CODING_TEST_CONFIG',\n {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'TGO_CODING_TEST_CONFIG must be provided. Use provideTgoCodingTest() in your app.config.ts or component providers.'\n );\n },\n }\n);\n\n","import { inject, Injectable } from '@angular/core';\nimport { TGO_CODING_TEST_CONFIG } from '../config/tgo-coding-test.token';\n\n/**\n * Service for accessing TGO Coding Test library configuration.\n * \n * This service provides a clean abstraction layer over the configuration\n * injection token, allowing services to access configuration values\n * without directly injecting the token.\n * \n * @example\n * ```typescript\n * @Injectable()\n * export class MyService {\n * private readonly configService = inject(CodingTestConfigService);\n * \n * doSomething() {\n * const endpoint = this.configService.getCoderunnerV2Endpoint();\n * // Use endpoint...\n * }\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class CodingTestConfigService {\n private readonly config = inject(TGO_CODING_TEST_CONFIG);\n\n /**\n * Gets the main API endpoint URL.\n * \n * @returns The base URL for the main API endpoint\n */\n getApiUrl(): string {\n return this.config.apiUrl;\n }\n\n /**\n * Gets the CodeRunner V2 API endpoint URL.\n * \n * @returns The base URL for the CodeRunner V2 API endpoint\n */\n getCoderunnerV2Endpoint(): string {\n return this.config.coderunnerV2Endpoint;\n }\n}\n\n","import { inject, Injectable } from '@angular/core';\nimport { ApiService } from '@testgorilla/tgo-test-shared';\nimport { EMPTY, Observable, throwError } from 'rxjs';\nimport { LATFormattedTestCases, SqlTestCase } from '../../models/test-cases';\nimport { CoderunnerAttemptModel } from '../../models/coderunner-execution-results';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { SnackbarService } from '@testgorilla/tgo-ui';\nimport { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';\nimport { translate } from '@ngneat/transloco';\nimport { CodeEvent, CodeEventResponse } from '../../models/code-event';\nimport { CodingTestConfigService } from '../coding-test-config.service';\n\n@Injectable()\nexport class CoderunnerApiService {\n private readonly snackbarService = inject(SnackbarService);\n private readonly apiService = inject(ApiService);\n private readonly configService = inject(CodingTestConfigService);\n \n private readonly CR2Url = `${this.configService.getCoderunnerV2Endpoint()}/`;\n\n // todo: will public preview be supported by mFE? if not - remove this\n runPublicTest$(\n code: string,\n testcases: LATFormattedTestCases[] | SqlTestCase[],\n language: string\n ): Observable<CoderunnerAttemptModel> {\n return this.apiService.post(\n `${this.CR2Url}api/attempts/public/`,\n {\n question_id: 0,\n language,\n code,\n testcases,\n question_result_id: 0,\n },\n {},\n this.handleError.bind(this),\n true\n );\n }\n\n runPreviewTest$(\n test_result_id: number,\n code: string,\n testcases: LATFormattedTestCases[] | SqlTestCase[],\n language: string\n ): Observable<CoderunnerAttemptModel> {\n return this.apiService.post(\n `${this.CR2Url}api/attempts/preview/`,\n {\n language,\n code,\n testcases,\n test_result_id,\n },\n {},\n this.handleError.bind(this),\n true\n );\n }\n\n runNonPreviewTest$(\n question_id: number,\n question_result_id: number,\n code: string,\n testcases: LATFormattedTestCases[] | SqlTestCase[],\n language: string\n ): Observable<CoderunnerAttemptModel> {\n return this.apiService.post(\n `${this.CR2Url}api/attempts/`,\n {\n question_id,\n language,\n code,\n testcases,\n question_result_id,\n },\n {},\n this.handleError.bind(this),\n true\n );\n }\n\n sendCodeEvent$(event: CodeEvent): Observable<CodeEventResponse> {\n return this.apiService.post(\n `${this.CR2Url}api/events/`,\n event,\n {},\n this.handleError.bind(this),\n true\n );\n }\n\n private handleError({ error }: HttpErrorResponse): Observable<never> {\n if (error.detail) {\n return throwError(() => error);\n }\n\n const genericErrorText = translate(\n `${ROOT_TRANSLATIONS_SCOPE}.ERRORS.SYSTEM_ERROR`\n );\n this.snackbarService.error(genericErrorText);\n return EMPTY;\n }\n}\n","import { Injectable, signal } from '@angular/core';\nimport { translate } from '@ngneat/transloco';\nimport {\n ApplicationTheme,\n ConfirmDialogComponent,\n DialogService,\n SnackbarService,\n} from '@testgorilla/tgo-ui';\nimport {\n MixpanelService,\n TestResultRead,\n} from '@testgorilla/tgo-test-shared';\nimport {\n CustomTestCase,\n ExampleTestCase,\n TestCaseDeletionAction,\n TestCaseDeletionData,\n} from '../../models/test-cases';\nimport { LibCodingTestService, ResetCodeAction } from '../lib-coding-test.service';\nimport { CodeEditorLanguages } from '../../components/code-editor/helpers/code-editor-helper.model';\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n filter,\n of,\n takeUntil,\n throwError,\n} from 'rxjs';\nimport { catchError, map, switchMap, take, tap } from 'rxjs/operators';\nimport { CodeEvent, CodeEventResponse } from '../../models/code-event';\nimport {\n CodeRunnerTestCaseExecutionOutputModel,\n CoderunnerAttemptModel,\n CoderunnerTestCaseExecutionModel,\n CodingTestsResultsModel,\n TIMEOUT_SIGNAL,\n} from '../../models/coderunner-execution-results';\nimport { MixpanelEvents } from '../../models/mixpanel-events';\nimport {\n ProgrammingLanguage,\n ProgrammingLanguageVersioned,\n} from '../../models/programming-language';\nimport {\n GroupedTestCasesResult,\n LATFormattedTestCases,\n SqlTestCase,\n Testcase,\n} from '../../models/test-cases';\nimport { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';\nimport { CoderunnerApiService } from './coderunner-api.service';\n\ninterface CustomError {\n detail?: string;\n}\n\n@Injectable()\nexport class CodingTestService {\n readonly translationContext = `${ROOT_TRANSLATIONS_SCOPE}.CODING_LIB.`;\n\n private codingTestResults: CodingTestsResultsModel = {\n listResponse: [],\n resume: {\n ok: 0,\n error: 0,\n total: 0,\n },\n };\n private currentLanguage!: ProgrammingLanguage;\n private codingTestResutsSubj$ = new BehaviorSubject(this.codingTestResults);\n codingTestResults$ = this.codingTestResutsSubj$.asObservable();\n\n isTestResultsLoading = signal<boolean>(false);\n\n private unsubscribe$ = new Subject<void>();\n\n private sqlTestCases!: SqlTestCase[];\n private isSQLTest = false;\n\n constructor(\n private coderunnerApiService: CoderunnerApiService,\n private libCodingTestService: LibCodingTestService,\n private mixpanel: MixpanelService,\n private snackBar: SnackbarService,\n private dialog: DialogService\n ) {}\n\n private getBaseExampleTestCase = (id: number, index: number) => ({\n id: id ?? 0,\n name: `Example ${index + 1}`,\n preloaded: true,\n });\n\n transformToExampleLATtestCase = (\n testcase: Testcase,\n index: number\n ): ExampleTestCase => ({\n ...this.getBaseExampleTestCase(testcase.id!, index),\n expectedOutput: testcase.solution ?? '',\n input: testcase.input,\n });\n\n transformToExampleSQLTestCase = (\n testcase: SqlTestCase,\n index: number\n ): ExampleTestCase => ({\n ...this.getBaseExampleTestCase(testcase.id!, index),\n expectedOutput: testcase.result ?? '',\n });\n\n setSqlTestCases(sqlTestCases: SqlTestCase[]) {\n this.sqlTestCases = sqlTestCases;\n }\n\n getSqlTestCases(): SqlTestCase[] {\n return this.sqlTestCases;\n }\n\n handleResetCodeModal(applicationTheme: ApplicationTheme, companyColor: string): void {\n const modalTranslationContext = `${ROOT_TRANSLATIONS_SCOPE}.MODALS.RESET_CODE.`;\n const modalData = {\n confirmButtonText: translate(`${modalTranslationContext}SUBMIT`),\n title: translate(`${modalTranslationContext}TITLE`),\n message: translate(`${modalTranslationContext}MESSAGE`),\n color: companyColor,\n };\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n applicationTheme,\n size: 'small',\n extraData: modalData,\n });\n\n dialogRef\n .afterClosed()\n .pipe(filter(Boolean), take(1))\n .subscribe(() => {\n this.libCodingTestService.confirmReset();\n });\n }\n\n listenDeleteCustomTestCases(): Observable<TestCaseDeletionData> {\n return this.libCodingTestService.testCaseDeletion$.pipe(\n filter(({ action }) => action === TestCaseDeletionAction.Try)\n );\n }\n\n handleDeleteTestCaseModal(\n index: number,\n applicationTheme: ApplicationTheme,\n companyColor: string\n ): void {\n const deleteTestCaseTranslationContext = `${ROOT_TRANSLATIONS_SCOPE}.MODALS.DELETE_TEST_CASE.`;\n const modalData = {\n title: translate(`${deleteTestCaseTranslationContext}TITLE`),\n message: translate(`${deleteTestCaseTranslationContext}MESSAGE`),\n confirmButtonText: translate(`${deleteTestCaseTranslationContext}SUBMIT`),\n color: companyColor,\n };\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n applicationTheme,\n size: 'small',\n extraData: modalData,\n });\n\n dialogRef\n .afterClosed()\n .pipe(filter(Boolean), take(1))\n .subscribe(() => {\n this.libCodingTestService.confirmTestCaseDeletion(index);\n });\n }\n\n handleLanguageChangeModal(\n questionResultId: number,\n selectedLanguage?: ProgrammingLanguage,\n applicationTheme: ApplicationTheme = 'light',\n companyColor?: string,\n ): void {\n const modalLangChangeTranslationContext = `${ROOT_TRANSLATIONS_SCOPE}.MODALS.LANGUAGE_CHANGE.`;\n const modalData = {\n confirmButtonText: translate(\n `${modalLangChangeTranslationContext}SUBMIT`\n ),\n title: translate(`${modalLangChangeTranslationContext}TITLE`),\n message: translate(`${modalLangChangeTranslationContext}MESSAGE`),\n ...(companyColor && { color: companyColor }),\n };\n\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n applicationTheme,\n size: 'small',\n extraData: modalData,\n });\n\n dialogRef\n .afterClosed()\n .pipe(take(1))\n .subscribe((result) => {\n if (result) {\n this.libCodingTestService.confirmLanguageChange();\n if (selectedLanguage) {\n this.setCurrentLanguageLAT(selectedLanguage);\n this.sendLanguageChangeEvent$(questionResultId);\n }\n } else {\n this.libCodingTestService.cancelLanguageChange();\n }\n });\n }\n\n setCurrentLanguageLAT(language: ProgrammingLanguage): void {\n this.currentLanguage = language;\n }\n\n listenCodingTestChanges(): Observable<ResetCodeAction> {\n return this.libCodingTestService.codeReset$.pipe(\n filter((val) => val === ResetCodeAction.Try)\n );\n }\n\n runTest(\n resultId: number,\n code: string,\n isLAT = true,\n isSQL = false,\n // todo: remove from everywhere or comment temporarily?\n publicPreview = false,\n preview = false,\n id = 0,\n testResultId = 0,\n testData?: TestResultRead\n ): void {\n this.preRunTests();\n if (isSQL) {\n this.getSQLrequest(\n resultId,\n testResultId,\n code,\n id,\n publicPreview,\n preview\n );\n } else if (isLAT) {\n const testCases: (ExampleTestCase | CustomTestCase)[] =\n this.libCodingTestService.getValidTestCases();\n const testCasesFormatted = testCases.map((testCase) => ({\n input: testCase.input,\n solution: testCase.expectedOutput,\n })) as LATFormattedTestCases[];\n this.libCodingTestService.currentLanguage$\n .pipe(take(1))\n .subscribe((language) => {\n const runReq$ = this.getLATrequest(\n id,\n resultId,\n testResultId,\n code,\n testCasesFormatted as LATFormattedTestCases[],\n language,\n publicPreview,\n preview\n );\n this.runLAT(\n runReq$,\n publicPreview,\n preview,\n testData || ({} as TestResultRead),\n testCases,\n code,\n resultId\n );\n });\n }\n }\n\n sendCopypasteEvent$(\n code: string,\n copiedText: string,\n questionResultId: number\n ): Observable<CodeEventResponse> {\n const event: CodeEvent = this.getBaseEvent({\n code,\n event_type: 'COPYPASTE',\n extra_payload: copiedText,\n question_result_id: questionResultId,\n });\n\n return this.coderunnerApiService.sendCodeEvent$(event);\n }\n\n sendAutosaveEvent$(\n code: string,\n questionResultId: number\n ): Observable<CodeEventResponse> {\n const event: CodeEvent = this.getBaseEvent({\n code,\n event_type: 'AUTOSAVE',\n question_result_id: questionResultId,\n });\n\n return this.coderunnerApiService\n .sendCodeEvent$(event)\n .pipe(catchError((err) => of(err)));\n }\n\n private sendLanguageChangeEvent$(questionResultId: number): void {\n const event: CodeEvent = this.getBaseEvent({\n event_type: 'SWITCH',\n question_result_id: questionResultId,\n });\n\n this.coderunnerApiService.sendCodeEvent$(event).pipe(take(1)).subscribe();\n }\n\n private getBaseEvent(event: Partial<CodeEvent>): CodeEvent {\n let language = '';\n\n if (this.isSQLTest) {\n language = ProgrammingLanguageVersioned.SQLite;\n } else {\n const { name, version } = this.currentLanguage;\n language = `${name}-${version}`;\n }\n\n const baseEvent: Partial<CodeEvent> = {\n code: '',\n extra_payload: '',\n attempt_id: null,\n language,\n };\n\n return { ...baseEvent, ...event } as CodeEvent;\n }\n\n private sendCodeEvent$(\n attemptId: string,\n questionResultId: number,\n code: string\n ): Observable<CodeEventResponse> {\n const event: CodeEvent = this.getBaseEvent({\n code,\n attempt_id: attemptId,\n event_type: 'ATTEMPT',\n question_result_id: questionResultId,\n });\n\n return this.coderunnerApiService.sendCodeEvent$(event);\n }\n\n private countTestResults(\n executions: CoderunnerTestCaseExecutionModel[] | undefined\n ): {\n passed: number;\n error: number;\n total: number;\n } {\n if (executions) {\n return executions.reduce(\n (acc, response) => {\n if (response.evaluation.testcase) {\n acc.passed++;\n } else {\n acc.error++;\n }\n acc.total++;\n return acc;\n },\n { passed: 0, error: 0, total: 0 }\n );\n }\n return { passed: 0, error: 0, total: 0 };\n }\n\n private handleTestCasesResult(\n testCasesResultObject: CodingTestsResultsModel\n ): void {\n this.codingTestResults = testCasesResultObject;\n this.publishTestResults();\n this.isTestResultsLoading.set(false);\n }\n\n private getSQLrequest(\n resultId: number,\n testResultId: number,\n code: string,\n id: number,\n publicPreview: boolean,\n preview: boolean\n ): void {\n const testCases: SqlTestCase[] = this.getSqlTestCases();\n let runReq$: Observable<CoderunnerAttemptModel>;\n if (publicPreview) {\n runReq$ = this.coderunnerApiService.runPublicTest$(\n code,\n testCases,\n ProgrammingLanguageVersioned.SQLite\n );\n } else if (preview) {\n runReq$ = this.coderunnerApiService.runPreviewTest$(\n testResultId,\n code,\n testCases,\n ProgrammingLanguageVersioned.SQLite\n );\n } else {\n runReq$ = this.coderunnerApiService.runNonPreviewTest$(\n id,\n resultId,\n code,\n testCases,\n ProgrammingLanguageVersioned.SQLite\n );\n }\n this.runSql(runReq$, testCases, resultId, !publicPreview && !preview, code);\n }\n\n private runSql(\n runReq$: Observable<CoderunnerAttemptModel>,\n testCases: SqlTestCase[],\n questionResultId: number,\n isActualQuestion: boolean,\n code: string\n ) {\n let attemptId = '';\n\n runReq$\n .pipe(\n catchError((err) => {\n this.finalizeReq(err);\n return throwError(() => err);\n }),\n tap((res) => this.finalizeReq(res as CustomError)),\n tap(({ id }) => (attemptId = id ?? '')),\n switchMap((responseArray: CoderunnerAttemptModel) =>\n of(responseArray.executions).pipe(\n map((executions) => this.countTestResults(executions)),\n map((countResult) => {\n const sqlExecutedSuccessfullyCopy = translate(\n `${this.translationContext}TEST_RESULTS.TEST_CASES.SQL_EXECUTED_SUCCESSFULLY`\n );\n const noOutputCopies = this.getNoOutputCopies();\n\n return {\n resume: {\n ok: countResult.passed,\n error: countResult.error,\n total: countResult.total,\n },\n listResponse: responseArray.executions?.map(\n ({ run, evaluation }: CoderunnerTestCaseExecutionModel) => ({\n actualOutput: run.stdout\n ? run.stdout\n : run.stderr || run.signal === TIMEOUT_SIGNAL\n ? noOutputCopies['noResponse']\n : noOutputCopies['noOutput'],\n logs: this.getCoderunnerLogs(\n run,\n TIMEOUT_SIGNAL,\n noOutputCopies['timeoutError'],\n sqlExecutedSuccessfullyCopy\n ),\n status: evaluation.testcase ? 'passed' : 'error',\n })\n ),\n } as CodingTestsResultsModel;\n }),\n tap((testCasesResultObject) =>\n this.handleTestCasesResult(testCasesResultObject)\n )\n )\n ),\n switchMap(() =>\n this.getSendCodeEventStream$(\n isActualQuestion,\n attemptId,\n questionResultId,\n code\n )\n )\n )\n .subscribe();\n }\n\n private getLATrequest(\n id: number,\n resultId: number,\n testResultId: number,\n code: string,\n testCasesFormatted: LATFormattedTestCases[],\n language: CodeEditorLanguages,\n publicPreview: boolean,\n preview: boolean\n ): Observable<CoderunnerAttemptModel> {\n if (publicPreview) {\n return this.coderunnerApiService.runPublicTest$(\n code,\n testCasesFormatted,\n `${language}-${this.libCodingTestService.getVersion()}`\n );\n } else if (preview) {\n return this.coderunnerApiService.runPreviewTest$(\n testResultId,\n code,\n testCasesFormatted,\n `${language}-${this.libCodingTestService.getVersion()}`\n );\n } else {\n return this.coderunnerApiService.runNonPreviewTest$(\n id,\n resultId,\n code,\n testCasesFormatted,\n `${language}-${this.libCodingTestService.getVersion()}`\n );\n }\n }\n\n setIsSQLTest(isSQL: boolean): void {\n this.isSQLTest = isSQL;\n }\n\n private runLAT(\n runCodeRequest$: Observable<CoderunnerAttemptModel>,\n isPublicPreviewLAT: boolean,\n isPractice = false,\n testData: TestResultRead,\n testCases: ExampleTestCase[] | CustomTestCase[],\n code: string,\n questionResultId: number\n ): void {\n const pistonRegex = /\\/piston\\/[^/ ]+(\\/[^/ ]+)*/g;\n const reqStartTime = performance.now();\n let reqEndTime: number;\n let attemptId = '';\n\n runCodeRequest$\n .pipe(\n catchError((err) => {\n this.finalizeReq(err);\n return throwError(() => err);\n }),\n tap((res) => this.finalizeReq(res as CustomError)),\n tap(() => (reqEndTime = performance.now())),\n tap(({ id }) => (attemptId = id ?? '')),\n switchMap((responseArray: CoderunnerAttemptModel) =>\n of(responseArray.executions).pipe(\n map((executions) => (executions ? executions : [])),\n map((executions: CoderunnerTestCaseExecutionModel[]) =>\n executions.map((x) => {\n if (x.run.stderr) {\n x.run.stderr = x.run.stderr.replace(pistonRegex, '');\n }\n if (x.run.stdout) {\n x.run.stdout = x.run.stdout.replace(pistonRegex, '');\n }\n return x;\n })\n ),\n map((executions) => this.countTestResults(executions)),\n map((countResult) => {\n if (!isPublicPreviewLAT) {\n const responseTime = Math.round(reqEndTime - reqStartTime);\n this.trackTestcasesRun(\n testData,\n countResult,\n responseArray.executions || [],\n responseTime,\n testCases\n );\n }\n const noOutputCopies = this.getNoOutputCopies();\n const executedSuccessfullyCopy = translate(\n `${this.translationContext}TEST_RESULTS.TEST_CASES.EXECUTED_SUCCESSFULLY`\n );\n\n return {\n resume: {\n ok: countResult.passed,\n error: countResult.error,\n total: countResult.total,\n },\n listResponse: responseArray.executions?.map(\n ({\n run,\n evaluation,\n compile,\n }: CoderunnerTestCaseExecutionModel) => ({\n actualOutput: run.stdout\n ? run.stdout\n : run.stderr || run.signal === TIMEOUT_SIGNAL\n ? noOutputCopies['noResponse']\n : noOutputCopies['noOutput'],\n logs: this.getCoderunnerLogs(\n run,\n TIMEOUT_SIGNAL,\n noOutputCopies['timeoutError'],\n executedSuccessfullyCopy,\n compile\n ),\n status: evaluation.testcase ? 'passed' : 'error',\n })\n ),\n } as CodingTestsResultsModel;\n }),\n tap((testCasesResultObject) =>\n this.handleTestCasesResult(testCasesResultObject)\n )\n )\n ),\n switchMap(() =>\n this.getSendCodeEventStream$(\n !isPractice && !isPublicPreviewLAT,\n attemptId,\n questionResultId,\n code\n )\n )\n )\n .subscribe();\n }\n\n private finalizeReq(err: CustomError): void {\n this.isTestResultsLoading.set(false);\n if (err.detail) {\n this.snackBar.error(err.detail);\n }\n }\n\n private getNoOutputCopies(): { [key: string]: string } {\n return {\n noResponse: translate(\n `${this.translationContext}TEST_RESULTS.TEST_CASES.NO_RESPONSE`\n ),\n noOutput: translate(\n `${this.translationContext}TEST_RESULTS.TEST_CASES.NONE`\n ),\n timeoutError: translate(\n `${this.translationContext}TEST_RESULTS.TEST_CASES.TIMEOUT_ERROR`\n ),\n };\n }\n\n private getSendCodeEventStream$(\n isActualQuestion: boolean,\n attemptId: string,\n questionResultId: number,\n code: string\n ): Observable<CodeEventResponse> {\n if (isActualQuestion) {\n return this.sendCodeEvent$(attemptId, questionResultId, code);\n } else {\n return of({} as CodeEventResponse);\n }\n }\n\n // todo: check if we need this anymore due to MFE providers specificity\n unsubscribeAll(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n resetRunTestSummary(): void {\n this.codingTestResults = {\n listResponse: [],\n resume: {\n ok: 0,\n error: 0,\n total: 0,\n },\n };\n\n this.publishTestResults();\n }\n\n trackConfigChanged(isPracticeQuestion = false): void {\n this.libCodingTestService.configFieldChanged$\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((config) => {\n const { settingInstance, changedKey, newValueString } =\n this.getMixpanelSettingsData(isPracticeQuestion, config);\n\n this.mixpanel.track(MixpanelEvents.ChangedSettings, {\n coderunner_setting: changedKey,\n coderunner_setting_new_value: newValueString,\n coderunner_setting_instance: settingInstance,\n });\n });\n }\n\n private getCoderunnerLogs(\n run: CodeRunnerTestCaseExecutionOutputModel,\n TIMEOUT_SIGNAL: string,\n timeoutErrorCopy: string,\n executedSuccessfullyCopy: string,\n compile?: CodeRunnerTestCaseExecutionOutputModel,\n isSQL?: boolean\n ): string {\n if (isSQL) {\n return run?.stderr === TIMEOUT_SIGNAL\n ? run.stderr\n : executedSuccessfullyCopy;\n } else if (run?.stderr) {\n return run.stderr === compile?.stderr\n ? run.stderr\n : `${run.stderr}\\n${compile?.stderr || ''}`;\n } else if (run.signal === TIMEOUT_SIGNAL) {\n return timeoutErrorCopy;\n }\n return executedSuccessfullyCopy;\n }\n\n private trackTestcasesRun(\n testData: TestResultRead,\n countResult: { [key: string]: number },\n testCasesExecutions: CoderunnerTestCaseExecutionModel[],\n responseTime: number,\n testCases: ExampleTestCase[] | CustomTestCase[]\n ): void {\n const {\n instance,\n customPassed,\n customFailed,\n examplePassed,\n exampleFailed,\n customEmpty,\n testUuid,\n testName,\n } = this.getMixpanelTestCasesData(\n testData,\n countResult,\n testCasesExecutions,\n testCases\n );\n\n this.mixpanel.track('Candidate ran tests in Coderunner', {\n coding_test_uuid: testUuid,\n coding_test_name: testName,\n coderunner_test_instance: instance,\n custom_testcases_passed: customPassed,\n custom_testcases_failed: customFailed,\n custom_testcases_empty: customEmpty,\n example_testcases_passed: examplePassed,\n example_testcases_failed: exampleFailed,\n coderunner_response_time: responseTime,\n });\n }\n\n private preRunTests() {\n this.isTestResultsLoading.set(true);\n this.resetRunTestSummary();\n }\n\n private getMixpanelTestCasesData(\n testData: TestResultRead,\n { total }: { [key: string]: number },\n testCasesExecutions: CoderunnerTestCaseExecutionModel[],\n validTestCases: ExampleTestCase[] | CustomTestCase[]\n ) {\n const allTestCasesCount = this.libCodingTestService.getTestCasesCount();\n const customEmpty = allTestCasesCount - total || 0;\n const instance = this.getMixpanelInstanceValue(!!testData.is_preview_mode);\n const { uuid: testUuid } = testData;\n const { name: testName } = testData.test ?? { name: '' };\n const mixpanelResults = this.getGroupedTestCaseResult(\n testCasesExecutions,\n validTestCases\n );\n\n return {\n testUuid: testUuid?.replace(/-/g, ''),\n testName,\n instance,\n customEmpty,\n customPassed: mixpanelResults.custom.passed,\n customFailed: mixpanelResults.custom.failed,\n examplePassed: mixpanelResults.example.passed,\n exampleFailed: mixpanelResults.example.failed,\n };\n }\n\n private getGroupedTestCaseResult(\n testCasesExecutions: CoderunnerTestCaseExecutionModel[],\n validTestCases: ExampleTestCase[] | CustomTestCase[]\n ): GroupedTestCasesResult {\n const groupedResult = {\n custom: {\n failed: 0,\n passed: 0,\n },\n example: {\n failed: 0,\n passed: 0,\n },\n };\n\n testCasesExecutions.forEach(({ input: resultInput, evaluation }) => {\n const localTestCase = validTestCases.find(\n ({ input }) => resultInput === input\n );\n const mixpanelResultBody = localTestCase?.preloaded\n ? groupedResult.example\n : groupedResult.custom;\n\n if (evaluation?.testcase) {\n mixpanelResultBody.passed++;\n } else {\n mixpanelResultBody.failed++;\n }\n });\n\n return groupedResult;\n }\n\n private getMixpanelSettingsData(\n isPracticeQuestion: boolean,\n config: { [key: string]: boolean | string | number }\n ) {\n const settingInstance = this.getMixpanelInstanceValue(isPracticeQuestion);\n const changedKey = Object.keys(config)[0];\n const THEME_IDENTIFIER = 'theme-';\n let changedValue: boolean | string | number = config[changedKey];\n let newValueString;\n\n if (typeof changedValue === 'boolean') {\n newValueString = changedValue ? 'ON' : 'OFF';\n } else {\n changedValue = String(changedValue);\n newValueString = changedValue.includes(THEME_IDENTIFIER)\n ? changedValue.replace(THEME_IDENTIFIER, '')\n : changedValue;\n }\n\n return { settingInstance, changedKey, newValueString };\n }\n\n private getMixpanelInstanceValue(isPracticeQuestion: boolean) {\n return isPracticeQuestion ? 'practice question' : 'real test';\n }\n\n private publishTestResults() {\n this.codingTestResutsSubj$.next({ ...this.codingTestResults });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { translate } from '@ngneat/transloco';\nimport {\n GuidedTour,\n GuidedTourService,\n Orientation,\n TourStep,\n} from 'ngx-guided-tour';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';\n\nexport const enum CodingTestTourMode {\n PracticeQuestion = 'practice',\n RealQuestion = 'real',\n}\n\n@Injectable()\nexport class CodingTestTourService {\n private readonly translationContext = `${ROOT_TRANSLATIONS_SCOPE}.TOUR.`;\n private readonly guidedTourId = 'lat-coding-tour';\n private readonly MINIMUM_SCREEN_SIZE = 599;\n\n private activeGuidedTourIdSub$ = new BehaviorSubject('');\n activeGuidedTourId$ = this.activeGuidedTourIdSub$.asObservable();\n\n constructor(private guidedTourService: GuidedTourService) {}\n\n init(mode: CodingTestTourMode): void {\n this.start(mode);\n }\n\n skipTour(): void {\n // currentTourStepCount checks if there is a currentTour before checking stepCount.\n if (this.guidedTourService.currentTourStepCount) {\n this.guidedTourService.skipTour();\n }\n }\n\n private start(mode: CodingTestTourMode) {\n if (window.innerWidth > this.MINIMUM_SCREEN_SIZE) {\n this.guidedTourService.startTour(this.getTour(mode));\n }\n this.publishActiveGuidedTourId();\n }\n\n private publishActiveGuidedTourId(): void {\n this.activeGuidedTourIdSub$.next(this.guidedTourId);\n }\n\n private getTour(mode: CodingTestTourMode): GuidedTour {\n let steps: TourStep[] = [];\n const step1 = {\n title: translate(`${this.translationContext}STEP_1.TITLE`),\n selector: '#question-section',\n content: translate(`${this.translationContext}STEP_1.MESSAGE`),\n orientation: Orientation.Right,\n };\n const step2 = {\n title: translate(`${this.translationContext}STEP_2.TITLE`),\n selector: '#language-dropdown',\n content: translate(`${this.translationContext}STEP_2.MESSAGE`),\n orientation: Orientation.Bottom,\n };\n const step3 = {\n title: translate(`${this.translationContext}STEP_3.TITLE`),\n selector: '#test-cases',\n content: translate(`${this.translationContext}STEP_3.MESSAGE`),\n orientation: Orientation.Top,\n };\n const step4 = {\n title: translate(`${this.translationContext}STEP_4.TITLE`),\n selector: '#configuration-ide-button',\n content: translate(`${this.translationContext}STEP_4.MESSAGE`),\n orientation: Orientation.BottomRight,\n };\n const step5 = {\n title: translate(`${this.translationContext}STEP_5.TITLE`),\n selector: '[data-tourId*=\"question-next-finish-button\"]',\n content: translate(`${this.translationContext}STEP_5.MESSAGE`),\n orientation: Orientation.Bottom,\n };\n\n switch (mode) {\n case CodingTestTourMode.PracticeQuestion:\n steps = [step1, step2, step3, step4, step5];\n break;\n case CodingTestTourMode.RealQuestion:\n steps = [step2, step3, step4];\n break;\n }\n\n return {\n tourId: this.guidedTourId,\n useOrb: false,\n minimumScreenSize: this.MINIMUM_SCREEN_SIZE,\n steps,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ApiService } from '@testgorilla/tgo-test-shared';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class CandidatureApiService {\n constructor(\n private apiService: ApiService\n ) {\n }\n\n getAvailableLanguages$(): Observable<number[]> {\n return this.apiService.get('candidatures/test-results/programming-languages/');\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n EventEmitter,\n HostBinding,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport { translate, TRANSLOCO_SCOPE, TranslocoModule, TranslocoService } from '@ngneat/transloco';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport {\n ApiService,\n Assessment,\n EnvironmentService,\n getAvailableLangs,\n IAntiCheatingState,\n IConfigurationState,\n INavigationButtonState,\n IQuestionDataContract,\n ISubmissionState,\n MixpanelService,\n Question,\n TestResultRead,\n ThemeService,\n TranslocoLazyModuleUtils,\n} from '@testgorilla/tgo-test-shared';\nimport {\n ApplicationTheme,\n ConfirmDialogComponent,\n DialogComponentModule,\n DialogService,\n SnackbarComponentModule,\n} from '@testgorilla/tgo-ui';\nimport { GuidedTourModule, GuidedTourService } from 'ngx-guided-tour';\nimport { interval, Observable, Subscription } from 'rxjs';\nimport { switchMap, take, tap } from 'rxjs/operators';\n\nimport { CodingTestsResultsModel } from '../../models/coderunner-execution-results';\nimport { LATLanguages } from '../../models/lat-languages';\nimport { Modes } from '../../models/mode';\nimport { PasteData } from '../../models/paste-data';\nimport {\n ProgrammingLanguage,\n ProgrammingLanguageVersioned,\n} from '../../models/programming-language';\nimport { ExampleTestCase, SqlTestCase } from '../../models/test-cases';\nimport { Themes } from '../../models/theme';\nimport { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';\nimport { ViewMode } from '../../models/view-mode';\nimport {\n CandidatureApiService,\n CoderunnerApiService,\n CodingTestService,\n CodingTestTourMode,\n CodingTestTourService,\n} from '../../services/candidate-coding-test-services';\nimport { CodingTestConfigService } from '../../services/coding-test-config.service';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport { CodeEditorLanguages } from '../code-editor/helpers/code-editor-helper.model';\nimport { TgoCodingTestComponent } from '../tgo-coding-test/tgo-coding-test.component';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'tgo-coding-test-candidate-view',\n templateUrl: './tgo-coding-test-candidate-view.component.html',\n styleUrls: ['./tgo-coding-test-candidate-view.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n TranslocoModule,\n DialogComponentModule,\n SnackbarComponentModule,\n TgoCodingTestComponent,\n GuidedTourModule,\n CommonModule,\n RouterModule,\n ],\n providers: [\n TranslocoLazyModuleUtils.getScopeProvider(\n 'tgo-coding-test',\n getAvailableLangs(),\n ROOT_TRANSLATIONS_SCOPE,\n (lang: string) => {\n // Fetch from app assets; demo app copies the library assets to\n // /assets/tgo-coding-test via project.json.\n const url = new URL(`assets/tgo-coding-test/i18n/${lang}.json`, document.baseURI).href;\n return fetch(url).then(res => res.json());\n }\n ),\n EnvironmentService,\n CoderunnerApiService,\n CodingTestService,\n CodingTestTourService,\n GuidedTourService,\n ThemeService,\n CandidatureApiService,\n MixpanelService,\n\n // use MockedApiService for local demo ONLY\n ApiService, //{ provide: ApiService, useClass: MockedApiService },\n ],\n})\nexport class TgoCodingTestCandidateViewComponent\n implements OnInit, IQuestionDataContract, OnDestroy\n{\n private readonly dialogService = inject(DialogService);\n private readonly translationScope = inject(TRANSLOCO_SCOPE);\n private readonly candidatureApiService = inject(CandidatureApiService);\n private readonly codingTestTourService = inject(CodingTestTourService);\n private readonly libCodingTestService = inject(LibCodingTestService);\n private readonly environmentService = inject(EnvironmentService);\n private readonly codingTestService = inject(CodingTestService);\n private readonly translocoService = inject(TranslocoService);\n private readonly themeService = inject(ThemeService);\n private readonly apiService = inject(ApiService);\n private readonly route = inject(ActivatedRoute);\n private readonly codingTestConfigService = inject(CodingTestConfigService);\n\n @Input() assessment?: Assessment;\n @Input({ required: true }) question!: Question;\n @Input({ required: true }) test!: TestResultRead;\n @Input() expirationObservable?: Observable<void>;\n @Input() completeObservable?: Observable<void>;\n @Input() isDemo?: boolean;\n\n @Output() validationStatusChanged = new EventEmitter<any>(); // eslint-disable-line @typescript-eslint/no-explicit-any\n @Output() antiCheatingConfigurationChanged = new EventEmitter<IAntiCheatingState | null>();\n @Output() fullscreenChanged = new EventEmitter<boolean>();\n @Output() themeChanged = new EventEmitter<ApplicationTheme>();\n @Output() codingFullscreenChanged = new EventEmitter<boolean>();\n @Output() navigationButtonStateChanged = new EventEmitter<INavigationButtonState | null>();\n @Output() configurationStateChanged = new EventEmitter<IConfigurationState | null>();\n @Output() submissionStateChanged = new EventEmitter<ISubmissionState | null>();\n @Output() loadingStateChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @HostBinding('class') hostClass = 'micro-question-code';\n\n private readonly subscription: Subscription = new Subscription();\n\n initCode = '';\n viewModes = ViewMode;\n mode: Modes = Modes.Running;\n companyColor = this.themeService.getCompanyColor();\n initCodesMap = new Map<CodeEditorLanguages, string>();\n languages = signal<LATLanguages>([]);\n codingLibTranslations = signal<{ [key: string]: string }>({});\n rawLanguages: ProgrammingLanguage[] = [];\n currentLanguage?: string;\n isSQL = false;\n isLAT = true;\n code = '';\n codingTestResults?: CodingTestsResultsModel;\n testResultsLoading = computed(() => this.codingTestService.isTestResultsLoading());\n exampleTestCases: ExampleTestCase[] = [];\n activeGuidedTourId$ = this.codingTestTourService.activeGuidedTourId$;\n firstTestRunComplete = false;\n canopyUiTheme: ApplicationTheme = 'light';\n\n private wasTourShown = false;\n\n ngOnDestroy(): void {\n if (!this.test?.is_preview_mode) {\n this.antiCheatingConfigurationChanged.emit({\n fullscreenTracking: false,\n mouseEventTracking: false,\n snapshotsTracking: false,\n });\n }\n\n this.subscription.unsubscribe();\n }\n\n ngOnInit() {\n this.setupState();\n this.handleGuidedTour();\n\n if (!this.test?.is_preview_mode) {\n this.antiCheatingConfigurationChanged.emit({\n fullscreenTracking: true,\n mouseEventTracking: true,\n snapshotsTracking: true,\n });\n\n this.setupAutosaveEvent();\n }\n\n const isNextQuestionDisabled = !this.test?.is_preview_mode;\n\n this.configurationStateChanged.emit({\n isSavingQuestionDisabled: isNextQuestionDisabled,\n });\n\n this.navigationButtonStateChanged.emit({\n disabled: isNextQuestionDisabled,\n });\n\n this.subscription.add(\n this.expirationObservable?.subscribe(() => {\n this.clearSavedCode();\n if (!this.test?.is_preview_mode) {\n this.clearLastLanguageSelected();\n this.submitCode();\n this.enableNextButton();\n }\n })\n );\n\n this.subscription.add(\n this.completeObservable?.subscribe(() => {\n if (!this.test?.is_preview_mode) {\n this.openSaveDialog();\n } else {\n this.clearSavedCode();\n }\n })\n );\n\n if (!this.isSQL) {\n this.loadAvailableLanguages();\n this.setTestCases();\n } else {\n this.setSqlTestCases();\n this.setSqlLang();\n this.setSqlInitCode();\n this.loadingStateChanged.emit(false);\n }\n this.setListeners();\n }\n\n openSaveDialog(): void {\n const dialogRef = this.dialogService.open(ConfirmDialogComponent, {\n applicationTheme: this.canopyUiTheme,\n size: 'small',\n panelClass: '',\n extraData: {\n title: translate('CODING_QUESTION.MODALS.FINISH_TEST.TITLE') ?? '',\n message: translate('CODING_QUESTION.MODALS.FINISH_TEST.MESSAGE') ?? '',\n confirmButtonText: translate('CODING_QUESTION.MODALS.FINISH_TEST.SUBMIT') ?? '',\n cancelButtonText: translate('CODING_QUESTION.MODALS.FINISH_TEST.CANCEL') ?? '',\n color: this.companyColor,\n },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (!result) {\n return;\n }\n\n this.clearSavedCode();\n this.clearLastLanguageSelected();\n this.submitCode();\n this.enableNextButton();\n });\n }\n\n private clearLastLanguageSelected(): void {\n this.libCodingTestService.clearLastLanguageSelected();\n }\n\n private clearSavedCode() {\n this.libCodingTestService.triggerClearSavedCode();\n }\n\n private submitCode() {\n if (this.code) {\n this.submissionStateChanged?.emit({\n text: this.code,\n language: this.getVersionedLanguage(),\n });\n }\n }\n\n private getVersionedLanguage(): string | undefined {\n const language = this.currentLanguage;\n\n if (!language) {\n return;\n }\n\n if (this.isSQL) {\n return ProgrammingLanguageVersioned.SQLite;\n }\n\n return `${language}-${this.libCodingTestService.getVersion()}`;\n }\n\n private enableNextButton(): void {\n this.configurationStateChanged.emit({\n isSavingQuestionDisabled: false,\n });\n }\n\n languageChange(selectedLangName: CodeEditorLanguages) {\n const selectedLang = this.rawLanguages.filter(\n language => language.name === selectedLangName\n )[0];\n this.codingTestService.handleLanguageChangeModal(\n this.question.id,\n selectedLang,\n this.canopyUiTheme,\n this.companyColor\n );\n }\n\n updateCode(code: string): void {\n this.code = code;\n }\n\n runTest(): void {\n this.codingTestService.runTest(\n this.question.id,\n this.code,\n this.isLAT,\n this.isSQL,\n false,\n !!this.test.is_preview_mode,\n this.question.question_id,\n this.test.id,\n this.test\n );\n\n if (!this.firstTestRunComplete) {\n this.navigationButtonStateChanged.emit({\n disabled: false,\n });\n\n this.firstTestRunComplete = true;\n }\n }\n\n screenshotPaste(event: PasteData): void {\n if (event.type !== 'paste') {\n return;\n }\n\n this.codingTestService\n .sendCopypasteEvent$(this.code, event.data, this.question.id)\n .pipe(take(1))\n .subscribe();\n }\n\n private setupAutosaveEvent(): void {\n this.subscription.add(\n interval(5000)\n .pipe(\n untilDestroyed(this),\n switchMap(() => this.codingTestService.sendAutosaveEvent$(this.code, this.question.id))\n )\n .subscribe()\n );\n }\n\n private setupState(): void {\n this.setApiParams();\n this.setCodingLibTranslations();\n this.setIsSQL();\n this.setIsLat();\n this.setMode();\n }\n\n private setCodingLibTranslations() {\n // TRANSLOCO_SCOPE is passed here to make sure that translation scope is resolved by the library\n this.translocoService\n .selectTranslateObject(`CODING_LIB`, {}, this.translationScope as string)\n .pipe(take(1))\n .subscribe(translations => {\n this.codingLibTranslations.set(translations);\n });\n }\n\n private setApiParams(): void {\n const invitationUuid = this.route.snapshot.firstChild?.url[0].path || '';\n const contentLanguage = this.assessment?.locale ?? 'en';\n const apiUrl = this.codingTestConfigService.getApiUrl();\n\n this.apiService.setParams(invitationUuid, contentLanguage, ROOT_TRANSLATIONS_SCOPE, apiUrl);\n }\n\n private setIsSQL(): void {\n this.isSQL = this.question?.context.code_language === 'sql';\n this.codingTestService.setIsSQLTest(this.isSQL);\n }\n\n private setSqlInitCode(): void {\n this.initCode = this.question?.context.initial_code;\n }\n\n private setSqlLang(): void {\n const sqlLanguage = this.question?.context.code_language as CodeEditorLanguages;\n this.languages.set([\n {\n label: 'nonLAT',\n value: sqlLanguage,\n },\n ]);\n this.currentLanguage = sqlLanguage;\n }\n\n private setIsLat(): void {\n // todo: add response field if possible ?\n // this.isLAT = this.test?.is_language_agnostic_test ?? false;\n this.isLAT = !this.isSQL;\n }\n\n private setMode(): void {\n this.mode = this.test?.is_preview_mode ? Modes.Preview : Modes.Running;\n }\n\n private listenGuidedTourStart(): void {\n this.libCodingTestService.startGuidedTour$.pipe(untilDestroyed(this)).subscribe(() => {\n const guidedTourMode = this.test?.is_preview_mode\n ? CodingTestTourMode.PracticeQuestion\n : CodingTestTourMode.RealQuestion;\n\n this.codingTestTourService.init(guidedTourMode);\n });\n }\n\n private handleGuidedTour() {\n if (!this.environmentService.isMobile && !this.wasTourShown && this.test?.is_preview_mode) {\n const delayForGuidedTour = 1500;\n setTimeout(() => {\n this.codingTestTourService.init(CodingTestTourMode.PracticeQuestion);\n this.wasTourShown = true;\n }, delayForGuidedTour);\n }\n }\n\n private getAllLanguages(): ProgrammingLanguage[] {\n const boilerplates = this.question?.context.boilerplates ?? [];\n return boilerplates.map(({ programming_language }) => programming_language);\n }\n\n private loadAvailableLanguages(): void {\n this.candidatureApiService\n .getAvailableLanguages$()\n .pipe(\n take(1),\n tap(availableLangsIds => {\n const languages = this.getAllLanguages();\n const areAllLangsAvailable = availableLangsIds.length === 0;\n\n this.rawLanguages = areAllLangsAvailable\n ? languages\n : languages.filter(({ id }) => id !== undefined && availableLangsIds.includes(id));\n this.languages.set(\n this.rawLanguages.map(language => ({\n label:\n typeof language.name === 'string' && language.name.length > 0\n ? language.name.charAt(0).toUpperCase() + language.name.slice(1)\n : 'Unknown',\n value: language.name as CodeEditorLanguages,\n version: language.version,\n }))\n );\n }),\n tap(() => {\n this.loadingStateChanged.emit(false);\n }),\n tap(() => {\n const boilerplates = this.question?.context.boilerplates ?? [];\n boilerplates.forEach(boilerplate => {\n if (boilerplate.programming_language.name) {\n this.initCodesMap.set(\n boilerplate.programming_language.name as CodeEditorLanguages,\n boilerplate.code\n );\n }\n });\n }),\n switchMap(() => this.libCodingTestService.currentLanguage$),\n tap((language: CodeEditorLanguages) => {\n const currentLang = this.rawLanguages.find(x => x.name === language);\n if (currentLang) {\n this.codingTestService.setCurrentLanguageLAT(currentLang);\n }\n const initCode = this.initCodesMap.get(language);\n if (initCode) {\n this.initCode = initCode;\n this.updateCode(this.initCode);\n }\n })\n )\n .subscribe(() => {\n this.libCodingTestService.setBoilerplateLoadingStatus(false);\n });\n }\n\n private listenThemeChange(): void {\n this.libCodingTestService.themeChanged$.pipe(untilDestroyed(this)).subscribe(theme => {\n this.canopyUiTheme = theme === Themes.Dark ? 'dark' : 'light';\n this.themeChanged.emit(this.canopyUiTheme);\n });\n }\n\n private listenFullscreenChange(): void {\n this.libCodingTestService.isFullscreen$\n .pipe(untilDestroyed(this))\n .subscribe(isFullscreen => this.fullscreenChanged.emit(isFullscreen));\n }\n\n private listenDeleteCustomTestCases(): void {\n this.codingTestService\n .listenDeleteCustomTestCases()\n .pipe(untilDestroyed(this))\n .subscribe(({ index }) => {\n this.codingTestService.handleDeleteTestCaseModal(\n index,\n this.canopyUiTheme,\n this.companyColor\n );\n });\n }\n\n private listenLanguageChange(): void {\n this.libCodingTestService.currentLanguage$\n .pipe(untilDestroyed(this))\n .subscribe((language: CodeEditorLanguages) => {\n this.currentLanguage = language;\n const code = this.initCodesMap.get(language);\n if (code) {\n this.initCode = code;\n } else {\n this.initCode = '';\n console.warn(`No initial code found for language: ${language}`);\n }\n });\n }\n\n private listenResetCode(): void {\n this.codingTestService\n .listenCodingTestChanges()\n .pipe(untilDestroyed(this))\n .subscribe(() => {\n this.codingTestService.handleResetCodeModal(this.canopyUiTheme, this.companyColor);\n });\n }\n\n private listenTestResults(): void {\n this.codingTestService.codingTestResults$.pipe(untilDestroyed(this)).subscribe(results => {\n this.codingTestResults = results;\n });\n }\n\n private setSqlTestCases(): void {\n const testCases = this.question?.context?.sql_testcases.map(testCase => ({\n ...testCase,\n post_sql: testCase.post_sql || '',\n initial_sql: this.question?.context?.initial_sql || '',\n })) as SqlTestCase[];\n this.codingTestService.setSqlTestCases(testCases);\n this.exampleTestCases = testCases.map(this.codingTestService.transformToExampleSQLTestCase);\n }\n\n private setTestCases(): void {\n this.exampleTestCases = this.question?.context?.testcases?.map(\n this.codingTestService.transformToExampleLATtestCase\n );\n }\n\n private setListeners(): void {\n this.listenGuidedTourStart();\n this.listenFullscreenChange();\n this.listenThemeChange();\n this.listenResetCode();\n this.codingTestService.trackConfigChanged(!!this.test?.is_preview_mode);\n this.listenTestResults();\n if (this.isLAT) {\n this.listenDeleteCustomTestCases();\n this.listenLanguageChange();\n }\n }\n}\n","<ng-container *transloco=\"let t; read: 'CODING_QUESTION'\">\n @if (languages()?.length && codingLibTranslations()) {\n <tgo-coding-test\n class=\"coding-lib\"\n [assessmentId]=\"assessment!.uuid!\"\n [questionId]=\"question!.question_id!\"\n [isLAT]=\"isLAT\"\n [canAddCustomTestCases]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [languages]=\"languages()\"\n [initCode]=\"initCode\"\n [mode]=\"mode\"\n [viewMode]=\"viewModes.Full\"\n [loading]=\"testResultsLoading()\"\n [companyColor]=\"companyColor\"\n [questionText]=\"question.text\"\n [testCasesStatus]=\"codingTestResults?.resume\"\n [runTestResponse]=\"codingTestResults?.listResponse!\"\n [exampleTestCases]=\"exampleTestCases\"\n [applicationTheme]=\"canopyUiTheme\"\n [translations]=\"codingLibTranslations()\"\n (codeChange)=\"updateCode($event)\"\n (runTestClick)=\"runTest()\"\n (languageChange)=\"languageChange($event)\"\n (pasteEvent)=\"screenshotPaste($event)\"\n >\n </tgo-coding-test>\n }\n</ng-container>\n\n<ngx-guided-tour\n [ngClass]=\"activeGuidedTourId$ | async\"\n [ngStyle]=\"{ '--company-color': companyColor }\"\n [class.dark]=\"canopyUiTheme === 'dark'\"\n></ngx-guided-tour>\n\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { TGO_CODING_TEST_CONFIG } from './tgo-coding-test.token';\nimport { TgoCodingTestConfig } from './tgo-coding-test.config';\n\n/**\n * Provides the TGO Coding Test library configuration.\n * \n * This function should be called in the consuming application's\n * app.config.ts (for standalone apps) or module providers.\n * \n * @param config - The configuration object containing required settings\n * @returns EnvironmentProviders that can be added to the application providers\n * \n * @example\n * ```typescript\n * import { provideTgoCodingTest } from '@testgorilla/tgo-coding-test';\n * import { environment } from './environments/environment';\n * \n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideTgoCodingTest({\n * coderunnerV2Endpoint: environment.coderunnerV2Endpoint,\n * }),\n * ],\n * };\n * ```\n */\nexport function provideTgoCodingTest(\n config: TgoCodingTestConfig\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: TGO_CODING_TEST_CONFIG,\n useValue: config,\n },\n ]);\n}\n\n","/*\n * Public API Surface of coding-test\n */\n\nexport { TgoCodingTestComponent } from './lib/components/tgo-coding-test/tgo-coding-test.component';\nexport { TgoCodingTestCandidateViewComponent } from './lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component';\n// Note: CodingTestModule is kept internal for now and not exposed in the public API\n// export * from './lib/components/coding-test.module';\nexport { Config as LibCodingConfig } from './lib/models/configs';\nexport {\n CustomTestCase,\n ExampleTestCase,\n TestCaseResult,\n TestCaseDeletionAction,\n TestCaseDeletionData,\n} from './lib/models/test-cases';\nexport { Themes } from './lib/models/theme';\nexport { ViewMode } from './lib/models/view-mode';\nexport { LATLanguage, LATLanguages } from './lib/models/lat-languages';\nexport { CodeEditorLanguages } from './lib/components/code-editor/helpers/code-editor-helper.model';\nexport { Modes } from './lib/models/mode';\nexport { LibCodingTestService, ResetCodeAction } from './lib/services/lib-coding-test.service';\nexport { StorageCodingService } from './lib/services/storage.service';\nexport { CodingTestConfigService } from './lib/services/coding-test-config.service';\n\n// Configuration exports\nexport {\n TgoCodingTestConfig,\n provideTgoCodingTest,\n} from './lib/config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.LibCodingTestService","i3.ConfigurationsService","i1.LibCodingTestService","i1","i2","i2.TestCasesService","i3.StorageCodingService","i4","i6","i3","take","tap","map","i1.CoderunnerApiService","ThemeService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testgorilla-tgo-coding-test.mjs","sources":["../../../../packages/tgo-coding-test/src/lib/models/lat-languages.ts","../../../../packages/tgo-coding-test/src/lib/models/view-mode.ts","../../../../packages/tgo-coding-test/src/lib/services/configurations.service.ts","../../../../packages/tgo-coding-test/src/lib/services/lib-coding-test.service.ts","../../../../packages/tgo-coding-test/src/lib/utils/time-to-ms.util.ts","../../../../packages/tgo-coding-test/src/lib/services/storage.service.ts","../../../../packages/tgo-coding-test/src/lib/services/test-cases.service.ts","../../../../packages/tgo-coding-test/src/lib/services/theme.service.ts","../../../../packages/tgo-coding-test/src/lib/utils/additional-languages/erlang.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/code-editor-helper.base.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/c-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/cpp-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/csharp-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/go-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/java-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/javascript-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/kotlin-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/php-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/python-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/r-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/ruby-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/scala-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/sql-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/swift-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/helpers/typescript-helper.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/code-editor.service.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/code-editor.component.ts","../../../../packages/tgo-coding-test/src/lib/components/code-editor/code-editor.component.html","../../../../packages/tgo-coding-test/src/lib/pipes/memoize-func.pipe.ts","../../../../packages/tgo-coding-test/src/lib/components/instructions/instructions.component.ts","../../../../packages/tgo-coding-test/src/lib/components/instructions/instructions.component.html","../../../../packages/tgo-coding-test/src/lib/utils/resize-element.ts","../../../../packages/tgo-coding-test/src/lib/components/coding-section/coding-section.component.ts","../../../../packages/tgo-coding-test/src/lib/components/coding-section/coding-section.component.html","../../../../packages/tgo-coding-test/src/lib/components/panel/panel.component.ts","../../../../packages/tgo-coding-test/src/lib/components/panel/panel.component.html","../../../../packages/tgo-coding-test/src/lib/components/configurations/configurations.component.ts","../../../../packages/tgo-coding-test/src/lib/components/configurations/configurations.component.html","../../../../packages/tgo-coding-test/src/lib/models/test-cases.ts","../../../../packages/tgo-coding-test/src/lib/components/tests/test-cases-status/test-cases-status.component.ts","../../../../packages/tgo-coding-test/src/lib/components/tests/test-cases-status/test-cases-status.component.html","../../../../packages/tgo-coding-test/src/lib/components/common/truncated-text/truncated-text.component.ts","../../../../packages/tgo-coding-test/src/lib/components/common/truncated-text/truncated-text.component.html","../../../../packages/tgo-coding-test/src/lib/components/tests/test-cases-content/test-cases-content.component.ts","../../../../packages/tgo-coding-test/src/lib/components/tests/test-cases-content/test-cases-content.component.html","../../../../packages/tgo-coding-test/src/lib/components/tests/test-cases/test-cases.component.ts","../../../../packages/tgo-coding-test/src/lib/components/tests/test-cases/test-cases.component.html","../../../../packages/tgo-coding-test/src/lib/components/tests/test-results.component.ts","../../../../packages/tgo-coding-test/src/lib/components/tests/test-results.component.html","../../../../packages/tgo-coding-test/src/lib/components/runnable-editor/runnable-editor.component.ts","../../../../packages/tgo-coding-test/src/lib/components/runnable-editor/runnable-editor.component.html","../../../../packages/tgo-coding-test/src/lib/components/coding-question/coding-question.component.ts","../../../../packages/tgo-coding-test/src/lib/components/coding-question/coding-question.component.html","../../../../packages/tgo-coding-test/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts","../../../../packages/tgo-coding-test/src/lib/components/tgo-coding-test/tgo-coding-test.component.html","../../../../packages/tgo-coding-test/src/lib/models/translations.ts","../../../../packages/tgo-coding-test/src/lib/models/coderunner-execution-results.ts","../../../../packages/tgo-coding-test/src/lib/config/tgo-coding-test.token.ts","../../../../packages/tgo-coding-test/src/lib/services/coding-test-config.service.ts","../../../../packages/tgo-coding-test/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts","../../../../packages/tgo-coding-test/src/lib/services/candidate-coding-test-services/coding-test.service.ts","../../../../packages/tgo-coding-test/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts","../../../../packages/tgo-coding-test/src/lib/services/candidate-coding-test-services/candidature-api.service.ts","../../../../packages/tgo-coding-test/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts","../../../../packages/tgo-coding-test/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html","../../../../packages/tgo-coding-test/src/lib/config/tgo-coding-test.provider.ts","../../../../packages/tgo-coding-test/src/index.ts","../../../../packages/tgo-coding-test/src/testgorilla-tgo-coding-test.ts"],"sourcesContent":["import { CodeEditorLanguages } from '../components/code-editor/helpers/code-editor-helper.model';\n\nexport type LATLanguage = {\n label: string;\n value: CodeEditorLanguages;\n version?: string;\n};\n\nexport type LATLanguages = LATLanguage[];\n\n// This is only used for LAT to enable auto saving for preview questions to let user see updated code whenever he switches back and forth between languages\nexport const AssessmentIdPreview = 'preview-id';\n","export enum ViewMode {\n Full = 'full',\n IDEOnly = 'ide',\n RunnableIde = 'runnable-ide',\n RunnableIdeWithLangSelector = 'runnable-ide-w-lang-selector',\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, distinctUntilChanged, map, Observable, Subject } from 'rxjs';\nimport { CodingAssistanceOptions, Config, FormattingOptions } from '../models/configs';\nimport { Themes } from '../models/theme';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfigurationsService {\n private defaultConfigs: Config = {\n [FormattingOptions.ColorTheme]: Themes.Default,\n [FormattingOptions.TabSize]: 4,\n [FormattingOptions.FontSize]: 14,\n [CodingAssistanceOptions.AutoComplete]: true,\n [CodingAssistanceOptions.ErrorHighlighting]: true,\n [CodingAssistanceOptions.AutoBrackets]: true,\n };\n\n private formattingOptions = {\n [FormattingOptions.ColorTheme]: [\n { label: 'Light', value: Themes.Default },\n { label: 'Dark', value: Themes.Dark },\n ],\n [FormattingOptions.TabSize]: [\n { label: '2', value: 2 },\n { label: '3', value: 3 },\n { label: '4 (default)', value: 4 },\n { label: '5', value: 5 },\n { label: '8', value: 8 },\n ],\n [FormattingOptions.FontSize]: [\n { label: '10px', value: 10 },\n { label: '12px', value: 12 },\n { label: '14px (default)', value: 14 },\n { label: '16px', value: 16 },\n { label: '18px', value: 18 },\n { label: '20px', value: 20 },\n ],\n };\n\n private codingAssistanceOptions = {\n [CodingAssistanceOptions.AutoComplete]: true,\n [CodingAssistanceOptions.ErrorHighlighting]: true,\n [CodingAssistanceOptions.AutoBrackets]: true,\n };\n\n private configSubj$ = new BehaviorSubject<Config>(this.defaultConfigs);\n config$: Observable<Config> = this.configSubj$.asObservable();\n\n private configFieldChangedSubj$ = new Subject<Partial<Config>>();\n configFieldChanged$ = this.configFieldChangedSubj$.asObservable();\n\n private currentConfig = { ...this.defaultConfigs };\n\n colorTheme$: Observable<Themes> = this.config$.pipe(\n map(config => config[FormattingOptions.ColorTheme] as Themes),\n distinctUntilChanged()\n );\n\n private codeComponentDestroyed = true;\n\n private configurationsPanelOpenSubj$ = new BehaviorSubject<boolean>(false);\n configurationsPanelOpen$ = this.configurationsPanelOpenSubj$.asObservable();\n\n setColorTheme(value: Themes): void {\n this.currentConfig[FormattingOptions.ColorTheme] = value;\n this.setConfig(this.currentConfig);\n }\n\n setConfig(config: Config) {\n this.configSubj$.next(config);\n this.currentConfig = config;\n }\n\n trackConfigChanged(changedField: Partial<Config>): void {\n this.configFieldChangedSubj$.next(changedField);\n }\n\n getInitialConfig(): Config {\n return { ...this.currentConfig };\n }\n\n openConfigPanel(): void {\n this.configurationsPanelOpenSubj$.next(true);\n }\n\n closeConfigPanel() {\n this.configurationsPanelOpenSubj$.next(false);\n }\n\n getFormattingOptions(): {\n [key: string]: {\n label: string;\n value: Themes | number;\n }[];\n } {\n return { ...this.formattingOptions };\n }\n\n getCodingAssistanceOptions(): { [key: string]: boolean } {\n return { ...this.codingAssistanceOptions };\n }\n\n getCodeComponentDestroyed(): boolean {\n return this.codeComponentDestroyed;\n }\n\n setCodeComponentDestroyed(value: boolean) {\n this.codeComponentDestroyed = value;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, map, merge, Observable, ReplaySubject, skip, Subject } from 'rxjs';\nimport { CodeEditorLanguages } from '../components/code-editor/helpers/code-editor-helper.model';\nimport { LanguageChangeAction } from '../models/language-change-action';\nimport { CustomTestCase, ExampleTestCase, TestCaseDeletionAction, TestCaseDeletionData } from '../models/test-cases';\nimport { Themes } from '../models/theme';\nimport { ConfigurationsService } from './configurations.service';\n\nexport const enum ResetCodeAction {\n Try = 'try',\n Confirm = 'confirm',\n}\n\ndeclare global {\n interface Window {\n monaco: any;\n hljs: any;\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LibCodingTestService {\n private readonly configurationsService = inject(ConfigurationsService);\n\n private codeResetSubj$ = new Subject<ResetCodeAction>();\n codeReset$: Observable<ResetCodeAction> = this.codeResetSubj$.asObservable();\n\n private codeChangeSubj$ = new Subject<string>();\n codeChange$: Observable<string> = this.codeChangeSubj$.asObservable();\n\n private isFullscreenSubj$ = new BehaviorSubject<boolean>(false);\n isFullscreen$: Observable<boolean> = this.isFullscreenSubj$.asObservable();\n\n private isBoilerplateLoadingSub$ = new BehaviorSubject<boolean>(true);\n isBoilerplateLoading$: Observable<boolean> = this.isBoilerplateLoadingSub$.asObservable();\n\n themeChanged$: Observable<Themes> = this.configurationsService.colorTheme$;\n\n private languageChangeSub$ = new Subject<LanguageChangeAction>();\n languageChange$: Observable<LanguageChangeAction> = this.languageChangeSub$.asObservable();\n\n private testCaseDeletionSub$ = new Subject<TestCaseDeletionData>();\n testCaseDeletion$: Observable<TestCaseDeletionData> = this.testCaseDeletionSub$.asObservable();\n\n private currentLanguageSub$ = new ReplaySubject<CodeEditorLanguages>(1);\n currentLanguage$: Observable<CodeEditorLanguages> = this.currentLanguageSub$.asObservable();\n\n private clearSavedCodeSub$ = new Subject<boolean>();\n clearSavedCode$ = this.clearSavedCodeSub$.asObservable();\n\n private clearLastLangSub$ = new Subject<boolean>();\n clearLastLang$ = this.clearLastLangSub$.asObservable();\n\n private startGuidedTourSubj$ = new Subject<void>();\n startGuidedTour$ = this.startGuidedTourSubj$.asObservable();\n\n private testCases: (ExampleTestCase | CustomTestCase)[];\n\n initCode: string;\n private version: string;\n\n configFieldChanged$ = merge(\n this.isFullscreen$.pipe(\n skip(1),\n map(isFullscreen => ({\n 'Full screen': isFullscreen,\n }))\n ),\n this.configurationsService.configFieldChanged$\n );\n\n setFullscreen(isEnabled: boolean): void {\n this.isFullscreenSubj$.next(isEnabled);\n }\n\n resetCode(): void {\n this.codeResetSubj$.next(ResetCodeAction.Try);\n }\n\n startGuidedTour(): void {\n this.startGuidedTourSubj$.next();\n }\n\n confirmReset(): void {\n this.codeResetSubj$.next(ResetCodeAction.Confirm);\n }\n\n changeCurrentCode(code: string): void {\n this.codeChangeSubj$.next(code);\n }\n\n cancelLanguageChange(): void {\n this.languageChangeSub$.next(LanguageChangeAction.Cancel);\n }\n\n confirmLanguageChange(): void {\n this.languageChangeSub$.next(LanguageChangeAction.Confirm);\n }\n\n handleTestCaseDeletion(index: number): void {\n this.testCaseDeletionSub$.next({ action: TestCaseDeletionAction.Try, index });\n }\n\n confirmTestCaseDeletion(index: number): void {\n this.testCaseDeletionSub$.next({ action: TestCaseDeletionAction.Confirm, index });\n }\n\n changeCurrentLanguage(value: CodeEditorLanguages): void {\n this.currentLanguageSub$.next(value);\n }\n\n updateTestCases(testCases: (ExampleTestCase | CustomTestCase)[]) {\n this.testCases = testCases;\n }\n\n getTestCases(): (ExampleTestCase | CustomTestCase)[] {\n return this.testCases;\n }\n\n getValidTestCases(): (ExampleTestCase | CustomTestCase)[] {\n return this.testCases.filter(({ input, expectedOutput }) => input && expectedOutput);\n }\n\n getTestCasesCount(): number {\n return this.testCases?.length || 0;\n }\n\n setVersion(version: string) {\n this.version = version;\n }\n\n getVersion(): string {\n return this.version;\n }\n\n setInitCode(code: string) {\n this.initCode = code;\n }\n\n getInitCode(): string {\n return this.initCode;\n }\n\n setBoilerplateLoadingStatus(value: boolean) {\n this.isBoilerplateLoadingSub$.next(value);\n }\n\n triggerClearSavedCode(): void {\n this.clearSavedCodeSub$.next(true);\n }\n\n clearLastLanguageSelected(): void {\n this.clearLastLangSub$.next(true);\n }\n}\n","export function timeToMs(time: number, type: 'days' | 'hours' = 'days'): number {\n switch (type) {\n case 'hours':\n return time * 60 * 60 * 1000;\n case 'days':\n return time * 24 * 60 * 60 * 1000;\n default:\n throw new Error('Invalid type. Use \"hours\" or \"days\".');\n }\n}\n","import { Injectable } from '@angular/core';\nimport { LocalStorageService } from 'ngx-webstorage';\nimport { filter, Subscription } from 'rxjs';\nimport { CodeEditorLanguages } from '../components/code-editor/helpers/code-editor-helper.model';\nimport { AutoSavedData, AutoSavedDataV1, AutoSavedDataV2, QuestionData, TestData } from '../models/auto-saved-data';\nimport { Config } from '../models/configs';\nimport { AssessmentIdPreview } from '../models/lat-languages';\nimport { Modes } from '../models/mode';\nimport { CustomTestCase, ExampleTestCase } from '../models/test-cases';\nimport { ConfigurationsService } from './configurations.service';\nimport { LibCodingTestService } from './lib-coding-test.service';\nimport { timeToMs } from '../utils/time-to-ms.util';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class StorageCodingService {\n private readonly CURRENT_STORAGE_VERSION = 2;\n private autoSavedData: AutoSavedData = {\n version: this.CURRENT_STORAGE_VERSION,\n config: {} as Config,\n isFullscreen: false,\n assessments: {},\n lastModified: Date.now(),\n };\n private readonly key = 'savedData';\n private assessmentId: string;\n private questionId: string;\n private language: CodeEditorLanguages;\n private codeSaveEnabled: boolean;\n private testCasesSaveEnabled: boolean;\n private isLAT: boolean;\n private currentMode: Modes;\n private isPreview: boolean;\n private codeChangeSubscription: Subscription;\n private configSubscription: Subscription;\n private isFullscreenSubscription: Subscription;\n private currentLanguageSubscription: Subscription;\n private isCodeComponentAlive = filter(() => !this.configurationsService.getCodeComponentDestroyed());\n\n // Maximum age of entire storage data in days\n private readonly MAX_STORAGE_AGE_DAYS = 7;\n // Maximum age for assessment inner data in days\n private readonly MAX_QUESTION_DATA_AGE_DAYS = 1;\n // Maximum number of assessments to keep\n private readonly MAX_ASSESSMENTS = 10;\n // The default question ID used for migrated v1 data\n private readonly DEFAULT_MIGRATION_QUESTION_ID = 'default-question';\n\n // todo: remove\n // storage = {\n // retrieve: (key: string) => {\n // return {} as any;\n // },\n // store: (key: string, value: any) => {\n // return {} as any;\n // },\n // clear: (key: string) => {\n // return {} as any;\n // },\n // };\n\n constructor(\n // todo\n private storage: LocalStorageService,\n private libCodingTestService: LibCodingTestService,\n private configurationsService: ConfigurationsService\n ) {\n // Perform safety check on localStorage data\n this.performStorageSafetyCheck();\n }\n\n /**\n * Performs a safety check on localStorage data.\n * This is called at service initialization to ensure data integrity.\n */\n private performStorageSafetyCheck(): void {\n try {\n const savedData = this.storage.retrieve(this.key);\n\n // If no data, nothing to check\n if (!savedData) {\n return;\n }\n\n // Check storage format and migrate if needed\n if (!('version' in savedData)) {\n // It's v1 format, so we'll migrate it when it's actually needed\n // No need to do anything right now\n } else {\n // It's v2 format, so we can perform cleanup right away\n this.autoSavedData = savedData as AutoSavedData;\n }\n } catch (error) {\n // If any error occurs during safety check, reset storage to avoid issues\n console.error('Error during storage safety check, resetting storage:', error);\n this.autoSavedData = {\n version: this.CURRENT_STORAGE_VERSION,\n config: {} as Config,\n isFullscreen: false,\n assessments: {},\n lastModified: Date.now(),\n };\n this.storeData();\n }\n }\n\n initializeSaving(): void {\n if (!this.codeChangeSubscription) {\n this.codeChangeSubscription = this.libCodingTestService.codeChange$\n .pipe(this.isCodeComponentAlive)\n .subscribe((code: string) => {\n if (this.codeSaveEnabled && this.assessmentId && this.questionId) {\n this.ensureDataStructure();\n const questionData = this.autoSavedData.assessments[this.assessmentId][this.questionId];\n const targetTestData = this.isPreview ? questionData.preview : questionData.actual;\n targetTestData.code[this.language] = code!;\n this.updateLastModified(targetTestData);\n this.storeData();\n }\n });\n }\n\n if (!this.configSubscription) {\n this.configSubscription = this.configurationsService.config$\n .pipe(this.isCodeComponentAlive)\n .subscribe((config: Config) => {\n this.autoSavedData.config = { ...config };\n this.updateLastModified(this.autoSavedData);\n this.storeData();\n });\n }\n\n if (!this.isFullscreenSubscription) {\n this.isFullscreenSubscription = this.libCodingTestService.isFullscreen$\n .pipe(this.isCodeComponentAlive)\n .subscribe((isFullscreen: boolean) => {\n this.autoSavedData.isFullscreen = isFullscreen;\n this.updateLastModified(this.autoSavedData);\n this.storeData();\n });\n }\n\n if (!this.currentLanguageSubscription && this.isLAT) {\n this.currentLanguageSubscription = this.libCodingTestService.currentLanguage$\n .pipe(this.isCodeComponentAlive)\n .subscribe((language: CodeEditorLanguages) => {\n this.autoSavedData.lastLanguageLAT = {\n value: language,\n version: this.libCodingTestService.getVersion(),\n };\n this.updateLastModified(this.autoSavedData);\n this.storeData();\n });\n }\n }\n\n setupAutoSavedData(\n language: CodeEditorLanguages,\n assessmentId: string,\n questionId: string,\n codeSaveEnabled: boolean,\n testCasesSaveEnabled: boolean,\n isLAT: boolean,\n mode: Modes\n ) {\n this.language = language;\n this.assessmentId = assessmentId;\n this.questionId = questionId;\n this.codeSaveEnabled = codeSaveEnabled;\n this.testCasesSaveEnabled = testCasesSaveEnabled;\n this.isLAT = isLAT;\n this.currentMode = mode;\n this.isPreview = mode === Modes.Preview || mode === Modes.NonAssessmentPreview;\n\n // Get saved data\n const savedData = this.storage.retrieve(this.key);\n\n // Handle migration if needed\n if (savedData) {\n // Check if it's v1 schema (no version field)\n if (!('version' in savedData)) {\n this.migrateFromV1ToV2(savedData as AutoSavedDataV1);\n } else {\n this.autoSavedData = savedData as AutoSavedData;\n }\n\n // Apply loaded config and fullscreen setting\n this.configurationsService.setConfig(this.autoSavedData.config);\n this.libCodingTestService.setFullscreen(this.autoSavedData.isFullscreen);\n }\n }\n\n private migrateFromV1ToV2(v1Data: AutoSavedDataV1): void {\n // Create a new v2 data structure\n const v2Data: AutoSavedDataV2 = {\n version: this.CURRENT_STORAGE_VERSION,\n config: v1Data.config,\n isFullscreen: v1Data.isFullscreen,\n lastLanguageLAT: v1Data.lastLanguageLAT,\n assessments: {},\n lastModified: Date.now(),\n };\n\n // Migrate assessment data\n // In v1, assessments were directly mapped to TestData\n // In v2, we need to organize by questionId\n for (const [assessmentId, testData] of Object.entries(v1Data.assessments)) {\n if (assessmentId === AssessmentIdPreview) {\n continue;\n }\n\n // We use a consistent default questionId for migration to ensure backward compatibility\n const defaultQuestionId = this.DEFAULT_MIGRATION_QUESTION_ID;\n\n // Initialize the assessment entry if it doesn't exist\n if (!v2Data.assessments[assessmentId]) {\n v2Data.assessments[assessmentId] = {};\n }\n\n // Create question data with the migrated test data\n const questionData: QuestionData = {};\n\n questionData.actual = {\n ...testData,\n lastModified: Date.now(),\n };\n\n // Set last modified time for the question data\n questionData.lastModified = Date.now();\n\n // Add to the v2 structure\n v2Data.assessments[assessmentId][defaultQuestionId] = questionData;\n }\n\n // Update our instance with migrated data\n this.autoSavedData = { ...v2Data };\n\n // Save the migrated data\n this.storeData();\n }\n\n private ensureDataStructure(): void {\n // Make sure assessment exists\n if (!this.autoSavedData.assessments[this.assessmentId]) {\n this.autoSavedData.assessments[this.assessmentId] = {};\n }\n\n // Make sure question exists\n if (!this.autoSavedData.assessments[this.assessmentId][this.questionId]) {\n this.autoSavedData.assessments[this.assessmentId][this.questionId] = {\n lastModified: Date.now(),\n };\n }\n\n const questionData = this.autoSavedData.assessments[this.assessmentId][this.questionId];\n\n // Ensure preview or actual exists based on current mode\n if (this.isPreview && !questionData.preview) {\n questionData.preview = {\n code: {},\n testCasesLAT: [],\n lastModified: Date.now(),\n };\n } else if (!this.isPreview && !questionData.actual) {\n questionData.actual = {\n code: {},\n testCasesLAT: [],\n lastModified: Date.now(),\n };\n }\n }\n\n private updateLastModified(data: TestData | QuestionData | AutoSavedData): void {\n const now = Date.now();\n data.lastModified = now;\n\n // If updating a TestData, also update its parent QuestionData\n if ('code' in data && this.assessmentId && this.questionId) {\n this.autoSavedData.assessments[this.assessmentId][this.questionId].lastModified = now;\n }\n\n // Always update root timestamp regardless of the object being modified\n this.autoSavedData.lastModified = now;\n }\n\n /**\n * Cleanup with a temporary age threshold\n * @param maxAgeDays Maximum age in days for data to be considered valid\n */\n private cleanupWithReducedThreshold(maxAgeDays: number): void {\n // Call the unified cleanup method with more aggressive parameters\n this.cleanupStorageData({\n storageAgeMultiplier: 2, // More aggressive multiplier\n customStorageAgeDays: maxAgeDays, // Use the provided custom age\n minQuestionDataAgeDays: 0.5, // 12 hours minimum\n assessmentLimitMultiplier: 0.5, // Half the normal assessment limit\n });\n }\n\n /**\n * Unified method to clean up localStorage data with configurable intensity\n * @param options Cleanup options to control the aggressiveness of the cleanup\n */\n private cleanupStorageData(options: {\n storageAgeMultiplier?: number; // Multiplier for storage age threshold (default: 1)\n customStorageAgeDays?: number; // Custom storage age in days (overrides MAX_STORAGE_AGE_DAYS if provided)\n useStandardQuestionDataAge?: boolean; // Whether to use standard question data age (default: false)\n minQuestionDataAgeDays?: number; // Minimum age for question data in days (default: 0.5 - 12 hours)\n assessmentLimitMultiplier?: number; // Multiplier for maximum assessments (default: 1)\n }): void {\n const now = Date.now();\n\n // Determine the storage age threshold\n const storageAgeDays = options.customStorageAgeDays ?? this.MAX_STORAGE_AGE_DAYS;\n const storageAgeThreshold = timeToMs(storageAgeDays); // Convert days to milliseconds\n const multiplier = options.storageAgeMultiplier ?? 1;\n\n // Check if the entire storage is too old and needs cleanup\n if (this.autoSavedData.lastModified && now - this.autoSavedData.lastModified > storageAgeThreshold * multiplier) {\n // If the entire storage is very old, just reset everything\n this.autoSavedData = {\n version: this.CURRENT_STORAGE_VERSION,\n config: this.autoSavedData.config, // Keep the config settings\n isFullscreen: this.autoSavedData.isFullscreen, // Keep fullscreen setting\n assessments: {},\n lastModified: now,\n };\n this.storeData();\n return;\n }\n\n // Structure for collecting assessment data with metadata\n interface AssessmentMetadata {\n id: string;\n lastModified: number;\n }\n\n const assessmentMetadata: AssessmentMetadata[] = [];\n\n // Determine the question data age threshold\n let questionDataAgeThreshold: number;\n if (options.useStandardQuestionDataAge) {\n // Use the standard threshold for normal cleanup\n questionDataAgeThreshold = timeToMs(this.MAX_QUESTION_DATA_AGE_DAYS);\n } else {\n // For maintenance/aggressive cleanup, use a custom threshold\n const minAgeHours = (options.minQuestionDataAgeDays ?? 0.5) * 24; // Convert days to hours\n questionDataAgeThreshold = Math.max(\n timeToMs(this.MAX_QUESTION_DATA_AGE_DAYS), // Standard age in milliseconds\n timeToMs(minAgeHours, 'hours') // Minimum age in milliseconds\n );\n }\n\n // Collect assessments with their latest modification times\n for (const [assessmentId, questions] of Object.entries(this.autoSavedData.assessments)) {\n let assessmentLastModified = 0;\n\n // Check all questions in this assessment\n let hasValidQuestions = false;\n\n for (const [questionId, questionData] of Object.entries(questions)) {\n // Skip if undefined\n if (!questionData) {\n continue;\n }\n\n // Get the latest modification time from preview and actual\n const previewTime = questionData.preview?.lastModified || 0;\n const actualTime = questionData.actual?.lastModified || 0;\n const questionLastModified = Math.max(previewTime, actualTime, questionData.lastModified || 0);\n\n // Check if data is too old - using configured threshold\n const isPreviewTooOld = previewTime > 0 && now - previewTime > questionDataAgeThreshold;\n const isActualTooOld = actualTime > 0 && now - actualTime > questionDataAgeThreshold;\n\n // Clean up old data within the question\n if (isPreviewTooOld && questionData.preview) {\n delete questionData.preview;\n }\n\n if (isActualTooOld && questionData.actual) {\n delete questionData.actual;\n }\n\n // If neither preview nor actual exists, remove the question\n if (!questionData.preview && !questionData.actual) {\n delete questions[questionId];\n } else {\n hasValidQuestions = true;\n assessmentLastModified = Math.max(assessmentLastModified, questionLastModified);\n }\n }\n\n // If no valid questions, remove the assessment\n if (!hasValidQuestions) {\n delete this.autoSavedData.assessments[assessmentId];\n } else {\n // Add to our list for potential size-based cleanup\n assessmentMetadata.push({\n id: assessmentId,\n lastModified: assessmentLastModified,\n });\n }\n }\n\n // Determine the assessment limit based on the multiplier\n const limitMultiplier = options.assessmentLimitMultiplier ?? 1;\n const assessmentLimit = Math.ceil(this.MAX_ASSESSMENTS * limitMultiplier);\n\n // If we have too many assessments, remove the oldest ones\n if (assessmentMetadata.length > assessmentLimit) {\n // Sort by lastModified (most recent first)\n assessmentMetadata.sort((a, b) => b.lastModified - a.lastModified);\n\n // Remove oldest assessments that exceed our limit\n for (let i = assessmentLimit; i < assessmentMetadata.length; i++) {\n delete this.autoSavedData.assessments[assessmentMetadata[i].id];\n }\n }\n\n // Save the cleaned data\n this.storeData();\n }\n\n changeLanguage(language: CodeEditorLanguages) {\n this.language = language;\n }\n\n /**\n * Gets data from v1 schema format\n * Used for backward compatibility when retrieving data\n */\n private getDataFromV1Schema(retrievedData: AutoSavedDataV1): string | (ExampleTestCase | CustomTestCase)[] | null | undefined {\n // For v1, we need to handle the case where we don't have questionId\n // We're now using questionId in the app, but stored data might still be in v1 format\n\n // For preview data, the assessment ID would be AssessmentIdPreview\n if (this.assessmentId === AssessmentIdPreview) {\n if (this.isPreview) {\n // For preview mode on preview assessment, get the code directly\n const code = retrievedData.assessments[this.assessmentId]?.code;\n if (code && this.language in code) {\n return code[this.language];\n }\n }\n // We don't expect actual/non-preview data for AssessmentIdPreview\n return null;\n } else {\n // For regular assessments, v1 only had code in the \"actual\" section\n if (!this.isPreview) {\n const code = retrievedData.assessments[this.assessmentId]?.code;\n if (code && this.language in code) {\n return code[this.language];\n }\n }\n // We don't have preview data for regular assessments in v1\n return null;\n }\n }\n\n getSavedCode(): string | null | undefined {\n const retrievedData = this.retrieveData();\n if (!retrievedData) {\n return null;\n }\n\n // Check if using v2 schema\n if ('version' in retrievedData) {\n // Handle v2 schema\n const v2Data = retrievedData;\n const assessmentData = v2Data.assessments[this.assessmentId];\n\n if (!assessmentData) {\n return null;\n }\n\n // First try with provided questionId\n if (this.questionId && assessmentData[this.questionId]) {\n const questionData = assessmentData[this.questionId];\n const testData = this.isPreview ? questionData.preview : questionData.actual;\n if (testData?.code && this.language in testData.code) {\n return testData.code[this.language];\n }\n }\n\n if (\n this.questionId !== this.DEFAULT_MIGRATION_QUESTION_ID &&\n assessmentData[this.DEFAULT_MIGRATION_QUESTION_ID]\n ) {\n const questionData = assessmentData[this.DEFAULT_MIGRATION_QUESTION_ID];\n const testData = this.isPreview ? questionData.preview : questionData.actual;\n if (testData?.code && this.language in testData.code) {\n return testData.code[this.language];\n }\n }\n\n return null;\n } else {\n // Handle v1 schema for backward compatibility\n return this.getDataFromV1Schema(retrievedData) as string;\n }\n }\n\n getLastLanguageLAT(): {\n value: CodeEditorLanguages;\n version: string;\n } | null {\n const retrievedData = this.retrieveData();\n if (!retrievedData) {\n return null;\n }\n\n return retrievedData.lastLanguageLAT || null;\n }\n\n getSavedTestCases(): (ExampleTestCase | CustomTestCase)[] | null | undefined {\n const retrievedData = this.retrieveData();\n if (!retrievedData) {\n return null;\n }\n\n // Check if using v2 schema\n if ('version' in retrievedData) {\n // Handle v2 schema\n const v2Data = retrievedData;\n const assessmentData = v2Data.assessments[this.assessmentId];\n\n if (!assessmentData) {\n return null;\n }\n\n // First try with provided questionId\n if (this.questionId && assessmentData[this.questionId]) {\n const questionData = assessmentData[this.questionId];\n const testData = this.isPreview ? questionData.preview : questionData.actual;\n if (testData?.testCasesLAT) {\n return testData.testCasesLAT;\n }\n }\n\n // If not found and questionId != DEFAULT_MIGRATION_QUESTION_ID,\n // also try with the default migration ID as a fallback\n if (\n this.questionId !== this.DEFAULT_MIGRATION_QUESTION_ID &&\n assessmentData[this.DEFAULT_MIGRATION_QUESTION_ID]\n ) {\n const questionData = assessmentData[this.DEFAULT_MIGRATION_QUESTION_ID];\n const testData = this.isPreview ? questionData.preview : questionData.actual;\n if (testData?.testCasesLAT) {\n return testData.testCasesLAT;\n }\n }\n\n return null;\n } else {\n // Handle v1 schema test cases (test cases were only in the actual mode)\n const v1Data = retrievedData;\n if (!this.isPreview && v1Data.assessments[this.assessmentId]?.testCasesLAT) {\n return v1Data.assessments[this.assessmentId].testCasesLAT;\n }\n return null;\n }\n }\n\n getSavedConfig(): Config | null {\n const retrievedData = this.retrieveData();\n return retrievedData?.config ? { ...retrievedData.config } : null;\n }\n\n getSavedFullScreenMode(): boolean | null {\n const retrievedData = this.retrieveData();\n return retrievedData?.isFullscreen !== undefined ? retrievedData.isFullscreen : null;\n }\n\n clearSavedCode(): void {\n this.ensureDataStructure();\n const questionData = this.autoSavedData.assessments[this.assessmentId][this.questionId];\n const targetTestData = this.isPreview ? [questionData.preview] : [questionData.preview, questionData.actual];\n\n let hasChanged = false;\n targetTestData.forEach(testData => {\n if (testData) {\n testData.code = {};\n this.updateLastModified(testData);\n hasChanged = true;\n }\n });\n if (hasChanged) {\n this.storeData();\n }\n }\n\n clearLastLang(): void {\n this.autoSavedData.lastLanguageLAT = null;\n this.updateLastModified(this.autoSavedData);\n this.storeData();\n }\n\n clearSavedTestCases(): void {\n this.ensureDataStructure();\n const questionData = this.autoSavedData.assessments[this.assessmentId][this.questionId];\n const targetTestData = this.isPreview ? questionData.preview : questionData.actual;\n\n if (targetTestData) {\n const hasNoCode = !Object.keys(targetTestData.code ?? {}).length;\n\n if (this.isPreview) {\n targetTestData.testCasesLAT = [];\n this.updateLastModified(targetTestData);\n } else if (hasNoCode) {\n const allQuestions = this.autoSavedData.assessments[this.assessmentId];\n delete allQuestions[this.questionId];\n this.autoSavedData.assessments[this.assessmentId] = { ...allQuestions };\n this.updateLastModified(this.autoSavedData);\n }\n this.storeData();\n }\n }\n\n updateVersion(version: string): void {\n if (this.autoSavedData.lastLanguageLAT) {\n this.autoSavedData.lastLanguageLAT.version = version;\n this.updateLastModified(this.autoSavedData);\n this.storeData();\n }\n }\n\n updateTestCases(testCases: (ExampleTestCase | CustomTestCase)[]) {\n if (this.assessmentId && this.questionId && this.testCasesSaveEnabled) {\n this.ensureDataStructure();\n const questionData = this.autoSavedData.assessments[this.assessmentId][this.questionId];\n const targetTestData = this.isPreview ? questionData.preview : questionData.actual;\n\n if (targetTestData) {\n targetTestData.testCasesLAT = testCases;\n this.updateLastModified(targetTestData);\n this.storeData();\n }\n }\n }\n\n private storeData(): void {\n this.storage.store(this.key, this.autoSavedData);\n }\n\n private retrieveData(): AutoSavedData | AutoSavedDataV1 {\n return this.storage.retrieve(this.key) as AutoSavedData | AutoSavedDataV1;\n }\n\n /**\n * Manually triggers data cleanup and migration.\n * Useful for handling large localStorage or migration when needed.\n * This can be called from application startup or after major events.\n */\n performMaintenanceAndCleanup(): void {\n // Get current data\n const savedData = this.storage.retrieve(this.key);\n\n // If no data, nothing to do\n if (!savedData) {\n return;\n }\n\n // Check if migration needed\n if (!('version' in savedData)) {\n this.migrateFromV1ToV2(savedData as AutoSavedDataV1);\n } else {\n // Already migrated, just perform cleanup\n this.autoSavedData = savedData as AutoSavedData;\n\n // Perform a more aggressive cleanup for manual maintenance\n // by temporarily modifying the cleanup thresholds\n const originalMaxAge = this.MAX_STORAGE_AGE_DAYS;\n const halfAge = Math.floor(originalMaxAge / 2); // Cut threshold in half\n\n // Create a custom cleanup function with reduced threshold\n this.cleanupWithReducedThreshold(halfAge);\n }\n\n // Verify localStorage size is manageable\n try {\n const serializedData = JSON.stringify(this.autoSavedData);\n const sizeInKB = Math.round(serializedData.length / 1024);\n\n // If data is too large (over 2MB), perform more aggressive cleanup\n if (sizeInKB > 2048) {\n console.warn(`Local storage data is large (${sizeInKB}KB), performing deep cleanup`);\n\n // Use extremely aggressive cleanup settings\n this.cleanupStorageData({\n storageAgeMultiplier: 0.5, // Even more aggressive - half the normal age\n minQuestionDataAgeDays: 0.25, // 6 hours minimum\n assessmentLimitMultiplier: 0.2, // Keep only 20% of assessments\n });\n\n // If still too large, keep only a few most recent assessments\n const newSerializedData = JSON.stringify(this.autoSavedData);\n const newSizeInKB = Math.round(newSerializedData.length / 1024);\n\n if (newSizeInKB > 1024) {\n // Keep only recent assessments\n const assessments = this.autoSavedData.assessments;\n // Find the newest timestamp in each assessment\n const getNewestTimestamp = (obj: Record<string, QuestionData>) =>\n Object.values(obj).reduce((max, questionData) => Math.max(max, questionData?.lastModified || 0), 0);\n const entries = Object.entries(assessments).sort(\n ([, a], [, b]) =>\n getNewestTimestamp(b as Record<string, QuestionData>) -\n getNewestTimestamp(a as Record<string, QuestionData>)\n );\n\n // Keep only the 5 most recent assessments\n const keepCount = Math.min(5, entries.length);\n this.autoSavedData.assessments = {};\n\n for (let i = 0; i < keepCount; i++) {\n const [id, data] = entries[i];\n this.autoSavedData.assessments[id] = data as Record<string, QuestionData>;\n }\n\n this.storeData();\n }\n }\n } catch (error) {\n console.error('Error checking localStorage size', error);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TestCasesService {\n private lastTestCaseLocalId = 0;\n\n private activeTestCaseIndexSubj$ = new BehaviorSubject<number | null>(0);\n activeTestCaseIndex$ = this.activeTestCaseIndexSubj$.asObservable();\n\n setActiveTestCase(index: number | null): void {\n this.activeTestCaseIndexSubj$.next(index);\n }\n\n createTestCaseLocalId(): number {\n this.lastTestCaseLocalId += 1;\n return this.lastTestCaseLocalId;\n }\n\n updateTestCaseLocalId(value: number): void {\n this.lastTestCaseLocalId = value;\n }\n\n resetLastTestCaseLocalId(): void {\n this.lastTestCaseLocalId = 0;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { LibCodingTestService } from './lib-coding-test.service';\nimport { Themes } from '../models/theme';\nimport { BehaviorSubject, combineLatest, map } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n private defaultCompanyColor = '#46a997';\n private companyColorSubject = new BehaviorSubject<string>(this.defaultCompanyColor);\n private themeSubject = new BehaviorSubject<Themes>(Themes.Default);\n\n themeColors$ = combineLatest([this.themeSubject, this.companyColorSubject]).pipe(\n map(([theme, companyColor]) => {\n const themeSpecificColor = this.getAdjustedColorForTheme(theme, companyColor);\n return { companyColor, themeSpecificColor };\n })\n );\n\n constructor(private libCodingService: LibCodingTestService) {\n this.libCodingService.themeChanged$.subscribe(theme => {\n this.themeSubject.next(theme);\n });\n }\n\n set companyColor(color: string) {\n this.companyColorSubject.next(color);\n }\n\n private getAdjustedColorForTheme(theme: Themes, color: string): string {\n return theme === Themes.Dark && color.toUpperCase() === '#D410AA' ? '#FFFFFF' : color;\n }\n}\n","export const erlangLanguage = {\n // Define default token\n defaultToken: '',\n\n // Define keywords\n keywords: [\n 'after',\n 'and',\n 'andalso',\n 'band',\n 'begin',\n 'bnot',\n 'bor',\n 'bsl',\n 'bsr',\n 'bxor',\n 'case',\n 'catch',\n 'cond',\n 'div',\n 'end',\n 'fun',\n 'if',\n 'let',\n 'not',\n 'of',\n 'or',\n 'orelse',\n 'query',\n 'receive',\n 'rem',\n 'try',\n 'when',\n 'xor',\n 'define',\n 'elif',\n 'else',\n 'endif',\n 'error',\n 'ifdef',\n 'ifndef',\n 'include',\n 'include_lib',\n 'undef',\n ],\n\n // Define type and function patterns\n typeKeywords: [\n 'atom',\n 'binary',\n 'bitstring',\n 'boolean',\n 'byte',\n 'char',\n 'float',\n 'integer',\n 'list',\n 'number',\n 'pid',\n 'port',\n 'reference',\n 'term',\n 'tuple',\n ],\n\n // Define operators\n operators: ['+', '-', '*', '/', '>', '<', '=', '==', '/=', '=:=', '=/=', '=<', '=>', '&&', '||', '!'],\n\n // Define symbols and delimiters\n symbols: /[=><!~?:&|+\\-*/^%]+/,\n\n // The main tokenizer for Erlang\n tokenizer: {\n root: [\n // Identifiers and keywords\n [/[a-z][\\w$]*/, { cases: { '@keywords': 'keyword', '@default': 'identifier' } }],\n [/[A-Z][\\w$]*/, 'type.identifier'], // to handle the type and module names\n\n // Whitespace\n { include: '@whitespace' },\n\n // Delimiters and operators\n [/[{}()[\\]\\\\]]/, '@brackets'],\n [/@symbols/, { cases: { '@operators': 'operator', '@default': '' } }],\n\n // Numbers\n [/\\d+\\.\\d*([eE][-+]?\\d+)?/, 'number.float'],\n [/\\d+/, 'number'],\n\n // Strings\n [/\"/, { token: 'string', bracket: '@open', next: '@string' }],\n\n // Atoms\n [/'([^'\\\\]|\\\\.)*$/, 'string.invalid'], // non-terminated atom\n [/'/, { token: 'string', bracket: '@open', next: '@atom' }],\n ],\n\n string: [\n [/[^\\\\\"]+/, 'string'],\n [/\\\\./, 'string.escape'],\n [/\"/, { token: 'string', bracket: '@close', next: '@pop' }],\n ],\n\n atom: [\n [/[^\\\\']+/, 'string'],\n [/\\\\./, 'string.escape'],\n [/'/, { token: 'string', bracket: '@close', next: '@pop' }],\n ],\n\n whitespace: [\n [/[ \\t\\r\\n]+/, 'white'],\n [/%.*$/, 'comment'], // Single line comment\n ],\n },\n};\n","import { CodeEditorLanguages, CodeEditorTypesMap } from './code-editor-helper.model';\n\nexport abstract class CodeEditorHelperBase {\n protected language: CodeEditorLanguages;\n protected typesMap: CodeEditorTypesMap;\n\n abstract getFunctionOpening(): string;\n\n getEditorLang(): CodeEditorLanguages {\n return this.language;\n }\n\n protected parseType(type: keyof CodeEditorTypesMap): string {\n return this.typesMap[type];\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorCHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.C;\n typesMap: CodeEditorTypesMap = {\n boolean: 'bool',\n int: 'int',\n number: 'int',\n double: 'double',\n float: 'float',\n str: 'char *',\n array_boolean: 'bool *',\n array_int: 'int *',\n array_float: 'float *',\n array_double: 'double *',\n };\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `${showingReturnType} ${funcName}(${params}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${this.parseType(values.type)} ${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorCppHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.CppEditor;\n typesMap: CodeEditorTypesMap = {\n boolean: 'bool',\n int: 'int',\n number: 'int',\n double: 'double',\n float: 'float',\n str: 'std::string',\n array_boolean: 'std::vector<bool>',\n array_int: 'std::vector<int>',\n array_float: 'std::vector<float>',\n array_double: 'std::vector<double>',\n array_str: 'std::vector<std::string>',\n };\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `${showingReturnType} ${funcName}(${params}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${this.parseType(values.type)} ${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorCSharpHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.CSharpEditor;\n typesMap: CodeEditorTypesMap = {\n boolean: 'bool',\n int: 'int',\n number: 'int',\n double: 'double',\n float: 'float',\n str: 'string',\n array_boolean: 'bool[]',\n array_int: 'int[]',\n array_float: 'Float[]',\n array_double: 'double[]',\n array_str: 'string[]',\n };\n\n private importText =\n 'using System;\\nusing System.Linq;\\nnamespace TestTaker\\n{\\n\\tpublic static class CustomCode\\n\\t{\\n';\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.importText}${this.getFunctionOpening()}\\t\\t //Insert your code here \\n\\t\\t}\\n\\t}\\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `\\t\\tpublic static ${showingReturnType} ${funcName}(${params}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${this.parseType(values.type)} ${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorGoHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Go;\n typesMap: CodeEditorTypesMap = {\n boolean: 'bool',\n int: 'int',\n number: 'int',\n double: 'double',\n float: 'float64',\n str: 'string',\n array_boolean: '[]bool',\n array_int: '[]int',\n array_float: '[]float64',\n array_str: '[]string',\n };\n\n private importPackagesText = 'package testtaker\\nimport ()\\n';\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.importPackagesText}${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n const uppercasedFuncName = `${funcName.charAt(0).toUpperCase()}${funcName.slice(1)}`;\n\n return `func ${uppercasedFuncName}(${params}) ${showingReturnType} {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name} ${this.parseType(values.type)}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorJavaHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Java;\n typesMap: CodeEditorTypesMap = {\n boolean: 'Boolean',\n int: 'Integer',\n number: 'Integer',\n double: 'Double',\n float: 'Float',\n str: 'String',\n array_boolean: 'Boolean[]',\n array_int: 'Integer[]',\n array_float: 'Float[]',\n array_double: 'Double[]',\n array_str: 'String[]',\n };\n\n private classOpening = 'public class TestTaker {\\n';\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.classOpening}${this.getFunctionOpening()}\\t\\t //Insert your code here \\n\\t}\\n`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `\\tpublic static ${showingReturnType} ${funcName}(${params}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${this.parseType(values.type)} ${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport { CodeEditorFuncOptions, CodeEditorHelper, CodeEditorLanguages } from './code-editor-helper.model';\n\nexport class CodeEditorJavascriptHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Javascript;\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName } = this.functionOptions;\n\n return `export function ${funcName}(${this.getParamsString()}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorKotlinHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Kotlin;\n typesMap: CodeEditorTypesMap = {\n boolean: 'Boolean',\n int: 'Int',\n number: 'int',\n double: 'Double',\n float: 'Float',\n str: 'String',\n array_boolean: 'Array<Boolean>',\n array_int: 'Array<Int>',\n array_float: 'Array<Float>',\n array_double: 'Array<Double>',\n array_str: 'Array<String>',\n };\n\n private packagesText = 'package com.testgorilla.testtaker\\n';\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.packagesText}${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `fun ${funcName}(${params}): ${showingReturnType} {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}: ${this.parseType(values.type)}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport { CodeEditorFuncOptions, CodeEditorHelper, CodeEditorLanguages } from './code-editor-helper.model';\n\nexport class CodeEditorPhpHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Php;\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t //Insert your code here \\n}\\n ?>`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName } = this.functionOptions;\n\n return `<?php function ${funcName}(${this.getParamsString()}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `$${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport { CodeEditorFuncOptions, CodeEditorHelper, CodeEditorLanguages } from './code-editor-helper.model';\n\nexport class CodeEditorPythonHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Python;\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t #Insert your code here \\n`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName } = this.functionOptions;\n\n return `def ${funcName}(${this.getParamsString()}): \\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport { CodeEditorFuncOptions, CodeEditorHelper, CodeEditorLanguages } from './code-editor-helper.model';\n\nexport class CodeEditorRHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.R;\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t #Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName } = this.functionOptions;\n\n return `${funcName} <- function(${this.getParamsString()}) {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport { CodeEditorFuncOptions, CodeEditorHelper, CodeEditorLanguages } from './code-editor-helper.model';\n\nexport class CodeEditorRubyHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Ruby;\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t #Insert your code here \\nend`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName } = this.functionOptions;\n\n return `def ${funcName}(${this.getParamsString()})\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorScalaHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Scala;\n typesMap: CodeEditorTypesMap = {\n boolean: 'Boolean',\n int: 'Int',\n double: 'Double',\n float: 'Float',\n str: 'String',\n array_boolean: 'Array[Boolean]',\n array_int: 'Array[Integer]',\n array_float: 'Array[Float]',\n array_double: 'Array[Double]',\n array_str: 'Array[String]',\n };\n\n private packagesText = 'package Testgorilla\\nobject TestTaker\\n';\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.packagesText}${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `def ${funcName}(${params}) : ${showingReturnType} = {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}: ${this.parseType(values.type)}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorSqlOperations,\n} from './code-editor-helper.model';\n\nexport class CodeEditorSqlHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Sql;\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}${this.getOperationCode()}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName } = this.functionOptions;\n\n return `${funcName || ''}\\n`;\n }\n\n private getOperationCode(): string {\n const { name: funcName } = this.functionOptions;\n\n switch (funcName) {\n case CodeEditorSqlOperations.Select:\n return '## FROM ## WHERE ##;\\n';\n case CodeEditorSqlOperations.Update:\n return '## SET ## WHERE ##;\\n';\n case CodeEditorSqlOperations.Insert:\n return 'INTO ## WHERE ##;\\n';\n case CodeEditorSqlOperations.Delete:\n return '## FROM ## WHERE ##;\\n';\n case CodeEditorSqlOperations.CreateTable:\n return '## VALUES ##;\\n';\n default:\n return '';\n }\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorSwiftHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Swift;\n typesMap: CodeEditorTypesMap = {\n boolean: 'Bool',\n int: 'Int',\n double: 'Double',\n float: 'Float',\n str: 'String',\n array_boolean: '[Bool]',\n array_int: '[Int]',\n array_float: '[Float]',\n array_double: '[Double]',\n array_str: '[String]',\n };\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `func ${funcName}(${params}) -> ${showingReturnType} {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `_ ${values.name}: ${this.parseType(values.type)}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { CodeEditorHelperBase } from './code-editor-helper.base';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from './code-editor-helper.model';\n\nexport class CodeEditorTypescriptHelper extends CodeEditorHelperBase implements CodeEditorHelper {\n language = CodeEditorLanguages.Typescript;\n typesMap: CodeEditorTypesMap = {\n boolean: 'boolean',\n int: 'number',\n number: 'number',\n double: 'number',\n float: 'number',\n str: 'string',\n array_boolean: 'Array<boolean>',\n array_int: 'Array<number>',\n array_float: 'Array<number>',\n array_double: 'Array<number>',\n array_str: 'Array<string>',\n };\n\n constructor(private functionOptions: CodeEditorFuncOptions) {\n super();\n }\n\n getInitCode(): string {\n return `${this.getFunctionOpening()}\\t //Insert your code here \\n}`;\n }\n\n getFunctionOpening(): string {\n const { name: funcName, returnType } = this.functionOptions;\n const params = this.getParamsString();\n const showingReturnType = this.parseType(returnType);\n\n return `export default function ${funcName}(${params}): ${showingReturnType} {\\n`;\n }\n\n private getParamsString(): string {\n const { params } = this.functionOptions;\n let paramsString = '';\n\n if (params && params.length > 0) {\n params.forEach(values => (paramsString += `${values.name}: ${this.parseType(values.type)}, `));\n paramsString = paramsString.slice(0, -2);\n }\n\n return paramsString;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n CodeEditorCHelper,\n CodeEditorCppHelper,\n CodeEditorCSharpHelper,\n CodeEditorGoHelper,\n CodeEditorJavaHelper,\n CodeEditorJavascriptHelper,\n CodeEditorKotlinHelper,\n CodeEditorPhpHelper,\n CodeEditorPythonHelper,\n CodeEditorRHelper,\n CodeEditorRubyHelper,\n CodeEditorScalaHelper,\n CodeEditorSqlHelper,\n CodeEditorSwiftHelper,\n CodeEditorTypescriptHelper,\n} from './helpers';\nimport {\n CodeEditorFuncOptions,\n CodeEditorHelper,\n CodeEditorLanguages,\n} from './helpers/code-editor-helper.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CodeEditorService {\n private helper: CodeEditorHelper;\n\n setHelper(language: string, funcParams: CodeEditorFuncOptions): void {\n this.helper = this.createHelper(language, funcParams);\n }\n\n getInitCode(): string {\n return this.helper.getInitCode();\n }\n\n getEditorLang(): string {\n return this.helper.getEditorLang();\n }\n\n private createHelper(lang: string, funcParams: CodeEditorFuncOptions): CodeEditorHelper {\n // todo: review this logic according to new TAT, remove generated init code if not needed ?\n switch (lang as CodeEditorLanguages) {\n case CodeEditorLanguages.Javascript:\n return new CodeEditorJavascriptHelper(funcParams);\n case CodeEditorLanguages.Typescript:\n return new CodeEditorTypescriptHelper(funcParams);\n case CodeEditorLanguages.Php:\n return new CodeEditorPhpHelper(funcParams);\n case CodeEditorLanguages.Python:\n return new CodeEditorPythonHelper(funcParams);\n case CodeEditorLanguages.Java:\n return new CodeEditorJavaHelper(funcParams);\n case CodeEditorLanguages.Ruby:\n return new CodeEditorRubyHelper(funcParams);\n case CodeEditorLanguages.C:\n return new CodeEditorCHelper(funcParams);\n case CodeEditorLanguages.Cpp:\n return new CodeEditorCppHelper(funcParams);\n case CodeEditorLanguages.R:\n return new CodeEditorRHelper(funcParams);\n case CodeEditorLanguages.Scala:\n return new CodeEditorScalaHelper(funcParams);\n case CodeEditorLanguages.CSharp:\n case CodeEditorLanguages.CSharpLegacy:\n return new CodeEditorCSharpHelper(funcParams);\n case CodeEditorLanguages.Go:\n return new CodeEditorGoHelper(funcParams);\n case CodeEditorLanguages.Sql:\n case CodeEditorLanguages.Sqlite:\n return new CodeEditorSqlHelper(funcParams);\n default: {\n const versionedHelper = lang && this.getVersionedHelper(lang, funcParams);\n\n if (!versionedHelper) {\n throw new Error(`language ${lang} is not supported`);\n }\n\n return versionedHelper;\n }\n }\n }\n\n private getVersionedHelper(lang: string, funcParams: CodeEditorFuncOptions): CodeEditorHelper {\n if (lang.startsWith(CodeEditorLanguages.Kotlin)) {\n return new CodeEditorKotlinHelper(funcParams);\n }\n if (lang.startsWith(CodeEditorLanguages.Swift)) {\n return new CodeEditorSwiftHelper(funcParams);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { editor, IDisposable } from 'monaco-editor';\nimport { combineLatest, distinctUntilChanged, filter, first, interval, map, take } from 'rxjs';\nimport { MonacoEditorModule } from 'ngx-monaco-editor-v2';\n\nimport { erlangLanguage } from '../../utils/additional-languages/erlang';\nimport { CodingAssistanceOptions, Config, FormattingOptions } from '../../models/configs';\nimport { Themes } from '../../models/theme';\nimport { ConfigurationsService } from '../../services/configurations.service';\nimport { LibCodingTestService, ResetCodeAction } from '../../services/lib-coding-test.service';\nimport { StorageCodingService } from '../../services/storage.service';\nimport { CodeEditorService } from './code-editor.service';\nimport { CodeEditorFuncParam, CodeEditorLanguages, CodeEditorTypesMap } from './helpers/code-editor-helper.model';\nimport { MonacoColorTheme, PasteData } from './models/code-editor.model';\nimport { CodingSnapshot } from './models/coding-snapshot.model';\n\n@UntilDestroy()\n@Component({\n selector: 'tgo-code-editor',\n templateUrl: './code-editor.component.html',\n styleUrls: ['./code-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, MonacoEditorModule]\n})\nexport class CodeEditorComponent implements OnInit, OnDestroy, OnChanges {\n private readonly libCodingTestService = inject(LibCodingTestService);\n private readonly configurationsService = inject(ConfigurationsService);\n private readonly codeEditorService = inject(CodeEditorService);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly StorageCodingService = inject(StorageCodingService);\n\n @Input() initCode: string;\n @Input() functionParams: CodeEditorFuncParam[];\n @Input() functionName: string;\n @Input() returnType: keyof CodeEditorTypesMap;\n @Input() hasCodingConfigPanel: boolean;\n @Input() isReadonly: boolean;\n @Input() autoHeight: boolean;\n @Input() shouldGenerateInitCode: boolean;\n\n @Input() set snapshot(snap: CodingSnapshot) {\n if (snap) {\n this.currentSnapshot = snap;\n this.handleSnapshot(snap.text);\n }\n }\n\n @Output() pasteEvent = new EventEmitter<PasteData>();\n @Output() codeChange = new EventEmitter<string>();\n\n @ViewChild('editor', { read: ElementRef }) codeEditorElRef: ElementRef;\n\n code = '';\n codePublished = '';\n codeLanguage = '';\n editorOptions: { [key: string]: any } = {\n theme: MonacoColorTheme.Dark,\n fontSize: '14',\n scrollBeyondLastLine: false,\n minimap: { enabled: false },\n fixedOverflowWidgets: true,\n insertSpaces: false,\n detectIndentation: false,\n automaticLayout: true,\n };\n\n editor: editor.ICodeEditor;\n previousConfig = this.StorageCodingService.getSavedConfig();\n\n currentSnapshot: CodingSnapshot;\n previousMonacoDecoration: editor.IEditorDecorationsCollection;\n\n private pasteListener: IDisposable;\n private contentChangedSub: IDisposable;\n\n ngOnInit(): void {\n if (!this.previousConfig) {\n this.previousConfig = this.configurationsService.getInitialConfig();\n }\n\n if (this.hasCodingConfigPanel) {\n this.updateIDEConfig();\n }\n this.listenUpdates();\n\n this.setupConfigs();\n this.setupCode();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (typeof changes.initCode?.currentValue === 'string') {\n this.code = changes.initCode.currentValue;\n }\n }\n\n ngOnDestroy(): void {\n this.contentChangedSub?.dispose();\n this.pasteListener?.dispose();\n }\n\n initEditor(editor: editor.ICodeEditor): void {\n this.editor = editor;\n\n this.pasteListener = this.editor.onDidPaste(event => this.catchEvent(event));\n\n if (this.currentSnapshot) {\n this.handleSnapshot(this.currentSnapshot.text);\n }\n\n if (this.autoHeight) {\n this.listenContentHeight(editor);\n }\n }\n\n private catchEvent(event: editor.IPasteEvent): void {\n const data = this.editor.getModel()?.getValueInRange(event.range);\n if (data) {\n this.pasteEvent.emit({ type: 'paste', data });\n }\n }\n\n publishCode(code): void {\n if (code !== this.codePublished) {\n this.codePublished = code;\n this.codeChange.emit(this.codePublished);\n }\n }\n\n private updateIDEConfig(): void {\n this.configurationsService.config$\n .pipe(distinctUntilChanged(), untilDestroyed(this))\n .subscribe((config: Config) => {\n let configObject = {};\n // eslint-disable-next-line guard-for-in\n for (const key in config) {\n if (config[key] !== this.previousConfig[key]) {\n switch (key as FormattingOptions | CodingAssistanceOptions) {\n case FormattingOptions.ColorTheme:\n configObject = {\n theme:\n config[FormattingOptions.ColorTheme] === Themes.Default\n ? MonacoColorTheme.Light\n : MonacoColorTheme.Dark,\n };\n\n break;\n case CodingAssistanceOptions.AutoComplete:\n configObject = {\n quickSuggestions: {\n other: config[CodingAssistanceOptions.AutoComplete],\n },\n };\n\n break;\n case CodingAssistanceOptions.AutoBrackets:\n configObject = {\n autoClosingBrackets: config[CodingAssistanceOptions.AutoBrackets] ? 'always' : 'never',\n };\n\n break;\n case FormattingOptions.TabSize:\n configObject = {\n tabSize: config[FormattingOptions.TabSize],\n };\n\n break;\n case FormattingOptions.FontSize:\n configObject = {\n fontSize: config[FormattingOptions.FontSize],\n };\n\n break;\n case CodingAssistanceOptions.ErrorHighlighting:\n this.libCodingTestService.currentLanguage$.pipe(take(1)).subscribe(language => {\n if (language === CodeEditorLanguages.Javascript) {\n window['monaco'].languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n noSyntaxValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n });\n } else if (language === CodeEditorLanguages.Typescript) {\n window['monaco'].languages.typescript.typescriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n noSyntaxValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n });\n }\n });\n break;\n }\n this.editorOptions = Object.assign({}, this.editorOptions, configObject);\n }\n }\n this.changeDetectorRef.detectChanges();\n this.previousConfig = config;\n });\n\n this.editorOptions = Object.assign({}, this.editorOptions, {\n automaticLayout: true,\n });\n }\n\n private listenContentHeight(editor: editor.ICodeEditor): void {\n const updateHeight = () => {\n window.requestAnimationFrame(() => {\n const { width } = this.codeEditorElRef.nativeElement.getBoundingClientRect();\n const contentHeight = Math.min(1000, editor.getContentHeight());\n this.codeEditorElRef.nativeElement.style.height = `${contentHeight}px`;\n editor.layout({ width, height: contentHeight });\n });\n };\n\n this.contentChangedSub = editor.onDidContentSizeChange(updateHeight);\n updateHeight();\n }\n\n private setupConfigs(): void {\n const { functionParams: params, functionName: name, returnType } = this;\n\n const config = this.previousConfig;\n\n const wordWrap = this.currentSnapshot ? 'on' : 'off';\n const theme = this.getInitialColorTheme(config, this.currentSnapshot);\n\n this.libCodingTestService.currentLanguage$.pipe(untilDestroyed(this)).subscribe((language: CodeEditorLanguages) => {\n if (this.shouldGenerateInitCode) {\n this.codeEditorService.setHelper(language, { params, name, returnType });\n this.codeLanguage = this.codeEditorService.getEditorLang();\n } else {\n if (language === CodeEditorLanguages.Cpp) {\n this.codeLanguage = CodeEditorLanguages.CppEditor;\n } else if (language === CodeEditorLanguages.CSharp || language === CodeEditorLanguages.CSharpLegacy) {\n this.codeLanguage = CodeEditorLanguages.CSharpEditor;\n } else if (language === CodeEditorLanguages.Sqlite) {\n this.codeLanguage = CodeEditorLanguages.Sql;\n } else {\n this.codeLanguage = language;\n }\n }\n this.editorOptions = Object.assign({}, this.editorOptions, {\n language: this.codeLanguage,\n });\n });\n\n this.editorOptions = Object.assign({}, this.editorOptions, {\n readOnly: this.isReadonly,\n quickSuggestions: {\n other: config[CodingAssistanceOptions.AutoComplete],\n },\n autoClosingBrackets: config[CodingAssistanceOptions.AutoBrackets] ? 'always' : 'never',\n tabSize: config[FormattingOptions.TabSize],\n fontSize: config[FormattingOptions.FontSize],\n theme,\n wordWrap,\n });\n const monacoLibraryReady$ = interval(100).pipe(\n map(() => window.monaco),\n filter(Boolean),\n first()\n );\n combineLatest({\n monaco: monacoLibraryReady$,\n language: this.libCodingTestService.currentLanguage$,\n })\n .pipe(take(1))\n .subscribe(result => {\n if (result.language === CodeEditorLanguages.Javascript) {\n result.monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n noSyntaxValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n });\n } else if (result.language === CodeEditorLanguages.Typescript) {\n result.monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n noSyntaxValidation: !config[CodingAssistanceOptions.ErrorHighlighting],\n });\n }\n result.monaco.languages.register({ id: CodeEditorLanguages.Erlang });\n result.monaco.languages.setMonarchTokensProvider(CodeEditorLanguages.Erlang, erlangLanguage);\n });\n }\n\n private getInitialColorTheme(config: Config, snapshot: CodingSnapshot): string {\n let theme: MonacoColorTheme;\n\n if (snapshot) {\n theme = MonacoColorTheme.Dark;\n } else {\n theme = config[FormattingOptions.ColorTheme] === Themes.Default ? MonacoColorTheme.Light : MonacoColorTheme.Dark;\n }\n\n return theme;\n }\n\n private setupCode(calledFromReset = false) {\n this.handleInitCode(calledFromReset);\n this.publishCode(this.code);\n }\n\n private handleInitCode(calledFromReset = false): void {\n if (calledFromReset) {\n this.code = this.libCodingTestService.getInitCode();\n } else if (this.initCode) {\n this.code = this.initCode;\n } else if (this.currentSnapshot) {\n return;\n } else if (this.shouldGenerateInitCode) {\n this.code = this.codeEditorService.getInitCode();\n }\n }\n\n private listenUpdates(): void {\n this.libCodingTestService.codeReset$\n .pipe(\n filter(val => val === ResetCodeAction.Confirm),\n untilDestroyed(this)\n )\n .subscribe(() => {\n this.setupCode(true);\n });\n }\n\n private handleSnapshot(code: string): void {\n this.code = code;\n\n if (!this.editor) {\n return;\n }\n\n this.editor.setValue(code); // make sure editor model has the latest value of the code\n\n if (this.previousMonacoDecoration) {\n this.previousMonacoDecoration.clear();\n }\n\n if (this.currentSnapshot.copied_text) {\n // if the snapshot contains copyPasted code, find it's range in monaco\n const matches = this.editor\n .getModel()\n .findMatches(this.currentSnapshot.copied_text, false, false, true, null, true);\n\n if (matches.length) {\n // if the range is found in editor model, decorate it with additional class to highlight on the ui\n this.previousMonacoDecoration = this.editor.createDecorationsCollection([\n {\n range: matches[0].range,\n options: { inlineClassName: 'copy-pasted-code' },\n },\n ]);\n }\n }\n }\n}\n","<div class=\"container notranslate\" translate=\"no\">\n <ngx-monaco-editor\n #editor\n class=\"editor\"\n [options]=\"editorOptions\"\n [(ngModel)]=\"code\"\n (ngModelChange)=\"publishCode($event)\"\n (onInit)=\"initEditor($event)\"\n ></ngx-monaco-editor>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * USAGE:\n * {{ argument | memoizeFunc : method [: context] }}\n *\n * You could provide multiple arguments for the function like that:\n * {{ [argument1, argument2] | memoizeFunc : method [: context] }}\n *\n *\n * FUNCTION WITH CONTEXT\n * We still could have optimization in impure functions with Angular pipes. Just provide context as second parameter\n * to the memoizeFunc pipe.\n *\n * {{ argument | memoizeFunc : method : this }}\n *\n * Alternative variant use 'bind'\n *\n * {{ argument | memoizeFunc : method.bind(this) }}\n *\n * */\n@Pipe({\n name: 'memoizeFunc',\n standalone: true,\n})\nexport class MemoizeFuncPipe implements PipeTransform {\n transform<T, K>(value: T, handler: (value: T) => K, context?: any): K {\n if (context) {\n return handler.call(context, value);\n }\n\n return handler(value);\n }\n}\n","import { Component, ElementRef, inject, Input, OnInit, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport Quill from 'quill';\nimport { TableCell, TableContainer, TableRow } from 'quill/formats/table';\nimport { asyncScheduler, observeOn, of, take } from 'rxjs';\nimport { QuillModule } from 'ngx-quill';\nimport { TooltipComponentModule, IconComponentModule, DividerComponentModule } from '@testgorilla/tgo-ui';\n\nimport { Modes } from '../../models/mode';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';\n\nclass TGOTableCell extends TableCell {\n public static className = 'td-q';\n}\n\nclass TGOTableRow extends TableRow {\n public static className = 'tr-q';\n}\n\nclass TGOTableContainer extends TableContainer {\n public static className = 'table-q';\n}\n\n@Component({\n selector: 'tgo-code-instructions',\n templateUrl: 'instructions.component.html',\n styleUrls: ['instructions.component.scss'],\n imports: [\n CommonModule,\n QuillModule,\n TooltipComponentModule,\n IconComponentModule,\n DividerComponentModule,\n MemoizeFuncPipe,\n ]\n})\nexport class InstructionsComponent implements OnInit {\n private readonly libCodingTestService = inject(LibCodingTestService);\n\n readonly PreviewMode = Modes.Preview;\n readonly RunningMode = Modes.Running;\n readonly NonAssessmentPreview = Modes.NonAssessmentPreview;\n @Input() mode = Modes.Preview;\n @Input() questionText: string;\n @Input() translations: Record<string, unknown>;\n @Input() isDarkTheme: boolean;\n @Input() isLAT = false;\n language$ = this.libCodingTestService.currentLanguage$;\n\n @ViewChild('quill', { read: ElementRef }) set QuillElement(quill: ElementRef) {\n if (!quill) {\n return;\n }\n\n this.manualHighlight(quill.nativeElement);\n }\n\n languages = {\n c: 'C GCC',\n 'c#': 'C# SDK',\n 'c#_legacy': 'C# SDK',\n 'c++': 'C++ G++',\n java: 'Java OpenJDK',\n python: 'Python',\n javascript: 'JavaScript Node',\n php: 'PHP',\n sql: 'SQL SQLite',\n typescript: 'Typescript',\n ruby: 'Ruby',\n go: 'Go',\n r: 'R',\n kotlin: 'Kotlin',\n elixir: 'Elixir',\n rust: 'Rust',\n dart: 'Dart',\n erlang: 'Erlang',\n julia: 'Julia',\n perl: 'Perl',\n swift: 'Swift',\n scala: 'Scala',\n };\n languagesVersion: { [key: string]: string } = {\n c: '10',\n 'c#': '3.1.300',\n 'c#_legacy': '3.1.300',\n 'c++': '10',\n java: '12',\n python: '3.8',\n javascript: '13',\n php: '7.4',\n sql: '3.31.1',\n typescript: '4.3.4',\n ruby: '3',\n go: '1.16',\n r: '4.1.0',\n kotlin: '',\n elixir: '',\n rust: '',\n dart: '',\n erlang: '',\n julia: '',\n perl: '',\n swift: '',\n scala: '2.11',\n };\n\n private manualHighlight(quillElement: HTMLElement): void {\n const codeElements = quillElement.getElementsByTagName('pre');\n\n if (!codeElements.length) {\n return;\n }\n\n of(Array.from(codeElements))\n .pipe(observeOn(asyncScheduler), take(1))\n .subscribe((codeElements: HTMLPreElement[]) => {\n if (!window.hljs) {\n return;\n }\n\n codeElements.forEach(el => {\n window.hljs.highlightBlock(el);\n });\n });\n }\n\n ngOnInit(): void {\n Quill.register(TGOTableCell, true);\n Quill.register(TGOTableRow, true);\n Quill.register(TGOTableContainer, true);\n }\n\n getVersion([isLAT, key]: [boolean, string]): string {\n return isLAT ? this.libCodingTestService.getVersion() : this.languagesVersion[key];\n }\n}\n","<ng-container *ngIf=\"language$ | async as language\">\n <section *ngIf=\"questionText\" class=\"question\" id=\"question-section\">\n <header class=\"question-header\">\n <h2 class=\"question-heading\">{{ translations['HEADINGS']['INSTRUCTIONS'] }}</h2>\n </header>\n <div class=\"question-content\">\n <ng-container *ngIf=\"mode === PreviewMode\">\n <div class=\"tips\">\n <ui-tooltip [message]=\"translations['PRACTICE_QUESTIONS_STAGE']['INFO']\" class=\"tips-icon\">\n <ui-icon [name]=\"'Info'\" [size]=\"'24'\"></ui-icon>\n </ui-tooltip>\n <p class=\"tips-panel-text\">\n {{ translations['PRACTICE_QUESTIONS_STAGE']['QUESTIONS_INDEXING_AS_LAST'] }}\n </p>\n </div>\n <p class=\"tips-text\" [innerHTML]=\"translations['CODE_QUESTION']['PRACTICE_INTRODUCTION']\"></p>\n <ui-divider class=\"divider\" [size]=\"'small'\"></ui-divider>\n </ng-container>\n\n <quill-view\n #quill\n class=\"disable-text-selection question-text\"\n [class.question-text-dark]=\"isDarkTheme\"\n theme=\"snow\"\n [content]=\"questionText\"\n ></quill-view>\n <div [ngSwitch]=\"language\">\n <span class=\"mr-4\">{{ translations['CODE_QUESTION']['LANGUAGE_USING'] }} </span>\n <ng-container *ngFor=\"let item of languages | keyvalue\">\n <span *ngSwitchCase=\"item.key\">\n <span class=\"bold mr-4\">{{ item.value + ' ' + ([isLAT, item.key] | memoizeFunc: getVersion : this) }}</span>\n </span>\n </ng-container>\n <span *ngIf=\"mode === RunningMode || mode === NonAssessmentPreview\">\n <br />\n <span>{{ translations['CODE_QUESTION']['ADD_COMMENTS'] }}</span>\n </span>\n </div>\n </div>\n </section>\n</ng-container>\n","import { Observable, Subscriber } from 'rxjs';\n\nexport function resizeElement(element: Element): Observable<ResizeObserverEntry> {\n return new Observable((observer: Subscriber<ResizeObserverEntry>) => {\n const resizeObserver = new ResizeObserver(([entry]) => {\n observer.next(entry);\n });\n\n resizeObserver.observe(element);\n\n return () => {\n resizeObserver.disconnect();\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { distinctUntilChanged, Observable, of, take, tap } from 'rxjs';\nimport {\n ApplicationTheme,\n OptionType,\n TooltipComponentModule,\n DropdownComponentModule,\n ButtonComponentModule,\n SpinnerComponentModule,\n} from '@testgorilla/tgo-ui';\n\nimport { LanguageChangeAction } from '../../models/language-change-action';\nimport { LATLanguages } from '../../models/lat-languages';\nimport { ConfigurationsService } from '../../services/configurations.service';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport { StorageCodingService } from '../../services/storage.service';\nimport {\n CodeEditorFuncParam,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from '../code-editor/helpers/code-editor-helper.model';\nimport { PasteData } from '../code-editor/models/code-editor.model';\nimport { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';\nimport { CodeEditorComponent } from '../code-editor/code-editor.component';\n\n@UntilDestroy()\n@Component({\n selector: 'tgo-coding-section',\n templateUrl: './coding-section.component.html',\n styleUrls: ['./coding-section.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TooltipComponentModule,\n DropdownComponentModule,\n ButtonComponentModule,\n SpinnerComponentModule,\n MemoizeFuncPipe,\n CodeEditorComponent,\n ]\n})\nexport class CodingSectionComponent implements OnInit, OnChanges {\n private readonly configurationsService = inject(ConfigurationsService);\n private readonly libCodingTestService = inject(LibCodingTestService);\n private readonly StorageCodingService = inject(StorageCodingService);\n private readonly fb = inject(FormBuilder);\n\n @Input() initCode: string;\n @Input() functionParams: CodeEditorFuncParam[];\n @Input() functionName: string;\n @Input() returnType: keyof CodeEditorTypesMap;\n @Input() isLAT = false;\n @Input() languages: LATLanguages;\n @Input() isFullViewMode: boolean;\n @Input() shouldGenerateInitCode: boolean;\n @Input() isRunnableWithLangSelector: boolean;\n @Input() autoHeight: boolean;\n @Input() translations: Record<string, unknown>;\n @Input() isMobile: boolean;\n @Input() applicationTheme: ApplicationTheme;\n\n @Output() pasteEvent = new EventEmitter<PasteData>();\n @Output() codeChange = new EventEmitter<string>();\n @Output() languageChange = new EventEmitter<CodeEditorLanguages>();\n\n headerForm: FormGroup;\n isFullscreenMode$ = this.libCodingTestService.isFullscreen$;\n previousLanguage: CodeEditorLanguages;\n code: string;\n\n languagesFormattedList: OptionType[];\n\n ngOnInit() {\n if (this.isLAT) {\n this.createHeaderForm().subscribe(() => {\n this.initializeLanguage();\n this.listenLanguageDropdownChanges();\n this.handleLanguageChangeModal();\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (typeof changes.initCode?.currentValue === 'string') {\n this.codeChange.emit(changes.initCode.currentValue);\n this.libCodingTestService.changeCurrentCode(changes.initCode.currentValue);\n }\n if (changes.languages?.currentValue) {\n this.languagesFormattedList = this.languages.map(({ value, label }) => ({\n value,\n displayValue: label,\n }));\n }\n }\n\n private createHeaderForm(): Observable<CodeEditorLanguages> {\n return this.libCodingTestService.currentLanguage$.pipe(\n take(1),\n tap(lastLanguage => {\n this.headerForm = this.fb.group({\n language: lastLanguage ? lastLanguage : this.languages[0].value,\n });\n if (this.languages.length === 1) {\n this.language.disable();\n }\n })\n );\n }\n\n private initializeLanguage() {\n this.previousLanguage = this.language.value as CodeEditorLanguages;\n }\n\n private listenLanguageDropdownChanges() {\n this.language.valueChanges\n .pipe(untilDestroyed(this), distinctUntilChanged())\n .subscribe((value: CodeEditorLanguages) => {\n if (value !== this.previousLanguage) {\n this.languageChange.emit(value);\n }\n });\n }\n\n private handleLanguageChangeModal() {\n this.libCodingTestService.languageChange$.pipe(untilDestroyed(this)).subscribe(value => {\n if (value === LanguageChangeAction.Cancel) {\n // Revert language to previous selection if user cancels\n this.language.setValue(this.previousLanguage);\n } else if (value === LanguageChangeAction.Confirm) {\n this.previousLanguage = this.language.value as CodeEditorLanguages;\n // Update current language if user confirms the new selection\n this.libCodingTestService.changeCurrentLanguage(this.language.value as CodeEditorLanguages);\n this.setVersion();\n }\n });\n }\n\n parseCodeChange(code: string): void {\n this.codeChange.emit(code);\n this.libCodingTestService.changeCurrentCode(code);\n this.code = code;\n }\n\n get hasNoCodeChanges(): boolean {\n return this.code === this.libCodingTestService.getInitCode();\n }\n\n resetCode(): void {\n this.libCodingTestService.resetCode();\n }\n\n startGuidedTour(): void {\n this.libCodingTestService.startGuidedTour();\n }\n\n disableFullscreen(): void {\n this.libCodingTestService.setFullscreen(false);\n }\n\n openConfigPanel(): void {\n this.configurationsService.openConfigPanel();\n }\n\n isCodeLoading$(isLAT: boolean): Observable<boolean> {\n if (isLAT) {\n return this.libCodingTestService.isBoilerplateLoading$;\n }\n return of(false);\n }\n\n get language(): AbstractControl {\n return this.headerForm.controls.language;\n }\n\n private setVersion() {\n const version = this.languages.find(x => x.value === this.language.value).version;\n this.libCodingTestService.setVersion(version);\n if (this.isFullViewMode) {\n this.StorageCodingService.updateVersion(version);\n }\n }\n}\n","<section class=\"section\">\n <header *ngIf=\"isFullViewMode || isRunnableWithLangSelector\" class=\"section-header\">\n <h2 class=\"heading\">{{ translations['HEADINGS']['CODING'] }}</h2>\n <div class=\"header-controls\" [class.is-full-screen]=\"isFullscreenMode$ | async\">\n <form *ngIf=\"isLAT\" [formGroup]=\"headerForm\" class=\"header-form\">\n <ui-tooltip [message]=\"languages.length === 1 ? translations['TOOLTIPS']['DISABLE_LANGUAGE'] : null\">\n <ui-dropdown\n id=\"language-dropdown\"\n class=\"language-dropdown\"\n formControlName=\"language\"\n [valueList]=\"languagesFormattedList\"\n [showBottomContent]=\"false\"\n [allowClear]=\"false\"\n [applicationTheme]=\"applicationTheme\"\n ></ui-dropdown>\n </ui-tooltip>\n </form>\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Reset'\"\n [tooltip]=\"translations['TOOLTIPS']['RESET_CODE']\"\n [disabled]=\"hasNoCodeChanges\"\n [applicationTheme]=\"applicationTheme\"\n (buttonClickEvent)=\"resetCode()\"\n class=\"themed-button\"\n >\n </ui-button>\n <ui-button\n *ngIf=\"isLAT && !isMobile && !isRunnableWithLangSelector\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Help'\"\n [tooltip]=\"translations['TOOLTIPS']['HELP']\"\n [applicationTheme]=\"applicationTheme\"\n (buttonClickEvent)=\"startGuidedTour()\"\n class=\"themed-button\"\n >\n </ui-button>\n <ui-button\n *ngIf=\"!isRunnableWithLangSelector\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Settings'\"\n [tooltip]=\"translations['TOOLTIPS']['CONFIGURATIONS']\"\n [applicationTheme]=\"applicationTheme\"\n id=\"configuration-ide-button\"\n class=\"themed-button\"\n (buttonClickEvent)=\"openConfigPanel()\"\n >\n </ui-button>\n\n <ui-button\n *ngIf=\"(isFullscreenMode$ | async) && !isMobile\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Minimize'\"\n [tooltip]=\"translations['TOOLTIPS']['MINIMIZE']\"\n [tooltipPosition]=\"'left'\"\n [applicationTheme]=\"applicationTheme\"\n class=\"themed-button\"\n (buttonClickEvent)=\"disableFullscreen()\"\n >\n </ui-button>\n </div>\n </header>\n\n <div class=\"ide\" [class.spinner]=\"isLAT | memoizeFunc: isCodeLoading$ : this | async\">\n <tgo-code-editor\n *ngIf=\"(isLAT | memoizeFunc: isCodeLoading$ : this | async) === false; else showSpinner\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [shouldGenerateInitCode]=\"!isFullViewMode && !isRunnableWithLangSelector && shouldGenerateInitCode\"\n [hasCodingConfigPanel]=\"isFullViewMode\"\n [autoHeight]=\"autoHeight\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"parseCodeChange($event)\"\n >\n </tgo-code-editor>\n <ng-template #showSpinner>\n <ui-spinner [isLoader]=\"false\" class=\"code-loading-spinner\"></ui-spinner>\n </ng-template>\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponentModule } from '@testgorilla/tgo-ui';\n\n@Component({\n selector: 'tgo-code-panel',\n templateUrl: 'panel.component.html',\n styleUrls: ['panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, MatSidenavModule, ButtonComponentModule]\n})\nexport class PanelComponent implements OnChanges {\n @Input() heading: string;\n @Input() openPanel: boolean;\n @Output() closeEvent = new EventEmitter<boolean>();\n @ViewChild('sidenav', { static: true }) sidenav: MatSidenav;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.openPanel.currentValue) {\n this.sidenav.open();\n }\n }\n}\n","<mat-sidenav-container class=\"sidenav-container\">\n <mat-sidenav #sidenav position=\"end\" (closedStart)=\"closeEvent.emit(true)\">\n <div class=\"container\">\n <div class=\"header\">\n <h2 class=\"heading\">{{ heading }}</h2>\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [tooltip]=\"'Close'\"\n (buttonClickEvent)=\"sidenav.close()\"\n class=\"themed-button\"\n ></ui-button>\n </div>\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n </mat-sidenav>\n</mat-sidenav-container>\n","import { ChangeDetectionStrategy, Component, inject, Input, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { distinctUntilChanged } from 'rxjs';\nimport { ApplicationTheme, OptionType, DropdownComponentModule, ToggleComponentModule } from '@testgorilla/tgo-ui';\nimport { CodingAssistanceOptions, Config } from '../../models/configs';\nimport { ConfigurationsService } from '../../services/configurations.service';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport { StorageCodingService } from '../../services/storage.service';\nimport { CodeEditorLanguages } from '../code-editor/helpers/code-editor-helper.model';\nimport { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';\nimport { PanelComponent } from '../panel/panel.component';\n\n@UntilDestroy()\n@Component({\n selector: 'tgo-code-configurations',\n templateUrl: 'configurations.component.html',\n styleUrls: ['configurations.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n DropdownComponentModule,\n ToggleComponentModule,\n MemoizeFuncPipe,\n PanelComponent,\n ]\n})\nexport class ConfigurationsComponent implements OnInit {\n private readonly fb = inject(FormBuilder);\n private readonly configurationsService = inject(ConfigurationsService);\n private readonly StorageCodingService = inject(StorageCodingService);\n private readonly libCodingTestService = inject(LibCodingTestService);\n\n @Input() translations: Record<string, unknown>;\n @Input() companyColor: string;\n @Input() applicationTheme: ApplicationTheme;\n\n formattingOptions = this.configurationsService.getFormattingOptions();\n codingAssistanceOptions = this.configurationsService.getCodingAssistanceOptions();\n initialConfig = this.StorageCodingService.getSavedConfig();\n language$ = this.libCodingTestService.currentLanguage$;\n\n configForm: FormGroup;\n formObject = {};\n configurationsPanelOpen$ = this.configurationsService.configurationsPanelOpen$;\n\n ngOnInit() {\n if (!this.initialConfig) {\n this.initialConfig = this.configurationsService.getInitialConfig();\n }\n this.addConfigControls(this.formattingOptions);\n this.addConfigControls(this.codingAssistanceOptions);\n this.configForm = this.fb.group(this.formObject);\n this.configForm.valueChanges.pipe(distinctUntilChanged(), untilDestroyed(this)).subscribe((value: Config) => {\n this.configurationsService.setConfig(value);\n });\n }\n\n trackConfigChange(controlName: string): void {\n const controlValue = this.configForm.value[controlName];\n this.configurationsService.trackConfigChanged({\n [controlName]: controlValue,\n });\n }\n\n closeConfigPanel() {\n this.configurationsService.closeConfigPanel();\n }\n\n private addConfigControls(configObject: object) {\n // eslint-disable-next-line guard-for-in\n for (const option in configObject) {\n this.formObject[option] = this.initialConfig[option];\n }\n }\n\n getFormattedOptions(configurationOptions: { label: string; value: any }[]): OptionType[] {\n return configurationOptions.map(({ value, label }) => ({\n value,\n displayValue: label,\n }));\n }\n\n isValidRow([language, editorOption]: [CodeEditorLanguages, CodingAssistanceOptions]) {\n if (\n language !== CodeEditorLanguages.Javascript &&\n language !== CodeEditorLanguages.Typescript &&\n (editorOption === CodingAssistanceOptions.AutoComplete ||\n editorOption === CodingAssistanceOptions.ErrorHighlighting)\n ) {\n return false;\n }\n return true;\n }\n}\n","<tgo-code-panel\n [openPanel]=\"configurationsPanelOpen$ | async\"\n [heading]=\"translations['HEADINGS']['CONFIGURATIONS']\"\n (closeEvent)=\"closeConfigPanel()\"\n>\n <form [formGroup]=\"configForm\" class=\"configs\">\n <div id=\"formatting\" *ngIf=\"formattingOptions\">\n <h3>{{ translations['HEADINGS']['FORMATTING'] }}</h3>\n <ng-container\n [ngTemplateOutlet]=\"config\"\n [ngTemplateOutletContext]=\"{ data: formattingOptions, inputType: 'dropdown' }\"\n ></ng-container>\n </div>\n <div id=\"codingAssistance\" *ngIf=\"codingAssistanceOptions\">\n <h3>{{ translations['HEADINGS']['CODING_ASSISTANCE'] }}</h3>\n <ng-container\n [ngTemplateOutlet]=\"config\"\n [ngTemplateOutletContext]=\"{\n data: codingAssistanceOptions,\n inputType: 'toggle'\n }\"\n ></ng-container>\n </div>\n <ng-template #config let-configData=\"data\" let-inputType=\"inputType\">\n <ng-container *ngIf=\"language$ | async as language\">\n <ng-container *ngFor=\"let row of configData | keyvalue\">\n <div\n class=\"config-row\"\n *ngIf=\"[language, row.key] | memoizeFunc: isValidRow\"\n [class.config-row-toggle]=\"inputType === 'toggle'\"\n >\n <p class=\"config-name\">{{ row.key }}</p>\n <ui-dropdown\n *ngIf=\"inputType === 'dropdown'\"\n class=\"config-dropdown\"\n [formControlName]=\"row.key\"\n [valueList]=\"row.value | memoizeFunc: getFormattedOptions\"\n [allowClear]=\"false\"\n [applicationTheme]=\"applicationTheme\"\n [showBottomContent]=\"false\"\n (change)=\"trackConfigChange(row.key)\"\n ></ui-dropdown>\n <ui-toggle\n *ngIf=\"inputType === 'toggle'\"\n [applicationTheme]=\"applicationTheme\"\n [formControlName]=\"row.key\"\n (toggle)=\"trackConfigChange(row.key)\"\n class=\"config-toggle\"\n [class.config-toggle-company-colored]=\"!!companyColor\"\n [style.--toggle-checked-color]=\"companyColor\"\n ></ui-toggle>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </form>\n</tgo-code-panel>\n","export type CustomTestCase = {\n localId?: number;\n name: string;\n // input is optional for sql test cases\n input?: string;\n expectedOutput: string;\n preloaded: boolean;\n};\n\nexport type ExampleTestCase = CustomTestCase & {\n id: number;\n};\n\nexport type TestCaseResult = {\n actualOutput: string;\n logs: string;\n status: TestCaseStatus;\n};\n\nexport type AllowedModificationFields = {\n input: string;\n expectedOutput: string;\n};\n\nexport enum TestCaseStatus {\n Passed = 'passed',\n Error = 'error',\n Empty = 'empty',\n}\n\nexport interface TestCaseDeletionData {\n index: number;\n action: TestCaseDeletionAction;\n}\n\nexport const enum TestCaseDeletionAction {\n Try = 'try',\n Confirm = 'confirm',\n}\n\nexport interface LATFormattedTestCases {\n input: string;\n solution: string;\n}\n\nexport interface SqlTestCase {\n id?: number;\n name: string;\n category: CategorySqlTestCaseEnum;\n /** Expected test case result */\n result?: string;\n initial_sql?: string;\n /** Previous sql query for checking */\n pre_sql?: string;\n /** Post sql query for checking */\n post_sql?: string;\n}\n\nexport interface Testcase {\n id?: number;\n name: string;\n input?: string;\n solution?: string;\n points?: number;\n}\n\nexport interface GroupedTestCasesResult {\n custom: { failed: number; passed: number },\n example: { failed: number; passed: number }\n}\n\ntype CategorySqlTestCaseEnum =\n 'user' |\n 'validation';\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { IconLabelComponentModule } from '@testgorilla/tgo-ui';\nimport { TestCaseStatus } from '../../../models/test-cases';\n\n@Component({\n selector: 'tgo-test-cases-status',\n templateUrl: './test-cases-status.component.html',\n styleUrls: ['./test-cases-status.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [IconLabelComponentModule]\n})\nexport class TestCasesStatusComponent {\n @Input() status: TestCaseStatus;\n @Input() translations: Record<string, unknown>;\n\n readonly TestCaseStatus = TestCaseStatus;\n}\n","@switch (status) { @case (TestCaseStatus.Passed) {\n<div class=\"test-case-status test-case-status-passed\">\n <ui-icon-label class=\"label-icon\" [iconName]=\"'Check'\" [iconSize]=\"'16'\" [text]=\"translations['PASSED']\">\n </ui-icon-label>\n</div>\n} @case (TestCaseStatus.Error) {\n<div class=\"test-case-status test-case-status-error\">\n <ui-icon-label class=\"label-icon\" [iconName]=\"'Close'\" [iconSize]=\"'16'\" [text]=\"translations['ERROR']\">\n </ui-icon-label>\n</div>\n} @case (TestCaseStatus.Empty) {\n<div class=\"test-case-status test-case-status-empty\">\n <ui-icon-label class=\"label-icon\" [iconName]=\"'Help'\" [iconSize]=\"'16'\" [text]=\"translations['EMPTY']\">\n </ui-icon-label>\n</div>\n} }\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MemoizeFuncPipe } from '../../../pipes/memoize-func.pipe';\n\nconst DEFAULT_MAX_CHARACTERS = 135;\n\n@Component({\n selector: 'tgo-truncated-text',\n templateUrl: './truncated-text.component.html',\n styleUrls: ['./truncated-text.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, MemoizeFuncPipe]\n})\nexport class TruncatedTextComponent implements OnChanges {\n @Input() text = '';\n @Input() maxChars = DEFAULT_MAX_CHARACTERS;\n @Input() isWordWrap = false;\n\n isTruncated: boolean;\n\n ngOnChanges({ text }: SimpleChanges): void {\n if (text?.firstChange && text?.currentValue) {\n this.isTruncated = this.text.length > this.maxChars;\n }\n }\n\n getShownText([isTruncated, fullText]: [boolean, string]): string {\n // todo: add as an improvement:\n // If the first line contains only a few characters, it would be good to truncate the second line to ~55 characters // Anna\n return isTruncated ? `${this.text.slice(0, this.maxChars)}... ` : fullText;\n }\n\n toggleTruncation() {\n this.isTruncated = !this.isTruncated;\n }\n}\n","<div class=\"text-container\" [class.text-container-word-wrap]=\"isWordWrap\">\n <span class=\"text\" [class.expanded]=\"!isTruncated\"\n >{{ [isTruncated, text] | memoizeFunc: getShownText : this\n }}<a class=\"show-more-link\" *ngIf=\"isTruncated\" (click)=\"toggleTruncation()\">Show more</a></span\n >\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { ApplicationTheme, FieldComponentModule } from '@testgorilla/tgo-ui';\nimport {\n AllowedModificationFields,\n CustomTestCase,\n ExampleTestCase,\n TestCaseResult,\n TestCaseStatus,\n} from '../../../models/test-cases';\nimport { MemoizeFuncPipe } from '../../../pipes/memoize-func.pipe';\nimport { TruncatedTextComponent } from '../../common/truncated-text/truncated-text.component';\nimport { TestCasesStatusComponent } from '../test-cases-status/test-cases-status.component';\n\n@UntilDestroy()\n@Component({\n selector: 'tgo-test-cases-content',\n templateUrl: './test-cases-content.component.html',\n styleUrls: ['./test-cases-content.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FieldComponentModule,\n MemoizeFuncPipe,\n TruncatedTextComponent,\n TestCasesStatusComponent,\n ]\n})\nexport class TestCasesContentComponent implements OnInit, OnChanges {\n private readonly fb = inject(FormBuilder);\n \n @Input() testCase: ExampleTestCase | CustomTestCase;\n @Input() testCaseResult: TestCaseResult;\n @Input() areTestsRun: boolean;\n @Input() translations: Record<string, unknown>;\n @Input() applicationTheme: ApplicationTheme;\n @Input() isSQL: boolean;\n\n @Output() valueChange = new EventEmitter<AllowedModificationFields>();\n\n isCustomTestCase: boolean;\n // todo: add validators when backend implements validation on their side\n form = this.fb.group({\n input: new FormControl<string>(''),\n expectedOutput: new FormControl<string>(''),\n });\n\n ngOnInit(): void {\n if (this.testCase?.input && this.testCase?.expectedOutput) {\n this.form.patchValue({\n input: this.testCase.input,\n expectedOutput: this.testCase.expectedOutput,\n });\n }\n\n if (this.testCase?.preloaded) {\n this.form.disable();\n }\n\n this.listenFormChanges();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.testCase?.currentValue) {\n this.form.patchValue({\n input: this.testCase.input,\n expectedOutput: this.testCase.expectedOutput,\n });\n if (this.testCase.preloaded) {\n this.form.disable();\n } else {\n this.form.enable();\n }\n\n this.isCustomTestCase = !this.testCase.preloaded;\n }\n }\n\n isEmptyTestCase(status: TestCaseStatus): boolean {\n return status === TestCaseStatus.Empty;\n }\n\n private listenFormChanges(): void {\n this.form.valueChanges.pipe(untilDestroyed(this)).subscribe((value: AllowedModificationFields) => {\n this.valueChange.emit(value);\n });\n }\n}\n","@if (testCase) {\n<div class=\"test-cases-content\" [class.test-cases-content-tests-run]=\"areTestsRun\">\n @if (areTestsRun && isCustomTestCase && (testCaseResult?.status | memoizeFunc: isEmptyTestCase)) {\n <div class=\"custom-tests-hint-container\">\n <p class=\"custom-tests-info\">{{ translations['BOTH_FIELDS_MUST_BE_FILLED'] }}</p>\n </div>\n } @if (!isCustomTestCase && !areTestsRun) {\n <p class=\"custom-tests-info custom-tests-info-indented\">\n {{ translations['EXAMPLE_TEST_CASE_INFO'] }}\n </p>\n } @if (isCustomTestCase && (!testCaseResult || (testCaseResult?.status | memoizeFunc: isEmptyTestCase))) {\n <p class=\"custom-tests-info custom-tests-info-indented\">\n {{ translations['FILL_ALL_FIELDS'] }}\n </p>\n } @if (testCaseResult && !(testCaseResult?.status | memoizeFunc: isEmptyTestCase)) {\n <div class=\"custom-tests-logs\">\n <div class=\"custom-tests-log-row\">\n <h4 class=\"custom-tests-log-header\">{{ translations['LOG'] }}</h4>\n <div class=\"custom-tests-log-content\">\n <tgo-truncated-text [text]=\"testCaseResult.logs\" class=\"custom-tests-info\"></tgo-truncated-text>\n </div>\n </div>\n @if (isSQL) {\n <div class=\"custom-tests-log-row custom-tests-log-row-cols\">\n <div class=\"custom-tests-log-col custom-tests-log-col-expected-query\">\n <div class=\"custom-tests-log-heading\">\n <h4 class=\"custom-tests-log-header\">{{ translations['EXPECTED_QUERY'] }}</h4>\n </div>\n <div class=\"custom-tests-log-content\">\n <tgo-truncated-text\n [text]=\"testCase.expectedOutput\"\n [isWordWrap]=\"true\"\n class=\"custom-tests-info\"\n ></tgo-truncated-text>\n </div>\n </div>\n <div class=\"custom-tests-log-col\">\n <div class=\"custom-tests-log-heading\">\n <h4 class=\"custom-tests-log-header\">{{ translations['QUERY_RESULT'] }}</h4>\n <tgo-test-cases-status\n [status]=\"testCaseResult.status\"\n [translations]=\"translations['STATUSES']\"\n ></tgo-test-cases-status>\n </div>\n <div class=\"custom-tests-log-content\">\n <tgo-truncated-text\n [text]=\"testCaseResult.actualOutput\"\n [isWordWrap]=\"true\"\n class=\"custom-tests-info\"\n ></tgo-truncated-text>\n </div>\n </div>\n </div>\n } @else {\n <div class=\"custom-tests-log-row\">\n <div class=\"custom-tests-log-heading\">\n <h4 class=\"custom-tests-log-header\">{{ translations['OUTPUT'] }}</h4>\n <tgo-test-cases-status\n [status]=\"testCaseResult.status\"\n [translations]=\"translations['STATUSES']\"\n ></tgo-test-cases-status>\n </div>\n <div class=\"custom-tests-log-content\">\n <tgo-truncated-text [text]=\"testCaseResult.actualOutput\" class=\"custom-tests-info\"></tgo-truncated-text>\n </div>\n </div>\n }\n </div>\n } @if (!isSQL) {\n <form [formGroup]=\"form\">\n <div class=\"custom-tests-inputs-container\">\n <ui-field\n class=\"custom-tests-input\"\n [label]=\"translations['INPUT']\"\n [type]=\"'multi-line'\"\n [disabled]=\"testCase.preloaded\"\n [maxRows]=\"3\"\n [applicationTheme]=\"applicationTheme\"\n formControlName=\"input\"\n ></ui-field>\n <ui-field\n class=\"custom-tests-input\"\n [label]=\"translations['EXPECTED_OUTPUT']\"\n [type]=\"'multi-line'\"\n [maxRows]=\"3\"\n [disabled]=\"testCase.preloaded\"\n [applicationTheme]=\"applicationTheme\"\n formControlName=\"expectedOutput\"\n ></ui-field>\n </div>\n </form>\n }\n</div>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatTabGroup, MatTabsModule } from '@angular/material/tabs';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { filter } from 'rxjs';\nimport { ApplicationTheme, IconComponentModule, ButtonComponentModule } from '@testgorilla/tgo-ui';\nimport {\n AllowedModificationFields,\n CustomTestCase,\n ExampleTestCase,\n TestCaseDeletionAction,\n TestCaseResult,\n TestCaseStatus,\n} from '../../../models/test-cases';\nimport { LibCodingTestService } from '../../../services/lib-coding-test.service';\nimport { StorageCodingService } from '../../../services/storage.service';\nimport { TestCasesService } from '../../../services/test-cases.service';\nimport { TestCasesStatusComponent } from '../test-cases-status/test-cases-status.component';\nimport { TestCasesContentComponent } from '../test-cases-content/test-cases-content.component';\n\n@UntilDestroy()\n@Component({\n selector: 'tgo-test-cases',\n templateUrl: 'test-cases.component.html',\n styleUrls: ['test-cases.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n MatTabsModule,\n IconComponentModule,\n ButtonComponentModule,\n TestCasesStatusComponent,\n TestCasesContentComponent,\n ]\n})\nexport class TestCasesComponent implements OnInit, OnChanges {\n @Input() exampleTestCases: ExampleTestCase[];\n @Input() apiTestCasesResult: TestCaseResult[];\n @Input() testCasesStatus: any;\n @Input() testCases: (CustomTestCase | ExampleTestCase)[];\n @Input() translations: Record<string, unknown>;\n @Input() areTestsRun: boolean;\n @Input() applicationTheme: ApplicationTheme;\n @Input() canAddCustomTestCases: boolean;\n @Input() isSQL: boolean;\n\n @ViewChild('tabGroup') tabGroup: MatTabGroup;\n\n testCasesResult: TestCaseResult[];\n\n activeTestCaseIndex: number | null;\n maxTestCasesAllowed = 6; //Could be taken from backend\n\n isAddTestCasesDisabled: boolean;\n isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n isContentViewOpened: boolean;\n\n constructor(\n private libCodingTestService: LibCodingTestService,\n private changeDetectorRef: ChangeDetectorRef,\n private testCasesService: TestCasesService,\n private StorageCodingService: StorageCodingService\n ) {}\n\n ngOnInit() {\n this.testCasesService.activeTestCaseIndex$.pipe(untilDestroyed(this)).subscribe(index => {\n this.activeTestCaseIndex = index;\n });\n\n this.setDefaultTestCases();\n if (this.canAddCustomTestCases) {\n this.updateAddCustomTestCaseDisabled();\n this.listenTestCaseDeletion();\n }\n }\n\n ngOnChanges({ apiTestCasesResult }: SimpleChanges): void {\n if (!apiTestCasesResult) {\n return;\n }\n const apiTestCases: TestCaseResult[] = apiTestCasesResult.currentValue;\n\n if (apiTestCases) {\n this.testCasesResult = apiTestCases.length ? this.handleEmptyTestCases(apiTestCases) : [];\n }\n }\n\n private setDefaultTestCases() {\n if (!this.testCases.length) {\n this.testCases = [...(this.exampleTestCases || [])];\n this.onTestCasesChanged();\n this.setActiveTestCaseIndex(this.isMobile ? null : 0);\n }\n }\n\n addTestCase(): void {\n const testCaseLocalId = this.testCasesService.createTestCaseLocalId();\n\n this.testCases.push({\n localId: testCaseLocalId,\n name: `Test ${testCaseLocalId}`,\n input: '',\n expectedOutput: '',\n preloaded: false,\n });\n this.onTestCasesChanged();\n this.testCasesService.setActiveTestCase(this.testCases.length - 1);\n this.isContentViewOpened = this.isMobile;\n this.updateAddCustomTestCaseDisabled();\n\n if (!this.isMobile) {\n this.setFocus();\n }\n }\n\n removeTestCase(index: number): void {\n this.libCodingTestService.handleTestCaseDeletion(index);\n }\n\n modifyTestCase(index: number, modifiedValue: AllowedModificationFields): void {\n if (!this.testCases[index].preloaded) {\n this.testCases[index].input = modifiedValue.input;\n this.testCases[index].expectedOutput = modifiedValue.expectedOutput;\n this.onTestCasesChanged();\n }\n }\n\n private setFocus() {\n const tabHeaderId = `mat-tab-label-${this.tabGroup['_groupId']}-${this.activeTestCaseIndex}`;\n const tabHeaderElement: HTMLElement = document.getElementById(tabHeaderId);\n if (tabHeaderElement) {\n tabHeaderElement.focus();\n }\n }\n\n private onTestCasesChanged() {\n this.libCodingTestService.updateTestCases([...this.testCases]);\n this.StorageCodingService.updateTestCases([...this.testCases]);\n }\n\n setActiveTestCaseIndex(index: number): void {\n this.testCasesService.setActiveTestCase(index);\n this.isContentViewOpened = index !== null ? this.isMobile : false;\n }\n\n closeTestCaseMobileView(): void {\n this.isContentViewOpened = false;\n this.testCasesService.setActiveTestCase(null);\n }\n\n private listenTestCaseDeletion(): void {\n this.libCodingTestService.testCaseDeletion$\n .pipe(\n filter(({ action }) => action === TestCaseDeletionAction.Confirm),\n untilDestroyed(this)\n )\n .subscribe(({ index }) => {\n this.testCases.splice(index, 1);\n this.testCasesResult.splice(index, 1);\n this.onTestCasesChanged();\n\n if (this.isMobile) {\n this.closeTestCaseMobileView();\n } else {\n this.testCasesService.setActiveTestCase(index - 1);\n }\n\n this.updateAddCustomTestCaseDisabled();\n this.changeDetectorRef.detectChanges();\n });\n }\n\n private handleEmptyTestCases(apiTestCasesResults: TestCaseResult[]): TestCaseResult[] {\n const testCasesResult = [...apiTestCasesResults];\n\n this.testCases.forEach(({ input, expectedOutput }, index) => {\n const isEmpty = this.isSQL ? !expectedOutput : !input || !expectedOutput;\n if (isEmpty) {\n testCasesResult.splice(index, 0, {\n actualOutput: null,\n logs: null,\n status: TestCaseStatus.Empty,\n });\n }\n });\n\n return testCasesResult;\n }\n\n private updateAddCustomTestCaseDisabled(): void {\n const exampleTestCasesCount = this.exampleTestCases?.length || 0;\n this.isAddTestCasesDisabled = this.testCases.length - exampleTestCasesCount < this.maxTestCasesAllowed;\n }\n}\n","<div class=\"test-case-container\">\n <div\n id=\"test-cases\"\n class=\"test-case-tabs-wrapper\"\n [ngClass]=\"{\n 'test-case-tabs-wrapper-tests-run': areTestsRun,\n 'test-case-tabs-wrapper-mobile': isMobile,\n 'test-case-tabs-wrapper-hidden': isContentViewOpened\n }\"\n >\n @if (!isMobile) {\n <mat-tab-group\n #tabGroup\n class=\"test-cases-tabs\"\n [selectedIndex]=\"activeTestCaseIndex\"\n (selectedIndexChange)=\"setActiveTestCaseIndex($event)\"\n >\n @for (testCase of testCases; track testCase; let index = $index) {\n <mat-tab label=\"{{ testCase.name }}\">\n <ng-template mat-tab-label>\n <div class=\"tab-label-wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"testCaseHeading\"\n [ngTemplateOutletContext]=\"{ testCase: testCase, index: index }\"\n ></ng-container>\n </div>\n </ng-template>\n </mat-tab>\n }\n </mat-tab-group>\n } @else {\n <div class=\"test-cases-tabs test-cases-tabs-mobile\">\n @for (testCase of testCases; track testCase; let index = $index) {\n <div class=\"tab-label-wrapper\" (click)=\"setActiveTestCaseIndex(index)\">\n <div class=\"test-case-name-status-wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"testCaseHeading\"\n [ngTemplateOutletContext]=\"{ testCase: testCase, index: index }\"\n ></ng-container>\n </div>\n @if (isMobile) {\n <ui-icon [name]=\"'Arrow-chevron-right-filled'\" [size]=\"'24'\" class=\"themed-button\"></ui-icon>\n }\n </div>\n }\n </div>\n } @if (canAddCustomTestCases) {\n <ui-button\n class=\"add-test-case themed-button\"\n [variant]=\"'tertiary'\"\n [iconName]=\"'Plus'\"\n [iconPosition]=\"'left'\"\n [disabled]=\"!isAddTestCasesDisabled\"\n [fullWidth]=\"true\"\n [tooltip]=\"!isAddTestCasesDisabled ? translations['TOOLTIPS']['CANT_ADD_TEST_CASE'] : null\"\n [label]=\"\n translations['TEST_RESULTS']['TEST_CASES']['ADD_TEST_CASE'] +\n ' (' +\n (testCases?.length - exampleTestCases?.length) +\n '/' +\n maxTestCasesAllowed +\n ')'\n \"\n (buttonClickEvent)=\"addTestCase()\"\n >\n </ui-button>\n }\n </div>\n\n @if (!isMobile) {\n <div class=\"test-case-content-wrapper\">\n <ng-container [ngTemplateOutlet]=\"testCasesContentTpl\"></ng-container>\n </div>\n } @if (isMobile && isContentViewOpened) {\n <div class=\"test-case-content-wrapper-mobile\">\n <div class=\"test-case-mobile-name-wrapper\">\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n [tooltip]=\"''\"\n [size]=\"'small'\"\n (buttonClickEvent)=\"closeTestCaseMobileView()\"\n class=\"themed-button\"\n >\n </ui-button>\n <ng-container\n [ngTemplateOutlet]=\"testCaseHeading\"\n [ngTemplateOutletContext]=\"{\n testCase: testCases[activeTestCaseIndex],\n index: activeTestCaseIndex,\n hideStatus: true\n }\"\n ></ng-container>\n </div>\n <ng-container [ngTemplateOutlet]=\"testCasesContentTpl\"></ng-container>\n </div>\n }\n</div>\n\n<ng-template #testCaseHeading let-testCase=\"testCase\" let-index=\"index\" let-hideStatus=\"hideStatus\">\n <div class=\"tab-label\">\n @if (testCase.preloaded) {\n <ui-icon [name]=\"'Lock'\" class=\"preloaded-icon\"></ui-icon>\n }\n <span class=\"tab-label-value\">{{ testCase.name }}</span>\n </div>\n\n @if (!hideStatus && testCasesResult?.length) {\n <tgo-test-cases-status\n [status]=\"testCasesResult?.[index]?.status\"\n [translations]=\"translations['TEST_RESULTS']['TEST_CASES']['STATUSES']\"\n ></tgo-test-cases-status>\n } @if (!testCase.preloaded) {\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Delete'\"\n [tooltip]=\"translations['TOOLTIPS']['DELETE_TEST_CASE'] || ''\"\n (buttonClickEvent)=\"removeTestCase(index)\"\n class=\"delete-test-case themed-button\"\n >\n </ui-button>\n }\n</ng-template>\n\n<ng-template #testCasesContentTpl>\n <tgo-test-cases-content\n [testCase]=\"testCases[activeTestCaseIndex]\"\n [testCaseResult]=\"testCasesResult?.[activeTestCaseIndex]\"\n [areTestsRun]=\"areTestsRun\"\n [translations]=\"translations['TEST_RESULTS']['TEST_CASES']\"\n [isSQL]=\"isSQL\"\n [applicationTheme]=\"applicationTheme\"\n (valueChange)=\"modifyTestCase(activeTestCaseIndex, $event)\"\n ></tgo-test-cases-content>\n</ng-template>\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { debounceTime, distinctUntilChanged, map, of } from 'rxjs';\nimport { ApplicationTheme, ButtonComponentModule, ProgressBarComponentModule } from '@testgorilla/tgo-ui';\nimport { CustomTestCase, ExampleTestCase } from '../../models/test-cases';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';\nimport { TestCasesComponent } from './test-cases/test-cases.component';\n\n@UntilDestroy()\n@Component({\n selector: 'tgo-code-test-results',\n templateUrl: 'test-results.component.html',\n styleUrls: ['test-results.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ButtonComponentModule,\n ProgressBarComponentModule,\n MemoizeFuncPipe,\n TestCasesComponent,\n ],\n animations: [\n trigger('slideInOut', [\n transition(':enter', [\n style({ transform: 'translateY(100%)', opacity: '0' }),\n animate('500ms ease', style({ transform: 'translateY(0)', opacity: '1' })),\n ]),\n ]),\n ]\n})\nexport class TestResultsComponent implements OnInit {\n @Input() companyColor: string;\n @Input() testCasesStatus: any;\n @Input() loading: boolean;\n @Input() runTestResponse = [];\n @Input() translations: Record<string, unknown>;\n @Input() isLAT = false;\n @Input() isSQL = false;\n @Input() exampleTestCases: ExampleTestCase[];\n @Input() canChangeProgrammingLang: boolean;\n @Input() showTestCases: boolean;\n @Input() canAddCustomTestCases: boolean;\n @Input() applicationTheme: ApplicationTheme;\n\n @Output() runTestClick = new EventEmitter<boolean>();\n\n runTestFirstClick = false;\n emptySpaceRegex = /^\\s*$/;\n disableRun$ = of(false);\n\n constructor(\n private libCodingTestService: LibCodingTestService,\n private changeDetectorRef: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n if (this.isLAT) {\n if (this.canChangeProgrammingLang) {\n this.listenLanguageChange();\n }\n } else {\n this.disableRun$ = this.libCodingTestService.codeChange$.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n map(code => !!code.match(this.emptySpaceRegex)),\n untilDestroyed(this)\n );\n }\n }\n\n trackByFunction(index: number, item: any): any {\n return item;\n }\n\n runTest() {\n this.runTestClick.emit(true);\n if (!this.runTestFirstClick) {\n this.runTestFirstClick = true;\n }\n }\n\n getTestCases([canAddCustomTestCases]: [boolean]): (ExampleTestCase | CustomTestCase)[] {\n const savedTestCases = this.libCodingTestService.getTestCases() ?? [];\n return canAddCustomTestCases ? savedTestCases : [];\n }\n\n private listenLanguageChange(): void {\n this.libCodingTestService.currentLanguage$.pipe(untilDestroyed(this)).subscribe(() => {\n this.runTestFirstClick = false;\n this.runTestResponse = [];\n this.changeDetectorRef.detectChanges();\n });\n }\n}\n","<div class=\"test-output\" [class.test-output-lat]=\"isLAT\">\n <div>\n <div class=\"barra\">\n <h3 class=\"barra-title\">{{ translations['HEADINGS']['TESTS'] }}</h3>\n <ui-button\n [size]=\"'small'\"\n [variant]=\"'primary'\"\n [label]=\"translations['TEST_RESULTS']['RUN_TESTS']\"\n [iconPosition]=\"'left'\"\n [iconName]=\"'Play-filled'\"\n [companyColor]=\"companyColor ? companyColor : '#46a997'\"\n [disabled]=\"this.loading || (disableRun$ | async)\"\n (buttonClickEvent)=\"runTest()\"\n class=\"run-test-btn\"\n ></ui-button>\n </div>\n @if (showTestCases && loading) {\n <ui-progress-bar [mode]=\"'query'\" class=\"progress-bar\"></ui-progress-bar>\n }\n </div>\n @if (!showTestCases) {\n <div class=\"html\">\n @if (!this.loading) { @if (runTestResponse.length !== 0) {\n <div>\n <!-- todo: remove legacy non-testcase view after sunsetting of the old flow -->\n @if (isSQL) {\n <div class=\"response-message\">\n <span>{{ runTestResponse[0]['response_msg'] }}</span>\n </div>\n @for (returnTest of runTestResponse; track trackByFunction($index, returnTest); let isLast = $last) {\n <div class=\"test-case-block\">\n @if (returnTest.content) {\n <div class=\"test-validation\">\n <span class=\"title\">{{ translations['TEST_RESULTS']['TEST_CASES']['TEST_VALIDATION'] }}</span>\n <span class=\"result\">{{ returnTest.content }}</span>\n </div>\n }\n <div class=\"sql-stdout\" [class.no-border]=\"isLast\">\n <span class=\"title\">{{ translations['TEST_RESULTS']['TEST_CASES']['RESULT'] }}</span>\n <span\n [ngClass]=\"{\n result: true,\n passed: returnTest.test_result === 'OK',\n error: returnTest.test_result !== 'OK' || returnTest.stderr\n }\"\n >{{ returnTest.stderr ? returnTest.stderr : returnTest.stdout[0] }}</span\n >\n @if (returnTest.test_result === 'OK') {\n <span class=\"result passed\">OK</span>\n } @else {\n <span class=\"title error\">{{ translations['TEST_RESULTS']['TEST_CASES']['EXPECTED'] }}</span>\n <span class=\"result\">{{ returnTest.test_result }}</span>\n }\n </div>\n </div>\n } } @else { @for (returnTest of runTestResponse; track returnTest) {\n <div>\n <span>{{ returnTest['response_msg'] }}</span>\n <br />\n <span>{{ returnTest['stderr'] }}</span>\n <br />\n @for (item of returnTest['stdout']; track item; let j = $index) {\n <div class=\"stdout\">\n @if (item?.includes('@@')) {\n <span class=\"result\">{{ item.replace('@@', '').replace('@@', '').trim() }}</span>\n } @if (item?.includes('##')) {\n <span class=\"passed\">{{ item.replace('##', '').replace('##', '').trim() }}</span>\n } @if (item?.includes('$$')) {\n <span class=\"error\">{{ item.replace('$$', '').replace('$$', '').trim() }}</span>\n } @if (!item?.includes('~~') && !item?.includes('@@') && !item?.includes('##') && !item?.includes('$$')) {\n <span class=\"info\">{{ item?.trim() }}</span>\n }\n </div>\n }\n <br />\n </div>\n } }\n </div>\n } @else {\n <span>\n {{\n this.loading ? translations['TEST_RESULTS']['TESTS_RUNNING'] : translations['TEST_RESULTS']['TESTS_CHECK']\n }}</span\n >\n } } @else {\n <ui-progress-bar class=\"progress-bar\" [mode]=\"'query'\"></ui-progress-bar>\n }\n </div>\n } @else { @if (!loading) {\n <div class=\"LAT-tests\" [class.LAT-tests-with-status]=\"runTestFirstClick\">\n <tgo-test-cases\n [exampleTestCases]=\"exampleTestCases\"\n [testCases]=\"[canAddCustomTestCases, loading] | memoizeFunc: getTestCases : this\"\n [apiTestCasesResult]=\"runTestResponse\"\n [testCasesStatus]=\"testCasesStatus\"\n [translations]=\"translations\"\n [areTestsRun]=\"runTestFirstClick\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [applicationTheme]=\"applicationTheme\"\n [isSQL]=\"isSQL\"\n ></tgo-test-cases>\n </div>\n } }\n <div class=\"status\">\n @if (runTestFirstClick) {\n <div @slideInOut class=\"status-child\">\n @if (testCasesStatus) {\n <p class=\"passed\">\n {{ translations['TEST_RESULTS']['PASSED'] + testCasesStatus['ok'] }}\n </p>\n <p class=\"error\">\n {{ translations['TEST_RESULTS']['ERROR'] + testCasesStatus['error'] }}\n </p>\n <p>{{ translations['TEST_RESULTS']['TOTAL'] + testCasesStatus['total'] }}</p>\n }\n </div>\n }\n </div>\n</div>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport {\n animationFrameScheduler,\n concat,\n debounceTime,\n distinctUntilChanged,\n map,\n Observable,\n observeOn,\n of,\n} from 'rxjs';\nimport { AngularSplitModule } from 'angular-split';\nimport { ApplicationTheme } from '@testgorilla/tgo-ui';\n\nimport { LATLanguages } from '../../models/lat-languages';\nimport { ExampleTestCase } from '../../models/test-cases';\nimport { resizeElement } from '../../utils/resize-element';\nimport {\n CodeEditorFuncParam,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from '../code-editor/helpers/code-editor-helper.model';\nimport { PasteData } from '../code-editor/models/code-editor.model';\nimport { CodingSectionComponent } from '../coding-section/coding-section.component';\nimport { ConfigurationsComponent } from '../configurations/configurations.component';\nimport { TestResultsComponent } from '../tests/test-results.component';\n\n@UntilDestroy()\n@Component({\n selector: 'tgo-runnable-editor',\n templateUrl: './runnable-editor.component.html',\n styleUrls: ['./runnable-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AngularSplitModule,\n CodingSectionComponent,\n ConfigurationsComponent,\n TestResultsComponent,\n ]\n})\nexport class RunnableEditorComponent implements AfterViewInit {\n @Input() initCode: string;\n @Input() functionParams: CodeEditorFuncParam[];\n @Input() functionName: string;\n @Input() returnType: keyof CodeEditorTypesMap;\n @Input() isFullViewMode: boolean;\n @Input() isLAT: boolean;\n @Input() isSQL: boolean;\n @Input() canAddCustomTestCases: boolean;\n @Input() hideTestCases: boolean;\n @Input() languages: LATLanguages;\n @Input() shouldGenerateInitCode: boolean;\n @Input() autoHeight: boolean;\n @Input() translations: Record<string, unknown>;\n @Input() questionText: string;\n @Input() companyColor: string;\n @Input() testCasesStatus: any;\n @Input() loading: boolean;\n @Input() runTestResponse = [];\n @Input() exampleTestCases: ExampleTestCase[];\n @Input() isRunnableWithLangSelector: boolean;\n @Input() applicationTheme: ApplicationTheme;\n\n @Output() pasteEvent = new EventEmitter<PasteData>();\n @Output() codeChange = new EventEmitter<string>();\n @Output() runTestClick = new EventEmitter<boolean>();\n @Output() languageChange = new EventEmitter<CodeEditorLanguages>();\n\n @ViewChild('codingTestsSplit', { read: ElementRef }) codingTestsSplitRef: ElementRef;\n @ViewChild('testsSplitArea', { read: ElementRef }) testsSplitAreaRef: ElementRef;\n\n minTestsSplitHeight: number;\n currentIdeSplitHeight = 55;\n currentTestsSplitHeight = 45;\n\n MIN_TESTS_HEIGHT_PX = 119;\n MIN_LAT_TESTS_HEIGHT_PX = 202;\n GUTTER_SIZE = 1;\n\n isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n constructor(private changeDetectorRef: ChangeDetectorRef) {}\n\n ngAfterViewInit(): void {\n if (this.isMobile) {\n return;\n }\n\n if (this.isFullViewMode) {\n this.setCodingSplitListener();\n } else {\n const { offsetHeight: height } = this.codingTestsSplitRef.nativeElement;\n this.minTestsSplitHeight = this.getMinTestsPercentHeight(height);\n }\n }\n\n /* listens to area height changes and calculates the maximum % size of coding window area */\n private setCodingSplitListener(): void {\n concat(this.getInitialMaxHeight$(), resizeElement(this.codingTestsSplitRef.nativeElement))\n .pipe(\n observeOn(animationFrameScheduler),\n debounceTime(300),\n map(({ contentRect: { height } }) => height),\n distinctUntilChanged(),\n untilDestroyed(this)\n )\n .subscribe(height => {\n this.calculateCurrentHeights(height);\n\n this.changeDetectorRef.detectChanges();\n });\n }\n\n private calculateCurrentHeights(fullHeight: number): void {\n const { offsetHeight: testsSplitHeight } = this.testsSplitAreaRef.nativeElement;\n this.minTestsSplitHeight = this.getMinTestsPercentHeight(fullHeight);\n\n let testsPercentHeight = this.getPercentHeightFromWhole(fullHeight, testsSplitHeight);\n\n if (testsPercentHeight < this.minTestsSplitHeight) {\n testsPercentHeight = this.minTestsSplitHeight;\n }\n\n this.currentTestsSplitHeight = testsPercentHeight;\n this.currentIdeSplitHeight = 100 - this.currentTestsSplitHeight;\n }\n\n private getInitialMaxHeight$(): Observable<any> {\n const { offsetHeight: height } = this.codingTestsSplitRef.nativeElement;\n return of({ contentRect: { height: this.getMinTestsPercentHeight(height) } });\n }\n\n private getPercentHeightFromWhole(fullHeight: number, areaHeight: number): number {\n return (areaHeight * 100) / (fullHeight - this.GUTTER_SIZE * 2);\n }\n\n private getMinTestsPercentHeight(height: number): number {\n const minTestsHeightPx = this.isLAT ? this.MIN_LAT_TESTS_HEIGHT_PX : this.MIN_TESTS_HEIGHT_PX;\n return (minTestsHeightPx * 100) / height;\n }\n}\n","<as-split\n *ngIf=\"!isMobile; else mobileTpl\"\n #codingTestsSplit\n class=\"as-split\"\n direction=\"vertical\"\n restrictMove=\"true\"\n [gutterSize]=\"GUTTER_SIZE\"\n>\n <as-split-area class=\"ide-split-area\" [size]=\"currentIdeSplitHeight\">\n <ng-container [ngTemplateOutlet]=\"ide\"></ng-container>\n </as-split-area>\n <as-split-area #testsSplitArea [size]=\"currentTestsSplitHeight\" [minSize]=\"minTestsSplitHeight\">\n <ng-container [ngTemplateOutlet]=\"tests\"></ng-container>\n </as-split-area>\n</as-split>\n\n<ng-template #mobileTpl>\n <div class=\"container-mobile\">\n <ng-container [ngTemplateOutlet]=\"ide\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"tests\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #ide>\n <div class=\"ide-container\">\n <tgo-coding-section\n class=\"coding-section\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [isFullViewMode]=\"isFullViewMode\"\n [isRunnableWithLangSelector]=\"isRunnableWithLangSelector\"\n [shouldGenerateInitCode]=\"shouldGenerateInitCode\"\n [isLAT]=\"isLAT\"\n [languages]=\"languages\"\n [autoHeight]=\"autoHeight\"\n [translations]=\"translations\"\n [isMobile]=\"isMobile\"\n [applicationTheme]=\"applicationTheme\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n ></tgo-coding-section>\n\n <tgo-code-configurations\n *ngIf=\"isFullViewMode\"\n [translations]=\"translations\"\n [companyColor]=\"companyColor\"\n [applicationTheme]=\"applicationTheme\"\n >\n </tgo-code-configurations>\n </div>\n</ng-template>\n\n<ng-template #tests>\n <div class=\"tests\" [class.tests-lat]=\"isLAT\">\n <tgo-code-test-results\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [runTestResponse]=\"runTestResponse\"\n [translations]=\"translations\"\n [exampleTestCases]=\"exampleTestCases\"\n [canChangeProgrammingLang]=\"languages?.length > 1\"\n [showTestCases]=\"isLAT || (isSQL && !hideTestCases)\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [applicationTheme]=\"applicationTheme\"\n (runTestClick)=\"runTestClick.emit($event)\"\n >\n </tgo-code-test-results>\n </div>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { map } from 'rxjs';\nimport { MatCardModule } from '@angular/material/card';\nimport { AngularSplitModule } from 'angular-split';\nimport { ApplicationTheme, ButtonComponentModule } from '@testgorilla/tgo-ui';\nimport { LATLanguages } from '../../models/lat-languages';\nimport { Modes } from '../../models/mode';\nimport { ExampleTestCase } from '../../models/test-cases';\nimport { Themes } from '../../models/theme';\nimport { ConfigurationsService } from '../../services/configurations.service';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport {\n CodeEditorFuncParam,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from '../code-editor/helpers/code-editor-helper.model';\nimport { PasteData } from '../code-editor/models/code-editor.model';\nimport { InstructionsComponent } from '../instructions/instructions.component';\nimport { RunnableEditorComponent } from '../runnable-editor/runnable-editor.component';\n\n@UntilDestroy()\n@Component({\n selector: 'tgo-coding-question',\n templateUrl: './coding-question.component.html',\n styleUrls: ['./coding-question.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n MatCardModule,\n AngularSplitModule,\n ButtonComponentModule,\n InstructionsComponent,\n RunnableEditorComponent,\n ]\n})\nexport class CodingQuestionComponent implements OnInit, OnDestroy {\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly libCodingTestService = inject(LibCodingTestService);\n private readonly configurationsService = inject(ConfigurationsService);\n \n @Input() initCode: string;\n @Input() functionParams: CodeEditorFuncParam[];\n @Input() functionName: string;\n @Input() returnType: keyof CodeEditorTypesMap;\n @Input() isLAT: boolean;\n @Input() isSQL: boolean;\n @Input() canAddCustomTestCases: boolean;\n @Input() languages: LATLanguages;\n @Input() autoHeight: boolean;\n @Input() translations: Record<string, unknown>;\n @Input() questionText: string;\n @Input() mode: Modes;\n @Input() companyColor: string;\n @Input() testCasesStatus: any;\n @Input() loading: boolean;\n @Input() hideTestCases: boolean;\n @Input() runTestResponse = [];\n @Input() exampleTestCases: ExampleTestCase[];\n @Input() applicationTheme: ApplicationTheme;\n\n @Output() pasteEvent = new EventEmitter<PasteData>();\n @Output() codeChange = new EventEmitter<string>();\n @Output() runTestClick = new EventEmitter<boolean>();\n @Output() languageChange = new EventEmitter<CodeEditorLanguages>();\n\n isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n isFullscreenMode: boolean;\n\n GUTTER_SIZE = 1;\n\n isDarkTheme$ = this.configurationsService.colorTheme$.pipe(map(theme => theme === Themes.Dark));\n\n ngOnInit(): void {\n this.libCodingTestService.isFullscreen$.pipe(untilDestroyed(this)).subscribe(isFullscreen => {\n this.isFullscreenMode = isFullscreen;\n });\n }\n\n ngOnDestroy(): void {\n this.configurationsService.setCodeComponentDestroyed(true);\n this.configurationsService.setColorTheme(Themes.Default);\n this.configurationsService.closeConfigPanel();\n }\n\n enableFullScreenMode(): void {\n this.libCodingTestService.setFullscreen(true);\n }\n}\n","<div\n *ngIf=\"!isMobile; else mobileTpl\"\n class=\"main-container\"\n [ngClass]=\"{ 'main-container-fullscreen': isFullscreenMode }\"\n>\n <mat-card appearance=\"outlined\" class=\"main-card\">\n <as-split class=\"as-split\" direction=\"horizontal\" [useTransition]=\"true\" [gutterSize]=\"GUTTER_SIZE\">\n <as-split-area size=\"38\" minSize=\"24\">\n <ng-container [ngTemplateOutlet]=\"instructions\"></ng-container>\n </as-split-area>\n <as-split-area size=\"62\" minSize=\"30\">\n <ng-container [ngTemplateOutlet]=\"runnableIde\"></ng-container>\n </as-split-area>\n </as-split>\n\n <ui-button\n *ngIf=\"!isFullscreenMode\"\n class=\"fullscreen-btn themed-button\"\n [variant]=\"'secondary'\"\n [iconName]=\"'Full-screen'\"\n [justIcon]=\"true\"\n [size]=\"'big'\"\n [applicationTheme]=\"applicationTheme\"\n [tooltip]=\"translations['TOOLTIPS']['MAXIMISE']\"\n [tooltipPosition]=\"'left'\"\n (buttonClickEvent)=\"enableFullScreenMode()\"\n >\n </ui-button>\n </mat-card>\n</div>\n\n<ng-template #mobileTpl>\n <div class=\"main-container main-container-mobile\">\n <mat-card appearance=\"outlined\" class=\"main-card main-card-mobile\">\n <ng-container [ngTemplateOutlet]=\"instructions\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"runnableIde\"></ng-container>\n </mat-card>\n </div>\n</ng-template>\n\n<ng-template #instructions>\n <tgo-code-instructions\n [mode]=\"mode\"\n [isLAT]=\"isLAT\"\n [questionText]=\"questionText\"\n [translations]=\"translations\"\n [isDarkTheme]=\"isDarkTheme$ | async\"\n ></tgo-code-instructions>\n</ng-template>\n<ng-template #runnableIde>\n <tgo-runnable-editor\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [isFullViewMode]=\"true\"\n [shouldGenerateInitCode]=\"false\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [languages]=\"languages\"\n [autoHeight]=\"autoHeight\"\n [translations]=\"translations\"\n [questionText]=\"questionText\"\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [runTestResponse]=\"runTestResponse\"\n [exampleTestCases]=\"exampleTestCases\"\n [hideTestCases]=\"hideTestCases\"\n [applicationTheme]=\"applicationTheme\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (runTestClick)=\"runTestClick.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n >\n </tgo-runnable-editor>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { take } from 'rxjs';\nimport { ApplicationTheme } from '@testgorilla/tgo-ui';\n\nimport {\n CodeEditorFuncParam,\n CodeEditorLanguages,\n CodeEditorTypesMap,\n} from '../code-editor/helpers/code-editor-helper.model';\nimport { PasteData } from '../code-editor/models/code-editor.model';\nimport { CodingSnapshot } from '../code-editor/models/coding-snapshot.model';\nimport { AssessmentIdPreview, LATLanguage, LATLanguages } from '../../models/lat-languages';\nimport { Modes } from '../../models/mode';\nimport { ExampleTestCase } from '../../models/test-cases';\nimport { ViewMode } from '../../models/view-mode';\nimport { ConfigurationsService } from '../../services/configurations.service';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport { StorageCodingService } from '../../services/storage.service';\nimport { TestCasesService } from '../../services/test-cases.service';\nimport { ThemeService } from '../../services/theme.service';\nimport { timeToMs } from '../../utils/time-to-ms.util';\nimport { CodeEditorComponent } from '../code-editor/code-editor.component';\nimport { CodingQuestionComponent } from '../coding-question/coding-question.component';\nimport { RunnableEditorComponent } from '../runnable-editor/runnable-editor.component';\n\n@UntilDestroy()\n@Component({\n selector: 'tgo-coding-test[languages]',\n templateUrl: './tgo-coding-test.component.html',\n styleUrl: './tgo-coding-test.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n CodeEditorComponent,\n CodingQuestionComponent,\n RunnableEditorComponent,\n ]\n})\nexport class TgoCodingTestComponent implements OnInit, OnChanges {\n private readonly configurationsService = inject(ConfigurationsService);\n private readonly libCodingTestService = inject(LibCodingTestService);\n private readonly testCasesService = inject(TestCasesService);\n private readonly StorageCodingService = inject(StorageCodingService);\n private readonly themeService = inject(ThemeService);\n\n @Input() initCode: string;\n @Input() snapshot: CodingSnapshot;\n @Input() functionParams: CodeEditorFuncParam[];\n @Input() functionName: string;\n @Input() returnType: keyof CodeEditorTypesMap;\n @Input() isLAT: boolean;\n @Input() isSQL: boolean;\n @Input() shouldGenerateInitCode = true;\n @Input() canAddCustomTestCases = true;\n\n @Input() selectedProgrammingLanguage: LATLanguage;\n\n @Input()\n set languages(value: LATLanguages) {\n if (!value.length) {\n throw new Error('At least one language is required');\n } else {\n Object.defineProperty(this, 'languages', {\n value,\n writable: true,\n });\n this.updateLanguage();\n }\n }\n\n @Input() isReadonly: boolean;\n @Input() autoHeight: boolean;\n @Input() translations: Record<string, unknown>;\n @Input() questionText: string;\n @Input() mode: Modes;\n @Input() assessmentId: string;\n @Input() companyColor: string;\n @Input() testCasesStatus: any;\n @Input() loading: boolean;\n @Input() runTestResponse = [];\n @Input() viewMode: ViewMode;\n @Input() exampleTestCases: ExampleTestCase[];\n // todo: remove this property from everywhere after sunsetting of the old flow\n @Input() hideTestCases: boolean;\n @Input() applicationTheme: ApplicationTheme = 'light';\n @Input() questionId: number;\n\n @Output() pasteEvent = new EventEmitter<PasteData>();\n @Output() codeChange = new EventEmitter<string>();\n @Output() runTestClick = new EventEmitter<boolean>();\n @Output() languageChange = new EventEmitter<CodeEditorLanguages>();\n\n colorTheme$ = this.configurationsService.colorTheme$;\n isFullscreenMode$ = this.libCodingTestService.isFullscreen$;\n\n isFullViewMode: boolean;\n ViewModes = ViewMode;\n themeSpecificColor: string;\n\n ngOnInit() {\n this.setIsFullViewMode();\n this.setCompanyColor();\n this.libCodingTestService.setInitCode(this.initCode);\n\n // Local Data should be maintained only for candidate environment\n if (this.isFullViewMode) {\n // Perform periodic storage maintenance\n this.performPeriodicMaintenance();\n\n const storageAssessmentId =\n this.isLAT && this.mode === Modes.NonAssessmentPreview\n ? AssessmentIdPreview\n : this.assessmentId;\n const storageCodeEnable =\n this.isLAT && (this.mode === Modes.Preview || this.mode === Modes.NonAssessmentPreview)\n ? true\n : this.mode === Modes.Running;\n const storageTestCasesEnable = this.mode === Modes.Running && this.isLAT;\n const storageQuestionId = Number.isInteger(this.questionId)\n ? String(this.questionId)\n : 'default-question-id';\n\n this.libCodingTestService.currentLanguage$.pipe(take(1)).subscribe(language => {\n this.StorageCodingService.setupAutoSavedData(\n language,\n storageAssessmentId,\n storageQuestionId,\n storageCodeEnable,\n storageTestCasesEnable,\n this.isLAT,\n this.mode\n );\n if (storageTestCasesEnable) {\n this.updateTestCases();\n }\n this.configurationsService.setCodeComponentDestroyed(false);\n this.updateInitCode(this.initCode);\n this.StorageCodingService.initializeSaving();\n });\n\n if (this.mode !== Modes.NonAssessmentPreview || this.isLAT) {\n this.libCodingTestService.clearSavedCode$.pipe(untilDestroyed(this)).subscribe(() => {\n this.StorageCodingService.clearSavedCode();\n if (this.isLAT) {\n this.StorageCodingService.clearSavedTestCases();\n }\n });\n\n if (this.isLAT) {\n this.libCodingTestService.clearLastLang$.pipe(untilDestroyed(this)).subscribe(() => {\n this.StorageCodingService.clearLastLang();\n });\n }\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes.initCode?.firstChange && typeof changes.initCode?.currentValue === 'string') {\n this.libCodingTestService.currentLanguage$.pipe(take(1)).subscribe(language => {\n this.StorageCodingService.changeLanguage(language);\n this.libCodingTestService.setInitCode(this.initCode);\n this.updateInitCode(changes.initCode.currentValue);\n });\n }\n if (changes.companyColor && changes.companyColor?.currentValue) {\n this.themeService.companyColor = changes.companyColor.currentValue;\n }\n }\n\n updateInitCode(code: string) {\n const savedCode = this.StorageCodingService.getSavedCode();\n this.initCode = savedCode ? savedCode : code;\n }\n\n private updateLanguage() {\n const lastLanguageLAT = this.StorageCodingService.getLastLanguageLAT();\n if (this.isLAT && this.isSavedLangRelevant(lastLanguageLAT)) {\n this.libCodingTestService.changeCurrentLanguage(lastLanguageLAT.value);\n const langVersion = this.getRelevantLangVersion(lastLanguageLAT);\n\n if (langVersion) {\n this.libCodingTestService.setVersion(langVersion);\n }\n } else {\n const language = this.selectedProgrammingLanguage || this.languages[0];\n this.libCodingTestService.changeCurrentLanguage(language.value);\n if (language.version) {\n this.libCodingTestService.setVersion(language.version);\n }\n }\n }\n\n private isSavedLangRelevant(lastLanguageLAT: {\n value: CodeEditorLanguages;\n version: string;\n }): boolean {\n return !!lastLanguageLAT && this.languages.some(({ value }) => value === lastLanguageLAT.value);\n }\n\n private getRelevantLangVersion(lastLang: {\n value: CodeEditorLanguages;\n version: string;\n }): string {\n const relevantLang = this.languages.find(({ value }) => value === lastLang?.value);\n\n return relevantLang ? relevantLang.version : lastLang.version;\n }\n\n private updateTestCases() {\n if (this.isLAT || (this.isSQL && !this.hideTestCases)) {\n const testCases = this.StorageCodingService.getSavedTestCases();\n if (testCases?.length) {\n this.libCodingTestService.updateTestCases([...testCases]);\n this.StorageCodingService.updateTestCases([...testCases]);\n if (testCases[testCases.length - 1].localId) {\n this.testCasesService.updateTestCaseLocalId(testCases[testCases.length - 1].localId);\n }\n } else {\n this.libCodingTestService.updateTestCases([]);\n this.StorageCodingService.updateTestCases([]);\n this.testCasesService.resetLastTestCaseLocalId();\n }\n }\n }\n\n private setIsFullViewMode(): void {\n this.isFullViewMode = this.viewMode === ViewMode.Full;\n }\n\n private setCompanyColor(): void {\n this.themeService.themeColors$\n .pipe(untilDestroyed(this))\n .subscribe(({ companyColor, themeSpecificColor }) => {\n this.companyColor = companyColor;\n this.themeSpecificColor = themeSpecificColor;\n });\n }\n\n /**\n * Performs periodic maintenance on localStorage data\n * This is done with a random chance to distribute cleanup over time\n * and prevent all users from cleaning up storage at the same time.\n */\n private performPeriodicMaintenance(): void {\n // Check the last time maintenance was done (stored in a separate key)\n const maintenanceKey = 'lastCodingTestStorageMaintenance';\n const lastMaintenance = localStorage.getItem(maintenanceKey);\n const now = Date.now();\n const isDoneLaterThanDay = now - parseInt(lastMaintenance, 10) > timeToMs(1);\n\n // If maintenance was never done or was done more than a day ago,\n // perform it with a 20% chance to distribute load\n if (!lastMaintenance || isDoneLaterThanDay) {\n // Perform maintenance with 20% probability to distribute load\n if (Math.random() < 0.2) {\n // Perform the cleanup silently\n this.StorageCodingService.performMaintenanceAndCleanup();\n localStorage.setItem(maintenanceKey, now.toString());\n }\n }\n }\n}\n","@switch (viewMode) {\n @case (ViewModes.Full) {\n <tgo-coding-question\n [ngClass]=\"[\n 'coding-question',\n colorTheme$ | async,\n (isFullscreenMode$ | async) ? 'coding-question-fullscreen' : '',\n ]\"\n [ngStyle]=\"{\n '--company-color': companyColor,\n '--company-theme-specific-color': themeSpecificColor,\n }\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [autoHeight]=\"autoHeight\"\n [questionText]=\"questionText\"\n [mode]=\"mode\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [exampleTestCases]=\"exampleTestCases\"\n [languages]=\"languages\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (runTestClick)=\"runTestClick.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n [translations]=\"translations\"\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [runTestResponse]=\"runTestResponse\"\n [applicationTheme]=\"applicationTheme\"\n [hideTestCases]=\"hideTestCases\"\n >\n </tgo-coding-question>\n }\n @case (ViewModes.RunnableIde) {\n <ng-container [ngTemplateOutlet]=\"runnableEditorTpl\"></ng-container>\n }\n @case (ViewModes.RunnableIdeWithLangSelector) {\n <ng-container [ngTemplateOutlet]=\"runnableEditorTpl\"></ng-container>\n }\n @default {\n <tgo-code-editor\n [initCode]=\"initCode\"\n [snapshot]=\"snapshot\"\n [shouldGenerateInitCode]=\"!isFullViewMode && shouldGenerateInitCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [hasCodingConfigPanel]=\"isFullViewMode\"\n [isReadonly]=\"isReadonly\"\n [autoHeight]=\"autoHeight\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n >\n </tgo-code-editor>\n }\n}\n\n<ng-template #runnableEditorTpl>\n <tgo-runnable-editor\n [ngClass]=\"colorTheme$ | async\"\n [ngStyle]=\"{\n '--company-color': companyColor,\n '--company-theme-specific-color': themeSpecificColor,\n }\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [isFullViewMode]=\"false\"\n [shouldGenerateInitCode]=\"shouldGenerateInitCode\"\n [isRunnableWithLangSelector]=\"viewMode === ViewModes.RunnableIdeWithLangSelector\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [languages]=\"languages\"\n [autoHeight]=\"autoHeight\"\n [translations]=\"translations\"\n [questionText]=\"questionText\"\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [runTestResponse]=\"runTestResponse\"\n [exampleTestCases]=\"exampleTestCases\"\n [applicationTheme]=\"applicationTheme\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (runTestClick)=\"runTestClick.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n >\n </tgo-runnable-editor>\n</ng-template>\n","export const ROOT_TRANSLATIONS_SCOPE = 'CODING_QUESTION';\n","export interface SqlTestResult {\n content: string;\n response_msg: string;\n stderr: string | null;\n stdout: string[];\n test_result: string;\n}\n\nexport interface CodeTestResult {\n actualOutput: string;\n logs: string;\n status: 'passed' | 'error';\n}\n\nexport type TestResult = SqlTestResult | CodeTestResult;\n\nexport interface CodingTestsResultsModel {\n listResponse: TestResult[];\n resume: {\n ok: number;\n error: number;\n total: number;\n };\n}\n\nexport interface CoderunnerAttemptModel {\n code?: string;\n created_at?: string;\n executions?: CoderunnerTestCaseExecutionModel[];\n id?: string;\n language?: string;\n question_result_id?: number;\n updated_at?: string;\n}\n\nexport interface CoderunnerTestCaseExecutionModel {\n input: string;\n evaluation: {\n testcase?: string;\n };\n run: CodeRunnerTestCaseExecutionOutputModel;\n compile: CodeRunnerTestCaseExecutionOutputModel;\n attempt_id: null;\n submission_id: null;\n validation_id: null;\n id: string;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CodeRunnerTestCaseExecutionOutputModel {\n stdout?: string;\n stderr?: string;\n signal?: string;\n output?: string;\n}\n\nexport const TIMEOUT_SIGNAL = 'SIGKILL';\n","import { InjectionToken } from '@angular/core';\nimport { TgoCodingTestConfig } from './tgo-coding-test.config';\n\n/**\n * Injection token for the TGO Coding Test library configuration.\n * \n * This token is used to inject the runtime configuration provided\n * by the consuming application into library services.\n */\nexport const TGO_CODING_TEST_CONFIG = new InjectionToken<TgoCodingTestConfig>(\n 'TGO_CODING_TEST_CONFIG',\n {\n providedIn: 'root',\n factory: () => {\n throw new Error(\n 'TGO_CODING_TEST_CONFIG must be provided. Use provideTgoCodingTest() in your app.config.ts or component providers.'\n );\n },\n }\n);\n\n","import { inject, Injectable } from '@angular/core';\nimport { TGO_CODING_TEST_CONFIG } from '../config/tgo-coding-test.token';\n\n/**\n * Service for accessing TGO Coding Test library configuration.\n * \n * This service provides a clean abstraction layer over the configuration\n * injection token, allowing services to access configuration values\n * without directly injecting the token.\n * \n * @example\n * ```typescript\n * @Injectable()\n * export class MyService {\n * private readonly configService = inject(CodingTestConfigService);\n * \n * doSomething() {\n * const endpoint = this.configService.getCoderunnerV2Endpoint();\n * // Use endpoint...\n * }\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class CodingTestConfigService {\n private readonly config = inject(TGO_CODING_TEST_CONFIG);\n\n /**\n * Gets the main API endpoint URL.\n * \n * @returns The base URL for the main API endpoint\n */\n getApiUrl(): string {\n return this.config.apiUrl;\n }\n\n /**\n * Gets the CodeRunner V2 API endpoint URL.\n * \n * @returns The base URL for the CodeRunner V2 API endpoint\n */\n getCoderunnerV2Endpoint(): string {\n return this.config.coderunnerV2Endpoint;\n }\n}\n\n","import { inject, Injectable } from '@angular/core';\nimport { ApiService } from '@testgorilla/tgo-test-shared';\nimport { EMPTY, Observable, throwError } from 'rxjs';\nimport { LATFormattedTestCases, SqlTestCase } from '../../models/test-cases';\nimport { CoderunnerAttemptModel } from '../../models/coderunner-execution-results';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { SnackbarService } from '@testgorilla/tgo-ui';\nimport { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';\nimport { translate } from '@ngneat/transloco';\nimport { CodeEvent, CodeEventResponse } from '../../models/code-event';\nimport { CodingTestConfigService } from '../coding-test-config.service';\n\n@Injectable()\nexport class CoderunnerApiService {\n private readonly snackbarService = inject(SnackbarService);\n private readonly apiService = inject(ApiService);\n private readonly configService = inject(CodingTestConfigService);\n \n private readonly CR2Url = `${this.configService.getCoderunnerV2Endpoint()}/`;\n\n // todo: will public preview be supported by mFE? if not - remove this\n runPublicTest$(\n code: string,\n testcases: LATFormattedTestCases[] | SqlTestCase[],\n language: string\n ): Observable<CoderunnerAttemptModel> {\n return this.apiService.post(\n `${this.CR2Url}api/attempts/public/`,\n {\n question_id: 0,\n language,\n code,\n testcases,\n question_result_id: 0,\n },\n {},\n this.handleError.bind(this),\n true\n );\n }\n\n runPreviewTest$(\n test_result_id: number,\n code: string,\n testcases: LATFormattedTestCases[] | SqlTestCase[],\n language: string\n ): Observable<CoderunnerAttemptModel> {\n return this.apiService.post(\n `${this.CR2Url}api/attempts/preview/`,\n {\n language,\n code,\n testcases,\n test_result_id,\n },\n {},\n this.handleError.bind(this),\n true\n );\n }\n\n runNonPreviewTest$(\n question_id: number,\n question_result_id: number,\n code: string,\n testcases: LATFormattedTestCases[] | SqlTestCase[],\n language: string\n ): Observable<CoderunnerAttemptModel> {\n return this.apiService.post(\n `${this.CR2Url}api/attempts/`,\n {\n question_id,\n language,\n code,\n testcases,\n question_result_id,\n },\n {},\n this.handleError.bind(this),\n true\n );\n }\n\n sendCodeEvent$(event: CodeEvent): Observable<CodeEventResponse> {\n return this.apiService.post(\n `${this.CR2Url}api/events/`,\n event,\n {},\n this.handleError.bind(this),\n true\n );\n }\n\n private handleError({ error }: HttpErrorResponse): Observable<never> {\n if (error.detail) {\n return throwError(() => error);\n }\n\n const genericErrorText = translate(\n `${ROOT_TRANSLATIONS_SCOPE}.ERRORS.SYSTEM_ERROR`\n );\n this.snackbarService.error(genericErrorText);\n return EMPTY;\n }\n}\n","import { Injectable, signal } from '@angular/core';\nimport { translate } from '@ngneat/transloco';\nimport {\n ApplicationTheme,\n ConfirmDialogComponent,\n DialogService,\n SnackbarService,\n} from '@testgorilla/tgo-ui';\nimport {\n MixpanelService,\n TestResultRead,\n} from '@testgorilla/tgo-test-shared';\nimport {\n CustomTestCase,\n ExampleTestCase,\n TestCaseDeletionAction,\n TestCaseDeletionData,\n} from '../../models/test-cases';\nimport { LibCodingTestService, ResetCodeAction } from '../lib-coding-test.service';\nimport { CodeEditorLanguages } from '../../components/code-editor/helpers/code-editor-helper.model';\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n filter,\n of,\n takeUntil,\n throwError,\n} from 'rxjs';\nimport { catchError, map, switchMap, take, tap } from 'rxjs/operators';\nimport { CodeEvent, CodeEventResponse } from '../../models/code-event';\nimport {\n CodeRunnerTestCaseExecutionOutputModel,\n CoderunnerAttemptModel,\n CoderunnerTestCaseExecutionModel,\n CodingTestsResultsModel,\n TIMEOUT_SIGNAL,\n} from '../../models/coderunner-execution-results';\nimport { MixpanelEvents } from '../../models/mixpanel-events';\nimport {\n ProgrammingLanguage,\n ProgrammingLanguageVersioned,\n} from '../../models/programming-language';\nimport {\n GroupedTestCasesResult,\n LATFormattedTestCases,\n SqlTestCase,\n Testcase,\n} from '../../models/test-cases';\nimport { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';\nimport { CoderunnerApiService } from './coderunner-api.service';\n\ninterface CustomError {\n detail?: string;\n}\n\n@Injectable()\nexport class CodingTestService {\n readonly translationContext = `${ROOT_TRANSLATIONS_SCOPE}.CODING_LIB.`;\n\n private codingTestResults: CodingTestsResultsModel = {\n listResponse: [],\n resume: {\n ok: 0,\n error: 0,\n total: 0,\n },\n };\n private currentLanguage!: ProgrammingLanguage;\n private codingTestResutsSubj$ = new BehaviorSubject(this.codingTestResults);\n codingTestResults$ = this.codingTestResutsSubj$.asObservable();\n\n isTestResultsLoading = signal<boolean>(false);\n\n private unsubscribe$ = new Subject<void>();\n\n private sqlTestCases!: SqlTestCase[];\n private isSQLTest = false;\n\n constructor(\n private coderunnerApiService: CoderunnerApiService,\n private libCodingTestService: LibCodingTestService,\n private mixpanel: MixpanelService,\n private snackBar: SnackbarService,\n private dialog: DialogService\n ) {}\n\n private getBaseExampleTestCase = (id: number, index: number) => ({\n id: id ?? 0,\n name: `Example ${index + 1}`,\n preloaded: true,\n });\n\n transformToExampleLATtestCase = (\n testcase: Testcase,\n index: number\n ): ExampleTestCase => ({\n ...this.getBaseExampleTestCase(testcase.id!, index),\n expectedOutput: testcase.solution ?? '',\n input: testcase.input,\n });\n\n transformToExampleSQLTestCase = (\n testcase: SqlTestCase,\n index: number\n ): ExampleTestCase => ({\n ...this.getBaseExampleTestCase(testcase.id!, index),\n expectedOutput: testcase.result ?? '',\n });\n\n setSqlTestCases(sqlTestCases: SqlTestCase[]) {\n this.sqlTestCases = sqlTestCases;\n }\n\n getSqlTestCases(): SqlTestCase[] {\n return this.sqlTestCases;\n }\n\n handleResetCodeModal(applicationTheme: ApplicationTheme, companyColor: string): void {\n const modalTranslationContext = `${ROOT_TRANSLATIONS_SCOPE}.MODALS.RESET_CODE.`;\n const modalData = {\n confirmButtonText: translate(`${modalTranslationContext}SUBMIT`),\n title: translate(`${modalTranslationContext}TITLE`),\n message: translate(`${modalTranslationContext}MESSAGE`),\n color: companyColor,\n };\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n applicationTheme,\n size: 'small',\n extraData: modalData,\n });\n\n dialogRef\n .afterClosed()\n .pipe(filter(Boolean), take(1))\n .subscribe(() => {\n this.libCodingTestService.confirmReset();\n });\n }\n\n listenDeleteCustomTestCases(): Observable<TestCaseDeletionData> {\n return this.libCodingTestService.testCaseDeletion$.pipe(\n filter(({ action }) => action === TestCaseDeletionAction.Try)\n );\n }\n\n handleDeleteTestCaseModal(\n index: number,\n applicationTheme: ApplicationTheme,\n companyColor: string\n ): void {\n const deleteTestCaseTranslationContext = `${ROOT_TRANSLATIONS_SCOPE}.MODALS.DELETE_TEST_CASE.`;\n const modalData = {\n title: translate(`${deleteTestCaseTranslationContext}TITLE`),\n message: translate(`${deleteTestCaseTranslationContext}MESSAGE`),\n confirmButtonText: translate(`${deleteTestCaseTranslationContext}SUBMIT`),\n color: companyColor,\n };\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n applicationTheme,\n size: 'small',\n extraData: modalData,\n });\n\n dialogRef\n .afterClosed()\n .pipe(filter(Boolean), take(1))\n .subscribe(() => {\n this.libCodingTestService.confirmTestCaseDeletion(index);\n });\n }\n\n handleLanguageChangeModal(\n questionResultId: number,\n selectedLanguage?: ProgrammingLanguage,\n applicationTheme: ApplicationTheme = 'light',\n companyColor?: string,\n ): void {\n const modalLangChangeTranslationContext = `${ROOT_TRANSLATIONS_SCOPE}.MODALS.LANGUAGE_CHANGE.`;\n const modalData = {\n confirmButtonText: translate(\n `${modalLangChangeTranslationContext}SUBMIT`\n ),\n title: translate(`${modalLangChangeTranslationContext}TITLE`),\n message: translate(`${modalLangChangeTranslationContext}MESSAGE`),\n ...(companyColor && { color: companyColor }),\n };\n\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n applicationTheme,\n size: 'small',\n extraData: modalData,\n });\n\n dialogRef\n .afterClosed()\n .pipe(take(1))\n .subscribe((result) => {\n if (result) {\n this.libCodingTestService.confirmLanguageChange();\n if (selectedLanguage) {\n this.setCurrentLanguageLAT(selectedLanguage);\n this.sendLanguageChangeEvent$(questionResultId);\n }\n } else {\n this.libCodingTestService.cancelLanguageChange();\n }\n });\n }\n\n setCurrentLanguageLAT(language: ProgrammingLanguage): void {\n this.currentLanguage = language;\n }\n\n listenCodingTestChanges(): Observable<ResetCodeAction> {\n return this.libCodingTestService.codeReset$.pipe(\n filter((val) => val === ResetCodeAction.Try)\n );\n }\n\n runTest(\n resultId: number,\n code: string,\n isLAT = true,\n isSQL = false,\n // todo: remove from everywhere or comment temporarily?\n publicPreview = false,\n preview = false,\n id = 0,\n testResultId = 0,\n testData?: TestResultRead\n ): void {\n this.preRunTests();\n if (isSQL) {\n this.getSQLrequest(\n resultId,\n testResultId,\n code,\n id,\n publicPreview,\n preview\n );\n } else if (isLAT) {\n const testCases: (ExampleTestCase | CustomTestCase)[] =\n this.libCodingTestService.getValidTestCases();\n const testCasesFormatted = testCases.map((testCase) => ({\n input: testCase.input,\n solution: testCase.expectedOutput,\n })) as LATFormattedTestCases[];\n this.libCodingTestService.currentLanguage$\n .pipe(take(1))\n .subscribe((language) => {\n const runReq$ = this.getLATrequest(\n id,\n resultId,\n testResultId,\n code,\n testCasesFormatted as LATFormattedTestCases[],\n language,\n publicPreview,\n preview\n );\n this.runLAT(\n runReq$,\n publicPreview,\n preview,\n testData || ({} as TestResultRead),\n testCases,\n code,\n resultId\n );\n });\n }\n }\n\n sendCopypasteEvent$(\n code: string,\n copiedText: string,\n questionResultId: number\n ): Observable<CodeEventResponse> {\n const event: CodeEvent = this.getBaseEvent({\n code,\n event_type: 'COPYPASTE',\n extra_payload: copiedText,\n question_result_id: questionResultId,\n });\n\n return this.coderunnerApiService.sendCodeEvent$(event);\n }\n\n sendAutosaveEvent$(\n code: string,\n questionResultId: number\n ): Observable<CodeEventResponse> {\n const event: CodeEvent = this.getBaseEvent({\n code,\n event_type: 'AUTOSAVE',\n question_result_id: questionResultId,\n });\n\n return this.coderunnerApiService\n .sendCodeEvent$(event)\n .pipe(catchError((err) => of(err)));\n }\n\n private sendLanguageChangeEvent$(questionResultId: number): void {\n const event: CodeEvent = this.getBaseEvent({\n event_type: 'SWITCH',\n question_result_id: questionResultId,\n });\n\n this.coderunnerApiService.sendCodeEvent$(event).pipe(take(1)).subscribe();\n }\n\n private getBaseEvent(event: Partial<CodeEvent>): CodeEvent {\n let language = '';\n\n if (this.isSQLTest) {\n language = ProgrammingLanguageVersioned.SQLite;\n } else {\n const { name, version } = this.currentLanguage;\n language = `${name}-${version}`;\n }\n\n const baseEvent: Partial<CodeEvent> = {\n code: '',\n extra_payload: '',\n attempt_id: null,\n language,\n };\n\n return { ...baseEvent, ...event } as CodeEvent;\n }\n\n private sendCodeEvent$(\n attemptId: string,\n questionResultId: number,\n code: string\n ): Observable<CodeEventResponse> {\n const event: CodeEvent = this.getBaseEvent({\n code,\n attempt_id: attemptId,\n event_type: 'ATTEMPT',\n question_result_id: questionResultId,\n });\n\n return this.coderunnerApiService.sendCodeEvent$(event);\n }\n\n private countTestResults(\n executions: CoderunnerTestCaseExecutionModel[] | undefined\n ): {\n passed: number;\n error: number;\n total: number;\n } {\n if (executions) {\n return executions.reduce(\n (acc, response) => {\n if (response.evaluation.testcase) {\n acc.passed++;\n } else {\n acc.error++;\n }\n acc.total++;\n return acc;\n },\n { passed: 0, error: 0, total: 0 }\n );\n }\n return { passed: 0, error: 0, total: 0 };\n }\n\n private handleTestCasesResult(\n testCasesResultObject: CodingTestsResultsModel\n ): void {\n this.codingTestResults = testCasesResultObject;\n this.publishTestResults();\n this.isTestResultsLoading.set(false);\n }\n\n private getSQLrequest(\n resultId: number,\n testResultId: number,\n code: string,\n id: number,\n publicPreview: boolean,\n preview: boolean\n ): void {\n const testCases: SqlTestCase[] = this.getSqlTestCases();\n let runReq$: Observable<CoderunnerAttemptModel>;\n if (publicPreview) {\n runReq$ = this.coderunnerApiService.runPublicTest$(\n code,\n testCases,\n ProgrammingLanguageVersioned.SQLite\n );\n } else if (preview) {\n runReq$ = this.coderunnerApiService.runPreviewTest$(\n testResultId,\n code,\n testCases,\n ProgrammingLanguageVersioned.SQLite\n );\n } else {\n runReq$ = this.coderunnerApiService.runNonPreviewTest$(\n id,\n resultId,\n code,\n testCases,\n ProgrammingLanguageVersioned.SQLite\n );\n }\n this.runSql(runReq$, testCases, resultId, !publicPreview && !preview, code);\n }\n\n private runSql(\n runReq$: Observable<CoderunnerAttemptModel>,\n testCases: SqlTestCase[],\n questionResultId: number,\n isActualQuestion: boolean,\n code: string\n ) {\n let attemptId = '';\n\n runReq$\n .pipe(\n catchError((err) => {\n this.finalizeReq(err);\n return throwError(() => err);\n }),\n tap((res) => this.finalizeReq(res as CustomError)),\n tap(({ id }) => (attemptId = id ?? '')),\n switchMap((responseArray: CoderunnerAttemptModel) =>\n of(responseArray.executions).pipe(\n map((executions) => this.countTestResults(executions)),\n map((countResult) => {\n const sqlExecutedSuccessfullyCopy = translate(\n `${this.translationContext}TEST_RESULTS.TEST_CASES.SQL_EXECUTED_SUCCESSFULLY`\n );\n const noOutputCopies = this.getNoOutputCopies();\n\n return {\n resume: {\n ok: countResult.passed,\n error: countResult.error,\n total: countResult.total,\n },\n listResponse: responseArray.executions?.map(\n ({ run, evaluation }: CoderunnerTestCaseExecutionModel) => ({\n actualOutput: run.stdout\n ? run.stdout\n : run.stderr || run.signal === TIMEOUT_SIGNAL\n ? noOutputCopies['noResponse']\n : noOutputCopies['noOutput'],\n logs: this.getCoderunnerLogs(\n run,\n TIMEOUT_SIGNAL,\n noOutputCopies['timeoutError'],\n sqlExecutedSuccessfullyCopy\n ),\n status: evaluation.testcase ? 'passed' : 'error',\n })\n ),\n } as CodingTestsResultsModel;\n }),\n tap((testCasesResultObject) =>\n this.handleTestCasesResult(testCasesResultObject)\n )\n )\n ),\n switchMap(() =>\n this.getSendCodeEventStream$(\n isActualQuestion,\n attemptId,\n questionResultId,\n code\n )\n )\n )\n .subscribe();\n }\n\n private getLATrequest(\n id: number,\n resultId: number,\n testResultId: number,\n code: string,\n testCasesFormatted: LATFormattedTestCases[],\n language: CodeEditorLanguages,\n publicPreview: boolean,\n preview: boolean\n ): Observable<CoderunnerAttemptModel> {\n if (publicPreview) {\n return this.coderunnerApiService.runPublicTest$(\n code,\n testCasesFormatted,\n `${language}-${this.libCodingTestService.getVersion()}`\n );\n } else if (preview) {\n return this.coderunnerApiService.runPreviewTest$(\n testResultId,\n code,\n testCasesFormatted,\n `${language}-${this.libCodingTestService.getVersion()}`\n );\n } else {\n return this.coderunnerApiService.runNonPreviewTest$(\n id,\n resultId,\n code,\n testCasesFormatted,\n `${language}-${this.libCodingTestService.getVersion()}`\n );\n }\n }\n\n setIsSQLTest(isSQL: boolean): void {\n this.isSQLTest = isSQL;\n }\n\n private runLAT(\n runCodeRequest$: Observable<CoderunnerAttemptModel>,\n isPublicPreviewLAT: boolean,\n isPractice = false,\n testData: TestResultRead,\n testCases: ExampleTestCase[] | CustomTestCase[],\n code: string,\n questionResultId: number\n ): void {\n const pistonRegex = /\\/piston\\/[^/ ]+(\\/[^/ ]+)*/g;\n const reqStartTime = performance.now();\n let reqEndTime: number;\n let attemptId = '';\n\n runCodeRequest$\n .pipe(\n catchError((err) => {\n this.finalizeReq(err);\n return throwError(() => err);\n }),\n tap((res) => this.finalizeReq(res as CustomError)),\n tap(() => (reqEndTime = performance.now())),\n tap(({ id }) => (attemptId = id ?? '')),\n switchMap((responseArray: CoderunnerAttemptModel) =>\n of(responseArray.executions).pipe(\n map((executions) => (executions ? executions : [])),\n map((executions: CoderunnerTestCaseExecutionModel[]) =>\n executions.map((x) => {\n if (x.run.stderr) {\n x.run.stderr = x.run.stderr.replace(pistonRegex, '');\n }\n if (x.run.stdout) {\n x.run.stdout = x.run.stdout.replace(pistonRegex, '');\n }\n return x;\n })\n ),\n map((executions) => this.countTestResults(executions)),\n map((countResult) => {\n if (!isPublicPreviewLAT) {\n const responseTime = Math.round(reqEndTime - reqStartTime);\n this.trackTestcasesRun(\n testData,\n countResult,\n responseArray.executions || [],\n responseTime,\n testCases\n );\n }\n const noOutputCopies = this.getNoOutputCopies();\n const executedSuccessfullyCopy = translate(\n `${this.translationContext}TEST_RESULTS.TEST_CASES.EXECUTED_SUCCESSFULLY`\n );\n\n return {\n resume: {\n ok: countResult.passed,\n error: countResult.error,\n total: countResult.total,\n },\n listResponse: responseArray.executions?.map(\n ({\n run,\n evaluation,\n compile,\n }: CoderunnerTestCaseExecutionModel) => ({\n actualOutput: run.stdout\n ? run.stdout\n : run.stderr || run.signal === TIMEOUT_SIGNAL\n ? noOutputCopies['noResponse']\n : noOutputCopies['noOutput'],\n logs: this.getCoderunnerLogs(\n run,\n TIMEOUT_SIGNAL,\n noOutputCopies['timeoutError'],\n executedSuccessfullyCopy,\n compile\n ),\n status: evaluation.testcase ? 'passed' : 'error',\n })\n ),\n } as CodingTestsResultsModel;\n }),\n tap((testCasesResultObject) =>\n this.handleTestCasesResult(testCasesResultObject)\n )\n )\n ),\n switchMap(() =>\n this.getSendCodeEventStream$(\n !isPractice && !isPublicPreviewLAT,\n attemptId,\n questionResultId,\n code\n )\n )\n )\n .subscribe();\n }\n\n private finalizeReq(err: CustomError): void {\n this.isTestResultsLoading.set(false);\n if (err.detail) {\n this.snackBar.error(err.detail);\n }\n }\n\n private getNoOutputCopies(): { [key: string]: string } {\n return {\n noResponse: translate(\n `${this.translationContext}TEST_RESULTS.TEST_CASES.NO_RESPONSE`\n ),\n noOutput: translate(\n `${this.translationContext}TEST_RESULTS.TEST_CASES.NONE`\n ),\n timeoutError: translate(\n `${this.translationContext}TEST_RESULTS.TEST_CASES.TIMEOUT_ERROR`\n ),\n };\n }\n\n private getSendCodeEventStream$(\n isActualQuestion: boolean,\n attemptId: string,\n questionResultId: number,\n code: string\n ): Observable<CodeEventResponse> {\n if (isActualQuestion) {\n return this.sendCodeEvent$(attemptId, questionResultId, code);\n } else {\n return of({} as CodeEventResponse);\n }\n }\n\n // todo: check if we need this anymore due to MFE providers specificity\n unsubscribeAll(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n resetRunTestSummary(): void {\n this.codingTestResults = {\n listResponse: [],\n resume: {\n ok: 0,\n error: 0,\n total: 0,\n },\n };\n\n this.publishTestResults();\n }\n\n trackConfigChanged(isPracticeQuestion = false): void {\n this.libCodingTestService.configFieldChanged$\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe((config) => {\n const { settingInstance, changedKey, newValueString } =\n this.getMixpanelSettingsData(isPracticeQuestion, config);\n\n this.mixpanel.track(MixpanelEvents.ChangedSettings, {\n coderunner_setting: changedKey,\n coderunner_setting_new_value: newValueString,\n coderunner_setting_instance: settingInstance,\n });\n });\n }\n\n private getCoderunnerLogs(\n run: CodeRunnerTestCaseExecutionOutputModel,\n TIMEOUT_SIGNAL: string,\n timeoutErrorCopy: string,\n executedSuccessfullyCopy: string,\n compile?: CodeRunnerTestCaseExecutionOutputModel,\n isSQL?: boolean\n ): string {\n if (isSQL) {\n return run?.stderr === TIMEOUT_SIGNAL\n ? run.stderr\n : executedSuccessfullyCopy;\n } else if (run?.stderr) {\n return run.stderr === compile?.stderr\n ? run.stderr\n : `${run.stderr}\\n${compile?.stderr || ''}`;\n } else if (run.signal === TIMEOUT_SIGNAL) {\n return timeoutErrorCopy;\n }\n return executedSuccessfullyCopy;\n }\n\n private trackTestcasesRun(\n testData: TestResultRead,\n countResult: { [key: string]: number },\n testCasesExecutions: CoderunnerTestCaseExecutionModel[],\n responseTime: number,\n testCases: ExampleTestCase[] | CustomTestCase[]\n ): void {\n const {\n instance,\n customPassed,\n customFailed,\n examplePassed,\n exampleFailed,\n customEmpty,\n testUuid,\n testName,\n } = this.getMixpanelTestCasesData(\n testData,\n countResult,\n testCasesExecutions,\n testCases\n );\n\n this.mixpanel.track('Candidate ran tests in Coderunner', {\n coding_test_uuid: testUuid,\n coding_test_name: testName,\n coderunner_test_instance: instance,\n custom_testcases_passed: customPassed,\n custom_testcases_failed: customFailed,\n custom_testcases_empty: customEmpty,\n example_testcases_passed: examplePassed,\n example_testcases_failed: exampleFailed,\n coderunner_response_time: responseTime,\n });\n }\n\n private preRunTests() {\n this.isTestResultsLoading.set(true);\n this.resetRunTestSummary();\n }\n\n private getMixpanelTestCasesData(\n testData: TestResultRead,\n { total }: { [key: string]: number },\n testCasesExecutions: CoderunnerTestCaseExecutionModel[],\n validTestCases: ExampleTestCase[] | CustomTestCase[]\n ) {\n const allTestCasesCount = this.libCodingTestService.getTestCasesCount();\n const customEmpty = allTestCasesCount - total || 0;\n const instance = this.getMixpanelInstanceValue(!!testData.is_preview_mode);\n const { uuid: testUuid } = testData;\n const { name: testName } = testData.test ?? { name: '' };\n const mixpanelResults = this.getGroupedTestCaseResult(\n testCasesExecutions,\n validTestCases\n );\n\n return {\n testUuid: testUuid?.replace(/-/g, ''),\n testName,\n instance,\n customEmpty,\n customPassed: mixpanelResults.custom.passed,\n customFailed: mixpanelResults.custom.failed,\n examplePassed: mixpanelResults.example.passed,\n exampleFailed: mixpanelResults.example.failed,\n };\n }\n\n private getGroupedTestCaseResult(\n testCasesExecutions: CoderunnerTestCaseExecutionModel[],\n validTestCases: ExampleTestCase[] | CustomTestCase[]\n ): GroupedTestCasesResult {\n const groupedResult = {\n custom: {\n failed: 0,\n passed: 0,\n },\n example: {\n failed: 0,\n passed: 0,\n },\n };\n\n testCasesExecutions.forEach(({ input: resultInput, evaluation }) => {\n const localTestCase = validTestCases.find(\n ({ input }) => resultInput === input\n );\n const mixpanelResultBody = localTestCase?.preloaded\n ? groupedResult.example\n : groupedResult.custom;\n\n if (evaluation?.testcase) {\n mixpanelResultBody.passed++;\n } else {\n mixpanelResultBody.failed++;\n }\n });\n\n return groupedResult;\n }\n\n private getMixpanelSettingsData(\n isPracticeQuestion: boolean,\n config: { [key: string]: boolean | string | number }\n ) {\n const settingInstance = this.getMixpanelInstanceValue(isPracticeQuestion);\n const changedKey = Object.keys(config)[0];\n const THEME_IDENTIFIER = 'theme-';\n let changedValue: boolean | string | number = config[changedKey];\n let newValueString;\n\n if (typeof changedValue === 'boolean') {\n newValueString = changedValue ? 'ON' : 'OFF';\n } else {\n changedValue = String(changedValue);\n newValueString = changedValue.includes(THEME_IDENTIFIER)\n ? changedValue.replace(THEME_IDENTIFIER, '')\n : changedValue;\n }\n\n return { settingInstance, changedKey, newValueString };\n }\n\n private getMixpanelInstanceValue(isPracticeQuestion: boolean) {\n return isPracticeQuestion ? 'practice question' : 'real test';\n }\n\n private publishTestResults() {\n this.codingTestResutsSubj$.next({ ...this.codingTestResults });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { translate } from '@ngneat/transloco';\nimport {\n GuidedTour,\n GuidedTourService,\n Orientation,\n TourStep,\n} from 'ngx-guided-tour';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';\n\nexport const enum CodingTestTourMode {\n PracticeQuestion = 'practice',\n RealQuestion = 'real',\n}\n\n@Injectable()\nexport class CodingTestTourService {\n private readonly translationContext = `${ROOT_TRANSLATIONS_SCOPE}.TOUR.`;\n private readonly guidedTourId = 'lat-coding-tour';\n private readonly MINIMUM_SCREEN_SIZE = 599;\n\n private activeGuidedTourIdSub$ = new BehaviorSubject('');\n activeGuidedTourId$ = this.activeGuidedTourIdSub$.asObservable();\n\n constructor(private guidedTourService: GuidedTourService) {}\n\n init(mode: CodingTestTourMode): void {\n this.start(mode);\n }\n\n skipTour(): void {\n // currentTourStepCount checks if there is a currentTour before checking stepCount.\n if (this.guidedTourService.currentTourStepCount) {\n this.guidedTourService.skipTour();\n }\n }\n\n private start(mode: CodingTestTourMode) {\n if (window.innerWidth > this.MINIMUM_SCREEN_SIZE) {\n this.guidedTourService.startTour(this.getTour(mode));\n }\n this.publishActiveGuidedTourId();\n }\n\n private publishActiveGuidedTourId(): void {\n this.activeGuidedTourIdSub$.next(this.guidedTourId);\n }\n\n private getTour(mode: CodingTestTourMode): GuidedTour {\n let steps: TourStep[] = [];\n const step1 = {\n title: translate(`${this.translationContext}STEP_1.TITLE`),\n selector: '#question-section',\n content: translate(`${this.translationContext}STEP_1.MESSAGE`),\n orientation: Orientation.Right,\n };\n const step2 = {\n title: translate(`${this.translationContext}STEP_2.TITLE`),\n selector: '#language-dropdown',\n content: translate(`${this.translationContext}STEP_2.MESSAGE`),\n orientation: Orientation.Bottom,\n };\n const step3 = {\n title: translate(`${this.translationContext}STEP_3.TITLE`),\n selector: '#test-cases',\n content: translate(`${this.translationContext}STEP_3.MESSAGE`),\n orientation: Orientation.Top,\n };\n const step4 = {\n title: translate(`${this.translationContext}STEP_4.TITLE`),\n selector: '#configuration-ide-button',\n content: translate(`${this.translationContext}STEP_4.MESSAGE`),\n orientation: Orientation.BottomRight,\n };\n const step5 = {\n title: translate(`${this.translationContext}STEP_5.TITLE`),\n selector: '[data-tourId*=\"question-next-finish-button\"]',\n content: translate(`${this.translationContext}STEP_5.MESSAGE`),\n orientation: Orientation.Bottom,\n };\n\n switch (mode) {\n case CodingTestTourMode.PracticeQuestion:\n steps = [step1, step2, step3, step4, step5];\n break;\n case CodingTestTourMode.RealQuestion:\n steps = [step2, step3, step4];\n break;\n }\n\n return {\n tourId: this.guidedTourId,\n useOrb: false,\n minimumScreenSize: this.MINIMUM_SCREEN_SIZE,\n steps,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ApiService } from '@testgorilla/tgo-test-shared';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class CandidatureApiService {\n constructor(\n private apiService: ApiService\n ) {\n }\n\n getAvailableLanguages$(): Observable<number[]> {\n return this.apiService.get('candidatures/test-results/programming-languages/');\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n EventEmitter,\n HostBinding,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport { translate, TRANSLOCO_SCOPE, TranslocoModule, TranslocoService } from '@ngneat/transloco';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport {\n ApiService,\n Assessment,\n EnvironmentService,\n getAvailableLangs,\n IAntiCheatingState,\n IConfigurationState,\n INavigationButtonState,\n IQuestionDataContract,\n ISubmissionState,\n MixpanelService,\n Question,\n TestResultRead,\n ThemeService,\n TranslocoLazyModuleUtils,\n} from '@testgorilla/tgo-test-shared';\nimport {\n ApplicationTheme,\n ConfirmDialogComponent,\n DialogComponentModule,\n DialogService,\n SnackbarComponentModule,\n} from '@testgorilla/tgo-ui';\nimport { GuidedTourModule, GuidedTourService } from 'ngx-guided-tour';\nimport { interval, Observable, Subscription } from 'rxjs';\nimport { switchMap, take, tap } from 'rxjs/operators';\n\nimport { CodingTestsResultsModel } from '../../models/coderunner-execution-results';\nimport { LATLanguages } from '../../models/lat-languages';\nimport { Modes } from '../../models/mode';\nimport { PasteData } from '../../models/paste-data';\nimport {\n ProgrammingLanguage,\n ProgrammingLanguageVersioned,\n} from '../../models/programming-language';\nimport { ExampleTestCase, SqlTestCase } from '../../models/test-cases';\nimport { Themes } from '../../models/theme';\nimport { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';\nimport { ViewMode } from '../../models/view-mode';\nimport {\n CandidatureApiService,\n CoderunnerApiService,\n CodingTestService,\n CodingTestTourMode,\n CodingTestTourService,\n} from '../../services/candidate-coding-test-services';\nimport { CodingTestConfigService } from '../../services/coding-test-config.service';\nimport { LibCodingTestService } from '../../services/lib-coding-test.service';\nimport { CodeEditorLanguages } from '../code-editor/helpers/code-editor-helper.model';\nimport { TgoCodingTestComponent } from '../tgo-coding-test/tgo-coding-test.component';\n\n@UntilDestroy()\n@Component({\n selector: 'tgo-coding-test-candidate-view',\n templateUrl: './tgo-coding-test-candidate-view.component.html',\n styleUrls: ['./tgo-coding-test-candidate-view.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n TranslocoModule,\n DialogComponentModule,\n SnackbarComponentModule,\n TgoCodingTestComponent,\n GuidedTourModule,\n CommonModule,\n RouterModule,\n ],\n providers: [\n TranslocoLazyModuleUtils.getScopeProvider(\n 'tgo-coding-test',\n getAvailableLangs(),\n ROOT_TRANSLATIONS_SCOPE,\n (lang: string) => {\n // Fetch from app assets; demo app copies the library assets to\n // /assets/tgo-coding-test via project.json.\n const url = new URL(`assets/tgo-coding-test/i18n/${lang}.json`, document.baseURI).href;\n return fetch(url).then(res => res.json());\n }\n ),\n EnvironmentService,\n CoderunnerApiService,\n CodingTestService,\n CodingTestTourService,\n GuidedTourService,\n ThemeService,\n CandidatureApiService,\n MixpanelService,\n // use MockedApiService for local demo ONLY\n ApiService, //{ provide: ApiService, useClass: MockedApiService },\n ],\n})\nexport class TgoCodingTestCandidateViewComponent\n implements OnInit, IQuestionDataContract, OnDestroy\n{\n private readonly dialogService = inject(DialogService);\n private readonly translationScope = inject(TRANSLOCO_SCOPE);\n private readonly candidatureApiService = inject(CandidatureApiService);\n private readonly codingTestTourService = inject(CodingTestTourService);\n private readonly libCodingTestService = inject(LibCodingTestService);\n private readonly environmentService = inject(EnvironmentService);\n private readonly codingTestService = inject(CodingTestService);\n private readonly translocoService = inject(TranslocoService);\n private readonly themeService = inject(ThemeService);\n private readonly apiService = inject(ApiService);\n private readonly route = inject(ActivatedRoute);\n private readonly codingTestConfigService = inject(CodingTestConfigService);\n\n @Input() assessment?: Assessment;\n @Input({ required: true }) question!: Question;\n @Input({ required: true }) test!: TestResultRead;\n @Input() expirationObservable?: Observable<void>;\n @Input() completeObservable?: Observable<void>;\n @Input() isDemo?: boolean;\n\n @Output() validationStatusChanged = new EventEmitter<any>(); // eslint-disable-line @typescript-eslint/no-explicit-any\n @Output() antiCheatingConfigurationChanged = new EventEmitter<IAntiCheatingState | null>();\n @Output() fullscreenChanged = new EventEmitter<boolean>();\n @Output() themeChanged = new EventEmitter<ApplicationTheme>();\n @Output() codingFullscreenChanged = new EventEmitter<boolean>();\n @Output() navigationButtonStateChanged = new EventEmitter<INavigationButtonState | null>();\n @Output() configurationStateChanged = new EventEmitter<IConfigurationState | null>();\n @Output() submissionStateChanged = new EventEmitter<ISubmissionState | null>();\n @Output() loadingStateChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @HostBinding('class') hostClass = 'micro-question-code';\n\n private readonly subscription: Subscription = new Subscription();\n\n initCode = '';\n viewModes = ViewMode;\n mode: Modes = Modes.Running;\n companyColor = this.themeService.getCompanyColor();\n initCodesMap = new Map<CodeEditorLanguages, string>();\n languages = signal<LATLanguages>([]);\n codingLibTranslations = signal<{ [key: string]: string }>({});\n rawLanguages: ProgrammingLanguage[] = [];\n currentLanguage?: string;\n isSQL = false;\n isLAT = true;\n code = '';\n codingTestResults?: CodingTestsResultsModel;\n testResultsLoading = computed(() => this.codingTestService.isTestResultsLoading());\n exampleTestCases: ExampleTestCase[] = [];\n activeGuidedTourId$ = this.codingTestTourService.activeGuidedTourId$;\n firstTestRunComplete = false;\n canopyUiTheme: ApplicationTheme = 'light';\n\n private wasTourShown = false;\n\n ngOnDestroy(): void {\n if (!this.test?.is_preview_mode) {\n this.antiCheatingConfigurationChanged.emit({\n fullscreenTracking: false,\n mouseEventTracking: false,\n snapshotsTracking: false,\n });\n }\n\n this.subscription.unsubscribe();\n }\n\n ngOnInit() {\n this.setupState();\n this.handleGuidedTour();\n\n if (!this.test?.is_preview_mode) {\n this.antiCheatingConfigurationChanged.emit({\n fullscreenTracking: true,\n mouseEventTracking: true,\n snapshotsTracking: true,\n });\n\n this.setupAutosaveEvent();\n }\n\n const isNextQuestionDisabled = !this.test?.is_preview_mode;\n\n this.configurationStateChanged.emit({\n isSavingQuestionDisabled: isNextQuestionDisabled,\n });\n\n this.navigationButtonStateChanged.emit({\n disabled: isNextQuestionDisabled,\n });\n\n this.subscription.add(\n this.expirationObservable?.subscribe(() => {\n this.clearSavedCode();\n if (!this.test?.is_preview_mode) {\n this.clearLastLanguageSelected();\n this.submitCode();\n this.enableNextButton();\n }\n })\n );\n\n this.subscription.add(\n this.completeObservable?.subscribe(() => {\n if (!this.test?.is_preview_mode) {\n this.openSaveDialog();\n } else {\n this.clearSavedCode();\n }\n })\n );\n\n if (!this.isSQL) {\n this.loadAvailableLanguages();\n this.setTestCases();\n } else {\n this.setSqlTestCases();\n this.setSqlLang();\n this.setSqlInitCode();\n this.loadingStateChanged.emit(false);\n }\n this.setListeners();\n }\n\n openSaveDialog(): void {\n const dialogRef = this.dialogService.open(ConfirmDialogComponent, {\n applicationTheme: this.canopyUiTheme,\n size: 'small',\n panelClass: '',\n extraData: {\n title: translate('CODING_QUESTION.MODALS.FINISH_TEST.TITLE') ?? '',\n message: translate('CODING_QUESTION.MODALS.FINISH_TEST.MESSAGE') ?? '',\n confirmButtonText: translate('CODING_QUESTION.MODALS.FINISH_TEST.SUBMIT') ?? '',\n cancelButtonText: translate('CODING_QUESTION.MODALS.FINISH_TEST.CANCEL') ?? '',\n color: this.companyColor,\n },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (!result) {\n return;\n }\n\n this.clearSavedCode();\n this.clearLastLanguageSelected();\n this.submitCode();\n this.enableNextButton();\n });\n }\n\n private clearLastLanguageSelected(): void {\n this.libCodingTestService.clearLastLanguageSelected();\n }\n\n private clearSavedCode() {\n this.libCodingTestService.triggerClearSavedCode();\n }\n\n private submitCode() {\n if (this.code) {\n this.submissionStateChanged?.emit({\n text: this.code,\n language: this.getVersionedLanguage(),\n });\n }\n }\n\n private getVersionedLanguage(): string | undefined {\n const language = this.currentLanguage;\n\n if (!language) {\n return;\n }\n\n if (this.isSQL) {\n return ProgrammingLanguageVersioned.SQLite;\n }\n\n return `${language}-${this.libCodingTestService.getVersion()}`;\n }\n\n private enableNextButton(): void {\n this.configurationStateChanged.emit({\n isSavingQuestionDisabled: false,\n });\n }\n\n languageChange(selectedLangName: CodeEditorLanguages) {\n const selectedLang = this.rawLanguages.filter(\n language => language.name === selectedLangName\n )[0];\n this.codingTestService.handleLanguageChangeModal(\n this.question.id,\n selectedLang,\n this.canopyUiTheme,\n this.companyColor\n );\n }\n\n updateCode(code: string): void {\n this.code = code;\n }\n\n runTest(): void {\n this.codingTestService.runTest(\n this.question.id,\n this.code,\n this.isLAT,\n this.isSQL,\n false,\n !!this.test.is_preview_mode,\n this.question.question_id,\n this.test.id,\n this.test\n );\n\n if (!this.firstTestRunComplete) {\n this.navigationButtonStateChanged.emit({\n disabled: false,\n });\n\n this.firstTestRunComplete = true;\n }\n }\n\n screenshotPaste(event: PasteData): void {\n if (event.type !== 'paste') {\n return;\n }\n\n this.codingTestService\n .sendCopypasteEvent$(this.code, event.data, this.question.id)\n .pipe(take(1))\n .subscribe();\n }\n\n private setupAutosaveEvent(): void {\n this.subscription.add(\n interval(5000)\n .pipe(\n untilDestroyed(this),\n switchMap(() => this.codingTestService.sendAutosaveEvent$(this.code, this.question.id))\n )\n .subscribe()\n );\n }\n\n private setupState(): void {\n this.setApiParams();\n this.setCodingLibTranslations();\n this.setIsSQL();\n this.setIsLat();\n this.setMode();\n }\n\n private setCodingLibTranslations() {\n // TRANSLOCO_SCOPE is passed here to make sure that translation scope is resolved by the library\n this.translocoService\n .selectTranslateObject(`CODING_LIB`, {}, this.translationScope as string)\n .pipe(take(1))\n .subscribe(translations => {\n this.codingLibTranslations.set(translations);\n });\n }\n\n private setApiParams(): void {\n const invitationUuid = this.route.snapshot.firstChild?.url[0].path || '';\n const contentLanguage = this.assessment?.locale ?? 'en';\n const apiUrl = this.codingTestConfigService.getApiUrl();\n\n this.apiService.setParams(invitationUuid, contentLanguage, ROOT_TRANSLATIONS_SCOPE, apiUrl);\n }\n\n private setIsSQL(): void {\n this.isSQL = this.question?.context.code_language === 'sql';\n this.codingTestService.setIsSQLTest(this.isSQL);\n }\n\n private setSqlInitCode(): void {\n this.initCode = this.question?.context.initial_code;\n }\n\n private setSqlLang(): void {\n const sqlLanguage = this.question?.context.code_language as CodeEditorLanguages;\n this.languages.set([\n {\n label: 'nonLAT',\n value: sqlLanguage,\n },\n ]);\n this.currentLanguage = sqlLanguage;\n }\n\n private setIsLat(): void {\n // todo: add response field if possible ?\n // this.isLAT = this.test?.is_language_agnostic_test ?? false;\n this.isLAT = !this.isSQL;\n }\n\n private setMode(): void {\n this.mode = this.test?.is_preview_mode ? Modes.Preview : Modes.Running;\n }\n\n private listenGuidedTourStart(): void {\n this.libCodingTestService.startGuidedTour$.pipe(untilDestroyed(this)).subscribe(() => {\n const guidedTourMode = this.test?.is_preview_mode\n ? CodingTestTourMode.PracticeQuestion\n : CodingTestTourMode.RealQuestion;\n\n this.codingTestTourService.init(guidedTourMode);\n });\n }\n\n private handleGuidedTour() {\n if (!this.environmentService.isMobile && !this.wasTourShown && this.test?.is_preview_mode) {\n const delayForGuidedTour = 1500;\n setTimeout(() => {\n this.codingTestTourService.init(CodingTestTourMode.PracticeQuestion);\n this.wasTourShown = true;\n }, delayForGuidedTour);\n }\n }\n\n private getAllLanguages(): ProgrammingLanguage[] {\n const boilerplates = this.question?.context.boilerplates ?? [];\n return boilerplates.map(({ programming_language }) => programming_language);\n }\n\n private loadAvailableLanguages(): void {\n this.candidatureApiService\n .getAvailableLanguages$()\n .pipe(\n take(1),\n tap(availableLangsIds => {\n const languages = this.getAllLanguages();\n const areAllLangsAvailable = availableLangsIds.length === 0;\n\n this.rawLanguages = areAllLangsAvailable\n ? languages\n : languages.filter(({ id }) => id !== undefined && availableLangsIds.includes(id));\n this.languages.set(\n this.rawLanguages.map(language => ({\n label:\n typeof language.name === 'string' && language.name.length > 0\n ? language.name.charAt(0).toUpperCase() + language.name.slice(1)\n : 'Unknown',\n value: language.name as CodeEditorLanguages,\n version: language.version,\n }))\n );\n }),\n tap(() => {\n this.loadingStateChanged.emit(false);\n }),\n tap(() => {\n const boilerplates = this.question?.context.boilerplates ?? [];\n boilerplates.forEach(boilerplate => {\n if (boilerplate.programming_language.name) {\n this.initCodesMap.set(\n boilerplate.programming_language.name as CodeEditorLanguages,\n boilerplate.code\n );\n }\n });\n }),\n switchMap(() => this.libCodingTestService.currentLanguage$),\n tap((language: CodeEditorLanguages) => {\n const currentLang = this.rawLanguages.find(x => x.name === language);\n if (currentLang) {\n this.codingTestService.setCurrentLanguageLAT(currentLang);\n }\n const initCode = this.initCodesMap.get(language);\n if (initCode) {\n this.initCode = initCode;\n this.updateCode(this.initCode);\n }\n })\n )\n .subscribe(() => {\n this.libCodingTestService.setBoilerplateLoadingStatus(false);\n });\n }\n\n private listenThemeChange(): void {\n this.libCodingTestService.themeChanged$.pipe(untilDestroyed(this)).subscribe(theme => {\n this.canopyUiTheme = theme === Themes.Dark ? 'dark' : 'light';\n this.themeChanged.emit(this.canopyUiTheme);\n });\n }\n\n private listenFullscreenChange(): void {\n this.libCodingTestService.isFullscreen$\n .pipe(untilDestroyed(this))\n .subscribe(isFullscreen => this.fullscreenChanged.emit(isFullscreen));\n }\n\n private listenDeleteCustomTestCases(): void {\n this.codingTestService\n .listenDeleteCustomTestCases()\n .pipe(untilDestroyed(this))\n .subscribe(({ index }) => {\n this.codingTestService.handleDeleteTestCaseModal(\n index,\n this.canopyUiTheme,\n this.companyColor\n );\n });\n }\n\n private listenLanguageChange(): void {\n this.libCodingTestService.currentLanguage$\n .pipe(untilDestroyed(this))\n .subscribe((language: CodeEditorLanguages) => {\n this.currentLanguage = language;\n const code = this.initCodesMap.get(language);\n if (code) {\n this.initCode = code;\n } else {\n this.initCode = '';\n console.warn(`No initial code found for language: ${language}`);\n }\n });\n }\n\n private listenResetCode(): void {\n this.codingTestService\n .listenCodingTestChanges()\n .pipe(untilDestroyed(this))\n .subscribe(() => {\n this.codingTestService.handleResetCodeModal(this.canopyUiTheme, this.companyColor);\n });\n }\n\n private listenTestResults(): void {\n this.codingTestService.codingTestResults$.pipe(untilDestroyed(this)).subscribe(results => {\n this.codingTestResults = results;\n });\n }\n\n private setSqlTestCases(): void {\n const testCases = this.question?.context?.sql_testcases.map(testCase => ({\n ...testCase,\n post_sql: testCase.post_sql || '',\n initial_sql: this.question?.context?.initial_sql || '',\n })) as SqlTestCase[];\n this.codingTestService.setSqlTestCases(testCases);\n this.exampleTestCases = testCases.map(this.codingTestService.transformToExampleSQLTestCase);\n }\n\n private setTestCases(): void {\n this.exampleTestCases = this.question?.context?.testcases?.map(\n this.codingTestService.transformToExampleLATtestCase\n );\n }\n\n private setListeners(): void {\n this.listenGuidedTourStart();\n this.listenFullscreenChange();\n this.listenThemeChange();\n this.listenResetCode();\n this.codingTestService.trackConfigChanged(!!this.test?.is_preview_mode);\n this.listenTestResults();\n if (this.isLAT) {\n this.listenDeleteCustomTestCases();\n this.listenLanguageChange();\n }\n }\n}\n","<ng-container *transloco=\"let t; read: 'CODING_QUESTION'\">\n @if (languages()?.length && codingLibTranslations()) {\n <tgo-coding-test\n class=\"coding-lib\"\n [assessmentId]=\"assessment!.uuid!\"\n [questionId]=\"question!.question_id!\"\n [isLAT]=\"isLAT\"\n [canAddCustomTestCases]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [languages]=\"languages()\"\n [initCode]=\"initCode\"\n [mode]=\"mode\"\n [viewMode]=\"viewModes.Full\"\n [loading]=\"testResultsLoading()\"\n [companyColor]=\"companyColor\"\n [questionText]=\"question.text\"\n [testCasesStatus]=\"codingTestResults?.resume\"\n [runTestResponse]=\"codingTestResults?.listResponse!\"\n [exampleTestCases]=\"exampleTestCases\"\n [applicationTheme]=\"canopyUiTheme\"\n [translations]=\"codingLibTranslations()\"\n (codeChange)=\"updateCode($event)\"\n (runTestClick)=\"runTest()\"\n (languageChange)=\"languageChange($event)\"\n (pasteEvent)=\"screenshotPaste($event)\"\n >\n </tgo-coding-test>\n }\n</ng-container>\n\n<ngx-guided-tour\n [ngClass]=\"activeGuidedTourId$ | async\"\n [ngStyle]=\"{ '--company-color': companyColor }\"\n [class.dark]=\"canopyUiTheme === 'dark'\"\n></ngx-guided-tour>\n\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { TGO_CODING_TEST_CONFIG } from './tgo-coding-test.token';\nimport { TgoCodingTestConfig } from './tgo-coding-test.config';\n\n/**\n * Provides the TGO Coding Test library configuration.\n * \n * This function should be called in the consuming application's\n * app.config.ts (for standalone apps) or module providers.\n * \n * @param config - The configuration object containing required settings\n * @returns EnvironmentProviders that can be added to the application providers\n * \n * @example\n * ```typescript\n * import { provideTgoCodingTest } from '@testgorilla/tgo-coding-test';\n * import { environment } from './environments/environment';\n * \n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideTgoCodingTest({\n * coderunnerV2Endpoint: environment.coderunnerV2Endpoint,\n * }),\n * ],\n * };\n * ```\n */\nexport function provideTgoCodingTest(\n config: TgoCodingTestConfig\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: TGO_CODING_TEST_CONFIG,\n useValue: config,\n },\n ]);\n}\n\n","/*\n * Public API Surface of coding-test\n */\n\nexport { TgoCodingTestComponent } from './lib/components/tgo-coding-test/tgo-coding-test.component';\nexport { TgoCodingTestCandidateViewComponent } from './lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component';\n// Note: CodingTestModule is kept internal for now and not exposed in the public API\n// export * from './lib/components/coding-test.module';\nexport { Config as LibCodingConfig } from './lib/models/configs';\nexport {\n CustomTestCase,\n ExampleTestCase,\n TestCaseResult,\n TestCaseDeletionAction,\n TestCaseDeletionData,\n} from './lib/models/test-cases';\nexport { Themes } from './lib/models/theme';\nexport { ViewMode } from './lib/models/view-mode';\nexport { LATLanguage, LATLanguages } from './lib/models/lat-languages';\nexport { CodeEditorLanguages } from './lib/components/code-editor/helpers/code-editor-helper.model';\nexport { Modes } from './lib/models/mode';\nexport { LibCodingTestService, ResetCodeAction } from './lib/services/lib-coding-test.service';\nexport { StorageCodingService } from './lib/services/storage.service';\nexport { CodingTestConfigService } from './lib/services/coding-test-config.service';\n\n// Configuration exports\nexport {\n TgoCodingTestConfig,\n provideTgoCodingTest,\n} from './lib/config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.LibCodingTestService","i3.ConfigurationsService","i1.LibCodingTestService","i1","i2","i2.TestCasesService","i3.StorageCodingService","i4","i6","i3","take","tap","map","i1.CoderunnerApiService","ThemeService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA;AACO,MAAM,mBAAmB,GAAG,YAAY;;ICXnC;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,QAAA,CAAA,SAAA,CAAA,GAAA,KAAe;AACf,IAAA,QAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,QAAA,CAAA,6BAAA,CAAA,GAAA,8BAA4D;AAC9D,CAAC,EALW,QAAQ,KAAR,QAAQ,GAKnB,EAAA,CAAA,CAAA;;MCGY,qBAAqB,CAAA;AACxB,IAAA,cAAc,GAAW;AAC/B,QAAA,CAAA,aAAA,sCAA8C,eAAA;AAC9C,QAAA,CAAA,UAAA,mCAA6B,CAAC;AAC9B,QAAA,CAAA,WAAA,oCAA8B,EAAE;AAChC,QAAA,CAAA,eAAA,8CAAwC,IAAI;AAC5C,QAAA,CAAA,oBAAA,mDAA6C,IAAI;AACjD,QAAA,CAAA,eAAA,8CAAwC,IAAI;KAC7C;AAEO,IAAA,iBAAiB,GAAG;AAC1B,QAAA,CAAA,aAAA,sCAAgC;AAC9B,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,wCAAkB;AACzC,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,kCAAe;AACtC,SAAA;AACD,QAAA,CAAA,UAAA,mCAA6B;AAC3B,YAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AACxB,YAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AACxB,YAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE;AAClC,YAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AACxB,YAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AACzB,SAAA;AACD,QAAA,CAAA,WAAA,oCAA8B;AAC5B,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE;AACtC,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7B,SAAA;KACF;AAEO,IAAA,uBAAuB,GAAG;AAChC,QAAA,CAAA,eAAA,8CAAwC,IAAI;AAC5C,QAAA,CAAA,oBAAA,mDAA6C,IAAI;AACjD,QAAA,CAAA,eAAA,8CAAwC,IAAI;KAC7C;IAEO,WAAW,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC,cAAc,CAAC;AACtE,IAAA,OAAO,GAAuB,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AAErD,IAAA,uBAAuB,GAAG,IAAI,OAAO,EAAmB;AAChE,IAAA,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE;AAEzD,IAAA,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;IAElD,WAAW,GAAuB,IAAI,CAAC,OAAO,CAAC,IAAI,CACjD,GAAG,CAAC,MAAM,IAAI,MAAM,CAAwC,aAAA,oCAAA,CAAC,EAC7D,oBAAoB,EAAE,CACvB;IAEO,sBAAsB,GAAG,IAAI;AAE7B,IAAA,4BAA4B,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC1E,IAAA,wBAAwB,GAAG,IAAI,CAAC,4BAA4B,CAAC,YAAY,EAAE;AAE3E,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,aAAa,CAA8B,aAAA,oCAAA,GAAG,KAAK;AACxD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;;AAGpC,IAAA,SAAS,CAAC,MAAc,EAAA;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM;;AAG7B,IAAA,kBAAkB,CAAC,YAA6B,EAAA;AAC9C,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC;;IAGjD,gBAAgB,GAAA;AACd,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE;;IAGlC,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;;IAG9C,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC;;IAG/C,oBAAoB,GAAA;AAMlB,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;;IAGtC,0BAA0B,GAAA;AACxB,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,uBAAuB,EAAE;;IAG5C,yBAAyB,GAAA;QACvB,OAAO,IAAI,CAAC,sBAAsB;;AAGpC,IAAA,yBAAyB,CAAC,KAAc,EAAA;AACtC,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;;wGApG1B,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA;;4FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCgBY,oBAAoB,CAAA;AACd,IAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAE9D,IAAA,cAAc,GAAG,IAAI,OAAO,EAAmB;AACvD,IAAA,UAAU,GAAgC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAEpE,IAAA,eAAe,GAAG,IAAI,OAAO,EAAU;AAC/C,IAAA,WAAW,GAAuB,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AAE7D,IAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC/D,IAAA,aAAa,GAAwB,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AAElE,IAAA,wBAAwB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC;AACrE,IAAA,qBAAqB,GAAwB,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE;AAEzF,IAAA,aAAa,GAAuB,IAAI,CAAC,qBAAqB,CAAC,WAAW;AAElE,IAAA,kBAAkB,GAAG,IAAI,OAAO,EAAwB;AAChE,IAAA,eAAe,GAAqC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAElF,IAAA,oBAAoB,GAAG,IAAI,OAAO,EAAwB;AAClE,IAAA,iBAAiB,GAAqC,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;AAEtF,IAAA,mBAAmB,GAAG,IAAI,aAAa,CAAsB,CAAC,CAAC;AACvE,IAAA,gBAAgB,GAAoC,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;AAEnF,IAAA,kBAAkB,GAAG,IAAI,OAAO,EAAW;AACnD,IAAA,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAEhD,IAAA,iBAAiB,GAAG,IAAI,OAAO,EAAW;AAClD,IAAA,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AAE9C,IAAA,oBAAoB,GAAG,IAAI,OAAO,EAAQ;AAClD,IAAA,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;AAEnD,IAAA,SAAS;AAEjB,IAAA,QAAQ;AACA,IAAA,OAAO;IAEf,mBAAmB,GAAG,KAAK,CACzB,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,YAAY,KAAK;AACnB,QAAA,aAAa,EAAE,YAAY;KAC5B,CAAC,CAAC,CACJ,EACD,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAC/C;AAED,IAAA,aAAa,CAAC,SAAkB,EAAA;AAC9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;;IAGxC,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,iCAAqB;;IAG/C,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;;IAGlC,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,yCAAyB;;AAGnD,IAAA,iBAAiB,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGjC,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,4CAA6B;;IAG3D,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,8CAA8B;;AAG5D,IAAA,sBAAsB,CAAC,KAAa,EAAA;AAClC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAA,KAAA,mCAA8B,KAAK,EAAE,CAAC;;AAG/E,IAAA,uBAAuB,CAAC,KAAa,EAAA;AACnC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAA,SAAA,uCAAkC,KAAK,EAAE,CAAC;;AAGnF,IAAA,qBAAqB,CAAC,KAA0B,EAAA;AAC9C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGtC,IAAA,eAAe,CAAC,SAA+C,EAAA;AAC7D,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;IAG5B,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;IAGvB,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,KAAK,IAAI,cAAc,CAAC;;IAGtF,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;;AAGpC,IAAA,UAAU,CAAC,OAAe,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;IAGxB,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;;AAGrB,IAAA,WAAW,CAAC,IAAY,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;IAGtB,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;AAGtB,IAAA,2BAA2B,CAAC,KAAc,EAAA;AACxC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;;IAG3C,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGpC,yBAAyB,GAAA;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;;wGAnIxB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;SCtBe,QAAQ,CAAC,IAAY,EAAE,OAAyB,MAAM,EAAA;IACpE,QAAQ,IAAI;AACV,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAC9B,QAAA,KAAK,MAAM;YACT,OAAO,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AACnC,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;;AAE7D;;MCOa,oBAAoB,CAAA;AAgDrB,IAAA,OAAA;AACA,IAAA,oBAAA;AACA,IAAA,qBAAA;IAjDO,uBAAuB,GAAG,CAAC;AACpC,IAAA,aAAa,GAAkB;QACrC,OAAO,EAAE,IAAI,CAAC,uBAAuB;AACrC,QAAA,MAAM,EAAE,EAAY;AACpB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;KACzB;IACgB,GAAG,GAAG,WAAW;AAC1B,IAAA,YAAY;AACZ,IAAA,UAAU;AACV,IAAA,QAAQ;AACR,IAAA,eAAe;AACf,IAAA,oBAAoB;AACpB,IAAA,KAAK;AACL,IAAA,WAAW;AACX,IAAA,SAAS;AACT,IAAA,sBAAsB;AACtB,IAAA,kBAAkB;AAClB,IAAA,wBAAwB;AACxB,IAAA,2BAA2B;AAC3B,IAAA,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,EAAE,CAAC;;IAGnF,oBAAoB,GAAG,CAAC;;IAExB,0BAA0B,GAAG,CAAC;;IAE9B,eAAe,GAAG,EAAE;;IAEpB,6BAA6B,GAAG,kBAAkB;;;;;;;;;;;;;AAenE,IAAA,WAAA;;IAEU,OAA4B,EAC5B,oBAA0C,EAC1C,qBAA4C,EAAA;QAF5C,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;;QAG7B,IAAI,CAAC,yBAAyB,EAAE;;AAGlC;;;AAGG;IACK,yBAAyB,GAAA;AAC/B,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;;YAGjD,IAAI,CAAC,SAAS,EAAE;gBACd;;;AAIF,YAAA,IAAI,EAAE,SAAS,IAAI,SAAS,CAAC,EAAE;;;;iBAGxB;;AAEL,gBAAA,IAAI,CAAC,aAAa,GAAG,SAA0B;;;QAEjD,OAAO,KAAK,EAAE;;AAEd,YAAA,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC;YAC7E,IAAI,CAAC,aAAa,GAAG;gBACnB,OAAO,EAAE,IAAI,CAAC,uBAAuB;AACrC,gBAAA,MAAM,EAAE,EAAY;AACpB,gBAAA,YAAY,EAAE,KAAK;AACnB,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB;YACD,IAAI,CAAC,SAAS,EAAE;;;IAIpB,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAChC,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AACrD,iBAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB;AAC9B,iBAAA,SAAS,CAAC,CAAC,IAAY,KAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;oBAChE,IAAI,CAAC,mBAAmB,EAAE;AAC1B,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACvF,oBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM;oBAClF,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAK;AAC1C,oBAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC;oBACvC,IAAI,CAAC,SAAS,EAAE;;AAEpB,aAAC,CAAC;;AAGN,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC5B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC;AAClD,iBAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB;AAC9B,iBAAA,SAAS,CAAC,CAAC,MAAc,KAAI;gBAC5B,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE;AACzC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC3C,IAAI,CAAC,SAAS,EAAE;AAClB,aAAC,CAAC;;AAGN,QAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAClC,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AACvD,iBAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB;AAC9B,iBAAA,SAAS,CAAC,CAAC,YAAqB,KAAI;AACnC,gBAAA,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,YAAY;AAC9C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC3C,IAAI,CAAC,SAAS,EAAE;AAClB,aAAC,CAAC;;QAGN,IAAI,CAAC,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,KAAK,EAAE;AACnD,YAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAC1D,iBAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB;AAC9B,iBAAA,SAAS,CAAC,CAAC,QAA6B,KAAI;AAC3C,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG;AACnC,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE;iBAChD;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC3C,IAAI,CAAC,SAAS,EAAE;AAClB,aAAC,CAAC;;;AAIR,IAAA,kBAAkB,CAChB,QAA6B,EAC7B,YAAoB,EACpB,UAAkB,EAClB,eAAwB,EACxB,oBAA6B,EAC7B,KAAc,EACd,IAAW,EAAA;AAEX,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,oBAAoB,GAAG,oBAAoB;AAChD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,sCAAsB,IAAI;;AAG/C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;;QAGjD,IAAI,SAAS,EAAE;;AAEb,YAAA,IAAI,EAAE,SAAS,IAAI,SAAS,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAA4B,CAAC;;iBAC/C;AACL,gBAAA,IAAI,CAAC,aAAa,GAAG,SAA0B;;;YAIjD,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAC/D,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;;;AAIpE,IAAA,iBAAiB,CAAC,MAAuB,EAAA;;AAE/C,QAAA,MAAM,MAAM,GAAoB;YAC9B,OAAO,EAAE,IAAI,CAAC,uBAAuB;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;SACzB;;;;AAKD,QAAA,KAAK,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AACzE,YAAA,IAAI,YAAY,KAAK,mBAAmB,EAAE;gBACxC;;;AAIF,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,6BAA6B;;YAG5D,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE;AACrC,gBAAA,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE;;;YAIvC,MAAM,YAAY,GAAiB,EAAE;YAErC,YAAY,CAAC,MAAM,GAAG;AACpB,gBAAA,GAAG,QAAQ;AACX,gBAAA,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB;;AAGD,YAAA,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE;;YAGtC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,iBAAiB,CAAC,GAAG,YAAY;;;AAIpE,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,MAAM,EAAE;;QAGlC,IAAI,CAAC,SAAS,EAAE;;IAGV,mBAAmB,GAAA;;AAEzB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACtD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;;;AAIxD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACvE,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG;AACnE,gBAAA,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB;;AAGH,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;;QAGvF,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YAC3C,YAAY,CAAC,OAAO,GAAG;AACrB,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,YAAY,EAAE,EAAE;AAChB,gBAAA,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB;;aACI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAClD,YAAY,CAAC,MAAM,GAAG;AACpB,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,YAAY,EAAE,EAAE;AAChB,gBAAA,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;aACzB;;;AAIG,IAAA,kBAAkB,CAAC,IAA6C,EAAA;AACtE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG;;AAGvB,QAAA,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;AAC1D,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,YAAY,GAAG,GAAG;;;AAIvF,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,GAAG;;AAGvC;;;AAGG;AACK,IAAA,2BAA2B,CAAC,UAAkB,EAAA;;QAEpD,IAAI,CAAC,kBAAkB,CAAC;YACtB,oBAAoB,EAAE,CAAC;YACvB,oBAAoB,EAAE,UAAU;YAChC,sBAAsB,EAAE,GAAG;YAC3B,yBAAyB,EAAE,GAAG;AAC/B,SAAA,CAAC;;AAGJ;;;AAGG;AACK,IAAA,kBAAkB,CAAC,OAM1B,EAAA;AACC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;;QAGtB,MAAM,cAAc,GAAG,OAAO,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB;QAChF,MAAM,mBAAmB,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;AACrD,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,oBAAoB,IAAI,CAAC;;AAGpD,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,mBAAmB,GAAG,UAAU,EAAE;;YAE/G,IAAI,CAAC,aAAa,GAAG;gBACnB,OAAO,EAAE,IAAI,CAAC,uBAAuB;AACrC,gBAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;AACjC,gBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY;AAC7C,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,YAAY,EAAE,GAAG;aAClB;YACD,IAAI,CAAC,SAAS,EAAE;YAChB;;QASF,MAAM,kBAAkB,GAAyB,EAAE;;AAGnD,QAAA,IAAI,wBAAgC;AACpC,QAAA,IAAI,OAAO,CAAC,0BAA0B,EAAE;;AAEtC,YAAA,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC;;aAC/D;;AAEL,YAAA,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,sBAAsB,IAAI,GAAG,IAAI,EAAE,CAAC;AACjE,YAAA,wBAAwB,GAAG,IAAI,CAAC,GAAG,CACjC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC;AACzC,YAAA,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;aAC/B;;;AAIH,QAAA,KAAK,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;YACtF,IAAI,sBAAsB,GAAG,CAAC;;YAG9B,IAAI,iBAAiB,GAAG,KAAK;AAE7B,YAAA,KAAK,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;;gBAElE,IAAI,CAAC,YAAY,EAAE;oBACjB;;;gBAIF,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,EAAE,YAAY,IAAI,CAAC;gBAC3D,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,YAAY,IAAI,CAAC;AACzD,gBAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,YAAY,IAAI,CAAC,CAAC;;gBAG9F,MAAM,eAAe,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,GAAG,WAAW,GAAG,wBAAwB;gBACvF,MAAM,cAAc,GAAG,UAAU,GAAG,CAAC,IAAI,GAAG,GAAG,UAAU,GAAG,wBAAwB;;AAGpF,gBAAA,IAAI,eAAe,IAAI,YAAY,CAAC,OAAO,EAAE;oBAC3C,OAAO,YAAY,CAAC,OAAO;;AAG7B,gBAAA,IAAI,cAAc,IAAI,YAAY,CAAC,MAAM,EAAE;oBACzC,OAAO,YAAY,CAAC,MAAM;;;gBAI5B,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AACjD,oBAAA,OAAO,SAAS,CAAC,UAAU,CAAC;;qBACvB;oBACL,iBAAiB,GAAG,IAAI;oBACxB,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;;;;YAKnF,IAAI,CAAC,iBAAiB,EAAE;gBACtB,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC;;iBAC9C;;gBAEL,kBAAkB,CAAC,IAAI,CAAC;AACtB,oBAAA,EAAE,EAAE,YAAY;AAChB,oBAAA,YAAY,EAAE,sBAAsB;AACrC,iBAAA,CAAC;;;;AAKN,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,yBAAyB,IAAI,CAAC;AAC9D,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;;AAGzE,QAAA,IAAI,kBAAkB,CAAC,MAAM,GAAG,eAAe,EAAE;;AAE/C,YAAA,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;;AAGlE,YAAA,KAAK,IAAI,CAAC,GAAG,eAAe,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChE,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;;;;QAKnE,IAAI,CAAC,SAAS,EAAE;;AAGlB,IAAA,cAAc,CAAC,QAA6B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;;AAG1B;;;AAGG;AACK,IAAA,mBAAmB,CAAC,aAA8B,EAAA;;;;AAKxD,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,mBAAmB,EAAE;AAC7C,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;AAElB,gBAAA,MAAM,IAAI,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI;gBAC/D,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;AACjC,oBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;AAI9B,YAAA,OAAO,IAAI;;aACN;;AAEL,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,MAAM,IAAI,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI;gBAC/D,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;AACjC,oBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;AAI9B,YAAA,OAAO,IAAI;;;IAIf,YAAY,GAAA;AACV,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE;QACzC,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,IAAI;;;AAIb,QAAA,IAAI,SAAS,IAAI,aAAa,EAAE;;YAE9B,MAAM,MAAM,GAAG,aAAa;YAC5B,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;YAE5D,IAAI,CAAC,cAAc,EAAE;AACnB,gBAAA,OAAO,IAAI;;;YAIb,IAAI,IAAI,CAAC,UAAU,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACtD,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACpD,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM;AAC5E,gBAAA,IAAI,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACpD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;;AAIvC,YAAA,IACE,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,6BAA6B;AACtD,gBAAA,cAAc,CAAC,IAAI,CAAC,6BAA6B,CAAC,EAClD;gBACA,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,6BAA6B,CAAC;AACvE,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM;AAC5E,gBAAA,IAAI,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACpD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;;AAIvC,YAAA,OAAO,IAAI;;aACN;;AAEL,YAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAW;;;IAI5D,kBAAkB,GAAA;AAIhB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE;QACzC,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,aAAa,CAAC,eAAe,IAAI,IAAI;;IAG9C,iBAAiB,GAAA;AACf,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE;QACzC,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,IAAI;;;AAIb,QAAA,IAAI,SAAS,IAAI,aAAa,EAAE;;YAE9B,MAAM,MAAM,GAAG,aAAa;YAC5B,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;YAE5D,IAAI,CAAC,cAAc,EAAE;AACnB,gBAAA,OAAO,IAAI;;;YAIb,IAAI,IAAI,CAAC,UAAU,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACtD,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACpD,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM;AAC5E,gBAAA,IAAI,QAAQ,EAAE,YAAY,EAAE;oBAC1B,OAAO,QAAQ,CAAC,YAAY;;;;;AAMhC,YAAA,IACE,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,6BAA6B;AACtD,gBAAA,cAAc,CAAC,IAAI,CAAC,6BAA6B,CAAC,EAClD;gBACA,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,6BAA6B,CAAC;AACvE,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM;AAC5E,gBAAA,IAAI,QAAQ,EAAE,YAAY,EAAE;oBAC1B,OAAO,QAAQ,CAAC,YAAY;;;AAIhC,YAAA,OAAO,IAAI;;aACN;;YAEL,MAAM,MAAM,GAAG,aAAa;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE;gBAC1E,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,YAAY;;AAE3D,YAAA,OAAO,IAAI;;;IAIf,cAAc,GAAA;AACZ,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE;AACzC,QAAA,OAAO,aAAa,EAAE,MAAM,GAAG,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,IAAI;;IAGnE,sBAAsB,GAAA;AACpB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE;AACzC,QAAA,OAAO,aAAa,EAAE,YAAY,KAAK,SAAS,GAAG,aAAa,CAAC,YAAY,GAAG,IAAI;;IAGtF,cAAc,GAAA;QACZ,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QACvF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC;QAE5G,IAAI,UAAU,GAAG,KAAK;AACtB,QAAA,cAAc,CAAC,OAAO,CAAC,QAAQ,IAAG;YAChC,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,IAAI,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBACjC,UAAU,GAAG,IAAI;;AAErB,SAAC,CAAC;QACF,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,SAAS,EAAE;;;IAIpB,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,IAAI;AACzC,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,SAAS,EAAE;;IAGlB,mBAAmB,GAAA;QACjB,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACvF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM;QAElF,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM;AAEhE,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,cAAc,CAAC,YAAY,GAAG,EAAE;AAChC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC;;iBAClC,IAAI,SAAS,EAAE;AACpB,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;AACtE,gBAAA,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AACpC,gBAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE;AACvE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;;YAE7C,IAAI,CAAC,SAAS,EAAE;;;AAIpB,IAAA,aAAa,CAAC,OAAe,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;YACtC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,GAAG,OAAO;AACpD,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;YAC3C,IAAI,CAAC,SAAS,EAAE;;;AAIpB,IAAA,eAAe,CAAC,SAA+C,EAAA;AAC7D,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE;YACrE,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACvF,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM;YAElF,IAAI,cAAc,EAAE;AAClB,gBAAA,cAAc,CAAC,YAAY,GAAG,SAAS;AACvC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC;gBACvC,IAAI,CAAC,SAAS,EAAE;;;;IAKd,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC;;IAG1C,YAAY,GAAA;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAoC;;AAG3E;;;;AAIG;IACH,4BAA4B,GAAA;;AAE1B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;;QAGjD,IAAI,CAAC,SAAS,EAAE;YACd;;;AAIF,QAAA,IAAI,EAAE,SAAS,IAAI,SAAS,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAA4B,CAAC;;aAC/C;;AAEL,YAAA,IAAI,CAAC,aAAa,GAAG,SAA0B;;;AAI/C,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB;AAChD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;;AAG/C,YAAA,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC;;;AAI3C,QAAA,IAAI;YACF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AACzD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;;AAGzD,YAAA,IAAI,QAAQ,GAAG,IAAI,EAAE;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,gCAAgC,QAAQ,CAAA,4BAAA,CAA8B,CAAC;;gBAGpF,IAAI,CAAC,kBAAkB,CAAC;oBACtB,oBAAoB,EAAE,GAAG;oBACzB,sBAAsB,EAAE,IAAI;oBAC5B,yBAAyB,EAAE,GAAG;AAC/B,iBAAA,CAAC;;gBAGF,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC5D,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC;AAE/D,gBAAA,IAAI,WAAW,GAAG,IAAI,EAAE;;AAEtB,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW;;AAElD,oBAAA,MAAM,kBAAkB,GAAG,CAAC,GAAiC,KAC3D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,EAAE,YAAY,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACrG,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAC9C,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KACX,kBAAkB,CAAC,CAAiC,CAAC;AACrD,wBAAA,kBAAkB,CAAC,CAAiC,CAAC,CACxD;;AAGD,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;AAC7C,oBAAA,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,EAAE;AAEnC,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;wBAClC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;wBAC7B,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAoC;;oBAG3E,IAAI,CAAC,SAAS,EAAE;;;;QAGpB,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;;;wGArsBjD,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCTY,gBAAgB,CAAA;IACnB,mBAAmB,GAAG,CAAC;AAEvB,IAAA,wBAAwB,GAAG,IAAI,eAAe,CAAgB,CAAC,CAAC;AACxE,IAAA,oBAAoB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE;AAEnE,IAAA,iBAAiB,CAAC,KAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;;IAG3C,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,mBAAmB,IAAI,CAAC;QAC7B,OAAO,IAAI,CAAC,mBAAmB;;AAGjC,IAAA,qBAAqB,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;;IAGlC,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC;;wGApBnB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCGY,YAAY,CAAA;AAYH,IAAA,gBAAA;IAXZ,mBAAmB,GAAG,SAAS;IAC/B,mBAAmB,GAAG,IAAI,eAAe,CAAS,IAAI,CAAC,mBAAmB,CAAC;AAC3E,IAAA,YAAY,GAAG,IAAI,eAAe,CAAA,eAAA,sBAAwB;IAElE,YAAY,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAC9E,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,KAAI;QAC5B,MAAM,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,YAAY,CAAC;AAC7E,QAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE;KAC5C,CAAC,CACH;AAED,IAAA,WAAA,CAAoB,gBAAsC,EAAA;QAAtC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAClC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,IAAG;AACpD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,SAAC,CAAC;;IAGJ,IAAI,YAAY,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;;IAG9B,wBAAwB,CAAC,KAAa,EAAE,KAAa,EAAA;AAC3D,QAAA,OAAO,KAAK,KAAgB,YAAA,sBAAI,KAAK,CAAC,WAAW,EAAE,KAAK,SAAS,GAAG,SAAS,GAAG,KAAK;;wGAvB5E,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA;;4FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACPM,MAAM,cAAc,GAAG;;AAE5B,IAAA,YAAY,EAAE,EAAE;;AAGhB,IAAA,QAAQ,EAAE;QACR,OAAO;QACP,KAAK;QACL,SAAS;QACT,MAAM;QACN,OAAO;QACP,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,MAAM;QACN,OAAO;QACP,MAAM;QACN,KAAK;QACL,KAAK;QACL,KAAK;QACL,IAAI;QACJ,KAAK;QACL,KAAK;QACL,IAAI;QACJ,IAAI;QACJ,QAAQ;QACR,OAAO;QACP,SAAS;QACT,KAAK;QACL,KAAK;QACL,MAAM;QACN,KAAK;QACL,QAAQ;QACR,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;QACP,OAAO;QACP,QAAQ;QACR,SAAS;QACT,aAAa;QACb,OAAO;AACR,KAAA;;AAGD,IAAA,YAAY,EAAE;QACZ,MAAM;QACN,QAAQ;QACR,WAAW;QACX,SAAS;QACT,MAAM;QACN,MAAM;QACN,OAAO;QACP,SAAS;QACT,MAAM;QACN,QAAQ;QACR,KAAK;QACL,MAAM;QACN,WAAW;QACX,MAAM;QACN,OAAO;AACR,KAAA;;AAGD,IAAA,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;;AAGrG,IAAA,OAAO,EAAE,qBAAqB;;AAG9B,IAAA,SAAS,EAAE;AACT,QAAA,IAAI,EAAE;;AAEJ,YAAA,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,CAAC;AAChF,YAAA,CAAC,aAAa,EAAE,iBAAiB,CAAC;;YAGlC,EAAE,OAAO,EAAE,aAAa,EAAE;;YAG1B,CAAC,cAAc,EAAE,WAAW,CAAC;AAC7B,YAAA,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC;;YAGrE,CAAC,yBAAyB,EAAE,cAAc,CAAC;YAC3C,CAAC,KAAK,EAAE,QAAQ,CAAC;;AAGjB,YAAA,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;AAG7D,YAAA,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;AACrC,YAAA,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC5D,SAAA;AAED,QAAA,MAAM,EAAE;YACN,CAAC,SAAS,EAAE,QAAQ,CAAC;YACrB,CAAC,KAAK,EAAE,eAAe,CAAC;AACxB,YAAA,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5D,SAAA;AAED,QAAA,IAAI,EAAE;YACJ,CAAC,SAAS,EAAE,QAAQ,CAAC;YACrB,CAAC,KAAK,EAAE,eAAe,CAAC;AACxB,YAAA,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5D,SAAA;AAED,QAAA,UAAU,EAAE;YACV,CAAC,YAAY,EAAE,OAAO,CAAC;AACvB,YAAA,CAAC,MAAM,EAAE,SAAS,CAAC;AACpB,SAAA;AACF,KAAA;CACF;;MChHqB,oBAAoB,CAAA;AAC9B,IAAA,QAAQ;AACR,IAAA,QAAQ;IAIlB,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,QAAQ;;AAGZ,IAAA,SAAS,CAAC,IAA8B,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAE7B;;ACPK,MAAO,iBAAkB,SAAQ,oBAAoB,CAAA;AAerC,IAAA,eAAA;AAdpB,IAAA,QAAQ,GAAyB,GAAA;AACjC,IAAA,QAAQ,GAAuB;AAC7B,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,GAAG,EAAE,QAAQ;AACb,QAAA,aAAa,EAAE,QAAQ;AACvB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,YAAY,EAAE,UAAU;KACzB;AAED,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,gCAAgC;;IAGrE,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAEpD,QAAA,OAAO,GAAG,iBAAiB,CAAA,CAAA,EAAI,QAAQ,CAAI,CAAA,EAAA,MAAM,OAAO;;IAGlD,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC,CAAC;YAC7F,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;AC1CK,MAAO,mBAAoB,SAAQ,oBAAoB,CAAA;AAgBvC,IAAA,eAAA;AAfpB,IAAA,QAAQ,GAAiC,KAAA;AACzC,IAAA,QAAQ,GAAuB;AAC7B,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,GAAG,EAAE,aAAa;AAClB,QAAA,aAAa,EAAE,mBAAmB;AAClC,QAAA,SAAS,EAAE,kBAAkB;AAC7B,QAAA,WAAW,EAAE,oBAAoB;AACjC,QAAA,YAAY,EAAE,qBAAqB;AACnC,QAAA,SAAS,EAAE,0BAA0B;KACtC;AAED,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,gCAAgC;;IAGrE,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAEpD,QAAA,OAAO,GAAG,iBAAiB,CAAA,CAAA,EAAI,QAAQ,CAAI,CAAA,EAAA,MAAM,OAAO;;IAGlD,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC,CAAC;YAC7F,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;AC3CK,MAAO,sBAAuB,SAAQ,oBAAoB,CAAA;AAmB1C,IAAA,eAAA;AAlBpB,IAAA,QAAQ,GAAoC,QAAA;AAC5C,IAAA,QAAQ,GAAuB;AAC7B,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,GAAG,EAAE,QAAQ;AACb,QAAA,aAAa,EAAE,QAAQ;AACvB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,YAAY,EAAE,UAAU;AACxB,QAAA,SAAS,EAAE,UAAU;KACtB;IAEO,UAAU,GAChB,oGAAoG;AAEtG,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;QACT,OAAO,CAAA,EAAG,IAAI,CAAC,UAAU,CAAA,EAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA,4CAAA,CAA8C;;IAGrG,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAEpD,QAAA,OAAO,qBAAqB,iBAAiB,CAAA,CAAA,EAAI,QAAQ,CAAI,CAAA,EAAA,MAAM,OAAO;;IAGpE,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC,CAAC;YAC7F,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;AC9CK,MAAO,kBAAmB,SAAQ,oBAAoB,CAAA;AAiBtC,IAAA,eAAA;AAhBpB,IAAA,QAAQ,GAA0B,IAAA;AAClC,IAAA,QAAQ,GAAuB;AAC7B,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,GAAG,EAAE,QAAQ;AACb,QAAA,aAAa,EAAE,QAAQ;AACvB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,WAAW,EAAE,WAAW;AACxB,QAAA,SAAS,EAAE,UAAU;KACtB;IAEO,kBAAkB,GAAG,gCAAgC;AAE7D,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;QACT,OAAO,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAA,EAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA,8BAAA,CAAgC;;IAG/F,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;QACpD,MAAM,kBAAkB,GAAG,CAAG,EAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA,EAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AAEpF,QAAA,OAAO,QAAQ,kBAAkB,CAAA,CAAA,EAAI,MAAM,CAAK,EAAA,EAAA,iBAAiB,MAAM;;IAGjE,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,CAAA,EAAG,MAAM,CAAC,IAAI,CAAI,CAAA,EAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI,CAAC,CAAC;YAC7F,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;AC7CK,MAAO,oBAAqB,SAAQ,oBAAoB,CAAA;AAkBxC,IAAA,eAAA;AAjBpB,IAAA,QAAQ,GAA4B,MAAA;AACpC,IAAA,QAAQ,GAAuB;AAC7B,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,GAAG,EAAE,QAAQ;AACb,QAAA,aAAa,EAAE,WAAW;AAC1B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,YAAY,EAAE,UAAU;AACxB,QAAA,SAAS,EAAE,UAAU;KACtB;IAEO,YAAY,GAAG,4BAA4B;AAEnD,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;QACT,OAAO,CAAA,EAAG,IAAI,CAAC,YAAY,CAAA,EAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA,oCAAA,CAAsC;;IAG/F,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAEpD,QAAA,OAAO,mBAAmB,iBAAiB,CAAA,CAAA,EAAI,QAAQ,CAAI,CAAA,EAAA,MAAM,OAAO;;IAGlE,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC,CAAC;YAC7F,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;AClDK,MAAO,0BAA2B,SAAQ,oBAAoB,CAAA;AAG9C,IAAA,eAAA;AAFpB,IAAA,QAAQ,GAAkC,YAAA;AAE1C,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,gCAAgC;;IAGrE,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,eAAe;QAE/C,OAAO,CAAA,gBAAA,EAAmB,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,eAAe,EAAE,OAAO;;IAG7D,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,GAAG,MAAM,CAAC,IAAI,CAAI,EAAA,CAAA,CAAC,CAAC;YAC9D,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;ACvBK,MAAO,sBAAuB,SAAQ,oBAAoB,CAAA;AAkB1C,IAAA,eAAA;AAjBpB,IAAA,QAAQ,GAA8B,QAAA;AACtC,IAAA,QAAQ,GAAuB;AAC7B,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,GAAG,EAAE,QAAQ;AACb,QAAA,aAAa,EAAE,gBAAgB;AAC/B,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,WAAW,EAAE,cAAc;AAC3B,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,SAAS,EAAE,eAAe;KAC3B;IAEO,YAAY,GAAG,qCAAqC;AAE5D,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;QACT,OAAO,CAAA,EAAG,IAAI,CAAC,YAAY,CAAA,EAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA,8BAAA,CAAgC;;IAGzF,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAEpD,QAAA,OAAO,OAAO,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAM,GAAA,EAAA,iBAAiB,MAAM;;IAGvD,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,CAAA,EAAG,MAAM,CAAC,IAAI,CAAK,EAAA,EAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI,CAAC,CAAC;YAC9F,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;AClDK,MAAO,mBAAoB,SAAQ,oBAAoB,CAAA;AAGvC,IAAA,eAAA;AAFpB,IAAA,QAAQ,GAA2B,KAAA;AAEnC,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,qCAAqC;;IAG1E,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,eAAe;QAE/C,OAAO,CAAA,eAAA,EAAkB,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,eAAe,EAAE,OAAO;;IAG5D,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,IAAI,MAAM,CAAC,IAAI,CAAI,EAAA,CAAA,CAAC,CAAC;YAC/D,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;AC5BK,MAAO,sBAAuB,SAAQ,oBAAoB,CAAA;AAG1C,IAAA,eAAA;AAFpB,IAAA,QAAQ,GAA8B,QAAA;AAEtC,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,8BAA8B;;IAGnE,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,eAAe;QAE/C,OAAO,CAAA,IAAA,EAAO,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,eAAe,EAAE,OAAO;;IAGjD,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,GAAG,MAAM,CAAC,IAAI,CAAI,EAAA,CAAA,CAAC,CAAC;YAC9D,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;AC5BK,MAAO,iBAAkB,SAAQ,oBAAoB,CAAA;AAGrC,IAAA,eAAA;AAFpB,IAAA,QAAQ,GAAyB,GAAA;AAEjC,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,+BAA+B;;IAGpE,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,eAAe;QAE/C,OAAO,CAAA,EAAG,QAAQ,CAAgB,aAAA,EAAA,IAAI,CAAC,eAAe,EAAE,OAAO;;IAGzD,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,GAAG,MAAM,CAAC,IAAI,CAAI,EAAA,CAAA,CAAC,CAAC;YAC9D,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;AC5BK,MAAO,oBAAqB,SAAQ,oBAAoB,CAAA;AAGxC,IAAA,eAAA;AAFpB,IAAA,QAAQ,GAA4B,MAAA;AAEpC,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,iCAAiC;;IAGtE,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,eAAe;QAE/C,OAAO,CAAA,IAAA,EAAO,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,eAAe,EAAE,KAAK;;IAG/C,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,GAAG,MAAM,CAAC,IAAI,CAAI,EAAA,CAAA,CAAC,CAAC;YAC9D,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;ACvBK,MAAO,qBAAsB,SAAQ,oBAAoB,CAAA;AAiBzC,IAAA,eAAA;AAhBpB,IAAA,QAAQ,GAA6B,OAAA;AACrC,IAAA,QAAQ,GAAuB;AAC7B,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,GAAG,EAAE,QAAQ;AACb,QAAA,aAAa,EAAE,gBAAgB;AAC/B,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,WAAW,EAAE,cAAc;AAC3B,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,SAAS,EAAE,eAAe;KAC3B;IAEO,YAAY,GAAG,yCAAyC;AAEhE,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;QACT,OAAO,CAAA,EAAG,IAAI,CAAC,YAAY,CAAA,EAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA,8BAAA,CAAgC;;IAGzF,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAEpD,QAAA,OAAO,OAAO,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAO,IAAA,EAAA,iBAAiB,QAAQ;;IAG1D,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,CAAA,EAAG,MAAM,CAAC,IAAI,CAAK,EAAA,EAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI,CAAC,CAAC;YAC9F,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;AC5CK,MAAO,mBAAoB,SAAQ,oBAAoB,CAAA;AAGvC,IAAA,eAAA;AAFpB,IAAA,QAAQ,GAA2B,KAAA;AAEnC,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;QACT,OAAO,CAAA,EAAG,IAAI,CAAC,kBAAkB,EAAE,CAAG,EAAA,IAAI,CAAC,gBAAgB,EAAE,CAAA,CAAE;;IAGjE,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,eAAe;AAE/C,QAAA,OAAO,CAAG,EAAA,QAAQ,IAAI,EAAE,IAAI;;IAGtB,gBAAgB,GAAA;QACtB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,eAAe;QAE/C,QAAQ,QAAQ;AACd,YAAA,KAAA,QAAA;AACE,gBAAA,OAAO,wBAAwB;AACjC,YAAA,KAAA,QAAA;AACE,gBAAA,OAAO,uBAAuB;AAChC,YAAA,KAAA,QAAA;AACE,gBAAA,OAAO,qBAAqB;AAC9B,YAAA,KAAA,QAAA;AACE,gBAAA,OAAO,wBAAwB;AACjC,YAAA,KAAA,cAAA;AACE,gBAAA,OAAO,iBAAiB;AAC1B,YAAA;AACE,gBAAA,OAAO,EAAE;;;AAGhB;;ACnCK,MAAO,qBAAsB,SAAQ,oBAAoB,CAAA;AAezC,IAAA,eAAA;AAdpB,IAAA,QAAQ,GAA6B,OAAA;AACrC,IAAA,QAAQ,GAAuB;AAC7B,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,GAAG,EAAE,QAAQ;AACb,QAAA,aAAa,EAAE,QAAQ;AACvB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,YAAY,EAAE,UAAU;AACxB,QAAA,SAAS,EAAE,UAAU;KACtB;AAED,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,gCAAgC;;IAGrE,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAEpD,QAAA,OAAO,QAAQ,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAQ,KAAA,EAAA,iBAAiB,MAAM;;IAG1D,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,CAAA,EAAA,EAAK,MAAM,CAAC,IAAI,CAAK,EAAA,EAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI,CAAC,CAAC;YAChG,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;AC1CK,MAAO,0BAA2B,SAAQ,oBAAoB,CAAA;AAgB9C,IAAA,eAAA;AAfpB,IAAA,QAAQ,GAAkC,YAAA;AAC1C,IAAA,QAAQ,GAAuB;AAC7B,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,GAAG,EAAE,QAAQ;AACb,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,GAAG,EAAE,QAAQ;AACb,QAAA,aAAa,EAAE,gBAAgB;AAC/B,QAAA,SAAS,EAAE,eAAe;AAC1B,QAAA,WAAW,EAAE,eAAe;AAC5B,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,SAAS,EAAE,eAAe;KAC3B;AAED,IAAA,WAAA,CAAoB,eAAsC,EAAA;AACxD,QAAA,KAAK,EAAE;QADW,IAAe,CAAA,eAAA,GAAf,eAAe;;IAInC,WAAW,GAAA;AACT,QAAA,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,gCAAgC;;IAGrE,kBAAkB,GAAA;QAChB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAEpD,QAAA,OAAO,2BAA2B,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAM,GAAA,EAAA,iBAAiB,MAAM;;IAG3E,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;QACvC,IAAI,YAAY,GAAG,EAAE;QAErB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,CAAA,EAAG,MAAM,CAAC,IAAI,CAAK,EAAA,EAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI,CAAC,CAAC;YAC9F,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG1C,QAAA,OAAO,YAAY;;AAEtB;;MCxBY,iBAAiB,CAAA;AACpB,IAAA,MAAM;IAEd,SAAS,CAAC,QAAgB,EAAE,UAAiC,EAAA;QAC3D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC;;IAGvD,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;;IAGlC,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;;IAG5B,YAAY,CAAC,IAAY,EAAE,UAAiC,EAAA;;QAElE,QAAQ,IAA2B;AACjC,YAAA,KAAA,YAAA;AACE,gBAAA,OAAO,IAAI,0BAA0B,CAAC,UAAU,CAAC;AACnD,YAAA,KAAA,YAAA;AACE,gBAAA,OAAO,IAAI,0BAA0B,CAAC,UAAU,CAAC;AACnD,YAAA,KAAA,KAAA;AACE,gBAAA,OAAO,IAAI,mBAAmB,CAAC,UAAU,CAAC;AAC5C,YAAA,KAAA,QAAA;AACE,gBAAA,OAAO,IAAI,sBAAsB,CAAC,UAAU,CAAC;AAC/C,YAAA,KAAA,MAAA;AACE,gBAAA,OAAO,IAAI,oBAAoB,CAAC,UAAU,CAAC;AAC7C,YAAA,KAAA,MAAA;AACE,gBAAA,OAAO,IAAI,oBAAoB,CAAC,UAAU,CAAC;AAC7C,YAAA,KAAA,GAAA;AACE,gBAAA,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC;AAC1C,YAAA,KAAA,KAAA;AACE,gBAAA,OAAO,IAAI,mBAAmB,CAAC,UAAU,CAAC;AAC5C,YAAA,KAAA,GAAA;AACE,gBAAA,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC;AAC1C,YAAA,KAAA,OAAA;AACE,gBAAA,OAAO,IAAI,qBAAqB,CAAC,UAAU,CAAC;YAC9C,KAAgC,IAAA;AAChC,YAAA,KAAA,WAAA;AACE,gBAAA,OAAO,IAAI,sBAAsB,CAAC,UAAU,CAAC;AAC/C,YAAA,KAAA,IAAA;AACE,gBAAA,OAAO,IAAI,kBAAkB,CAAC,UAAU,CAAC;YAC3C,KAA6B,KAAA;AAC7B,YAAA,KAAA,SAAA;AACE,gBAAA,OAAO,IAAI,mBAAmB,CAAC,UAAU,CAAC;YAC5C,SAAS;AACP,gBAAA,MAAM,eAAe,GAAG,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC;gBAEzE,IAAI,CAAC,eAAe,EAAE;AACpB,oBAAA,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAA,iBAAA,CAAmB,CAAC;;AAGtD,gBAAA,OAAO,eAAe;;;;IAKpB,kBAAkB,CAAC,IAAY,EAAE,UAAiC,EAAA;AACxE,QAAA,IAAI,IAAI,CAAC,UAAU,CAAA,QAAA,kCAA4B,EAAE;AAC/C,YAAA,OAAO,IAAI,sBAAsB,CAAC,UAAU,CAAC;;AAE/C,QAAA,IAAI,IAAI,CAAC,UAAU,CAAA,OAAA,iCAA2B,EAAE;AAC9C,YAAA,OAAO,IAAI,qBAAqB,CAAC,UAAU,CAAC;;;wGA/DrC,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACeM,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB,CAAA;AACb,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,IAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAE3D,IAAA,QAAQ;AACR,IAAA,cAAc;AACd,IAAA,YAAY;AACZ,IAAA,UAAU;AACV,IAAA,oBAAoB;AACpB,IAAA,UAAU;AACV,IAAA,UAAU;AACV,IAAA,sBAAsB;IAE/B,IAAa,QAAQ,CAAC,IAAoB,EAAA;QACxC,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAIxB,IAAA,UAAU,GAAG,IAAI,YAAY,EAAa;AAC1C,IAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AAEN,IAAA,eAAe;IAE1D,IAAI,GAAG,EAAE;IACT,aAAa,GAAG,EAAE;IAClB,YAAY,GAAG,EAAE;AACjB,IAAA,aAAa,GAA2B;AACtC,QAAA,KAAK,EAAuB,SAAA;AAC5B,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,oBAAoB,EAAE,KAAK;AAC3B,QAAA,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;AAC3B,QAAA,oBAAoB,EAAE,IAAI;AAC1B,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,iBAAiB,EAAE,KAAK;AACxB,QAAA,eAAe,EAAE,IAAI;KACtB;AAED,IAAA,MAAM;AACN,IAAA,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE;AAE3D,IAAA,eAAe;AACf,IAAA,wBAAwB;AAEhB,IAAA,aAAa;AACb,IAAA,iBAAiB;IAEzB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE;;AAGrE,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,CAAC,eAAe,EAAE;;QAExB,IAAI,CAAC,aAAa,EAAE;QAEpB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,SAAS,EAAE;;AAGlB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,OAAO,CAAC,QAAQ,EAAE,YAAY,KAAK,QAAQ,EAAE;YACtD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY;;;IAI7C,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE;;AAG/B,IAAA,UAAU,CAAC,MAA0B,EAAA;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QAEpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAE5E,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;;AAGhD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;;;AAI5B,IAAA,UAAU,CAAC,KAAyB,EAAA;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;QACjE,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;;AAIjD,IAAA,WAAW,CAAC,IAAI,EAAA;AACd,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE;AAC/B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;;;IAIpC,eAAe,GAAA;QACrB,IAAI,CAAC,qBAAqB,CAAC;aACxB,IAAI,CAAC,oBAAoB,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC;AACjD,aAAA,SAAS,CAAC,CAAC,MAAc,KAAI;YAC5B,IAAI,YAAY,GAAG,EAAE;;AAErB,YAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACxB,gBAAA,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBAC5C,QAAQ,GAAkD;AACxD,wBAAA,KAAA,aAAA;AACE,4BAAA,YAAY,GAAG;gCACb,KAAK,EACH,MAAM,CAAA,aAAA,oCAA8B,KAAmB,eAAA;sCACpD,IAAA;AACD,sCAAuB,SAAA;6BAC5B;4BAED;AACF,wBAAA,KAAA,eAAA;AACE,4BAAA,YAAY,GAAG;AACb,gCAAA,gBAAgB,EAAE;oCAChB,KAAK,EAAE,MAAM,CAAsC,eAAA,4CAAA;AACpD,iCAAA;6BACF;4BAED;AACF,wBAAA,KAAA,eAAA;AACE,4BAAA,YAAY,GAAG;gCACb,mBAAmB,EAAE,MAAM,CAAA,eAAA,4CAAsC,GAAG,QAAQ,GAAG,OAAO;6BACvF;4BAED;AACF,wBAAA,KAAA,UAAA;AACE,4BAAA,YAAY,GAAG;gCACb,OAAO,EAAE,MAAM,CAA2B,UAAA,iCAAA;6BAC3C;4BAED;AACF,wBAAA,KAAA,WAAA;AACE,4BAAA,YAAY,GAAG;gCACb,QAAQ,EAAE,MAAM,CAA4B,WAAA,kCAAA;6BAC7C;4BAED;AACF,wBAAA,KAAA,oBAAA;AACE,4BAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAG;gCAC5E,IAAI,QAAQ,KAAmC,YAAA,uCAAE;oCAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,kBAAkB,CAAC,qBAAqB,CAAC;wCAC7E,oBAAoB,EAAE,CAAC,MAAM,CAA2C,oBAAA,iDAAA;wCACxE,kBAAkB,EAAE,CAAC,MAAM,CAA2C,oBAAA,iDAAA;AACvE,qCAAA,CAAC;;qCACG,IAAI,QAAQ,KAAmC,YAAA,uCAAE;oCACtD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,kBAAkB,CAAC,qBAAqB,CAAC;wCAC7E,oBAAoB,EAAE,CAAC,MAAM,CAA2C,oBAAA,iDAAA;wCACxE,kBAAkB,EAAE,CAAC,MAAM,CAA2C,oBAAA,iDAAA;AACvE,qCAAA,CAAC;;AAEN,6BAAC,CAAC;4BACF;;AAEJ,oBAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC;;;AAG5E,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACtC,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM;AAC9B,SAAC,CAAC;AAEJ,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE;AACzD,YAAA,eAAe,EAAE,IAAI;AACtB,SAAA,CAAC;;AAGI,IAAA,mBAAmB,CAAC,MAA0B,EAAA;QACpD,MAAM,YAAY,GAAG,MAAK;AACxB,YAAA,MAAM,CAAC,qBAAqB,CAAC,MAAK;AAChC,gBAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAC5E,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC;AAC/D,gBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,aAAa,CAAA,EAAA,CAAI;gBACtE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AACjD,aAAC,CAAC;AACJ,SAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,sBAAsB,CAAC,YAAY,CAAC;AACpE,QAAA,YAAY,EAAE;;IAGR,YAAY,GAAA;AAClB,QAAA,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI;AAEvE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc;AAElC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,KAAK;AACpD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC;AAErE,QAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAA6B,KAAI;AAChH,YAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;gBACxE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;;iBACrD;gBACL,IAAI,QAAQ,KAA4B,KAAA,gCAAE;oBACxC,IAAI,CAAC,YAAY,GAAA,KAAA;;AACZ,qBAAA,IAAI,QAAQ,KAA+B,IAAA,qCAAI,QAAQ,KAAA,WAAA,yCAAuC;oBACnG,IAAI,CAAC,YAAY,GAAA,QAAA;;qBACZ,IAAI,QAAQ,KAA+B,SAAA,mCAAE;oBAClD,IAAI,CAAC,YAAY,GAAA,KAAA;;qBACZ;AACL,oBAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;;;AAGhC,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE;gBACzD,QAAQ,EAAE,IAAI,CAAC,YAAY;AAC5B,aAAA,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE;YACzD,QAAQ,EAAE,IAAI,CAAC,UAAU;AACzB,YAAA,gBAAgB,EAAE;gBAChB,KAAK,EAAE,MAAM,CAAsC,eAAA,4CAAA;AACpD,aAAA;YACD,mBAAmB,EAAE,MAAM,CAAA,eAAA,4CAAsC,GAAG,QAAQ,GAAG,OAAO;YACtF,OAAO,EAAE,MAAM,CAA2B,UAAA,iCAAA;YAC1C,QAAQ,EAAE,MAAM,CAA4B,WAAA,kCAAA;YAC5C,KAAK;YACL,QAAQ;AACT,SAAA,CAAC;QACF,MAAM,mBAAmB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAC5C,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EACxB,MAAM,CAAC,OAAO,CAAC,EACf,KAAK,EAAE,CACR;AACD,QAAA,aAAa,CAAC;AACZ,YAAA,MAAM,EAAE,mBAAmB;AAC3B,YAAA,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,gBAAgB;SACrD;AACE,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aACZ,SAAS,CAAC,MAAM,IAAG;AAClB,YAAA,IAAI,MAAM,CAAC,QAAQ,KAAA,YAAA,uCAAqC;gBACtD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,kBAAkB,CAAC,qBAAqB,CAAC;oBAC1E,oBAAoB,EAAE,CAAC,MAAM,CAA2C,oBAAA,iDAAA;oBACxE,kBAAkB,EAAE,CAAC,MAAM,CAA2C,oBAAA,iDAAA;AACvE,iBAAA,CAAC;;AACG,iBAAA,IAAI,MAAM,CAAC,QAAQ,KAAA,YAAA,uCAAqC;gBAC7D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,kBAAkB,CAAC,qBAAqB,CAAC;oBAC1E,oBAAoB,EAAE,CAAC,MAAM,CAA2C,oBAAA,iDAAA;oBACxE,kBAAkB,EAAE,CAAC,MAAM,CAA2C,oBAAA,iDAAA;AACvE,iBAAA,CAAC;;AAEJ,YAAA,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAA,QAAA,mCAA8B,CAAC;YACpE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAA,QAAA,mCAA6B,cAAc,CAAC;AAC9F,SAAC,CAAC;;IAGE,oBAAoB,CAAC,MAAc,EAAE,QAAwB,EAAA;AACnE,QAAA,IAAI,KAAuB;QAE3B,IAAI,QAAQ,EAAE;AACZ,YAAA,KAAK;;aACA;YACL,KAAK,GAAG,MAAM,CAA8B,aAAA,oCAAA,KAAA,eAAA,wBAAqB,IAAA,gCAAyB,SAAA;;AAG5F,QAAA,OAAO,KAAK;;IAGN,SAAS,CAAC,eAAe,GAAG,KAAK,EAAA;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGrB,cAAc,CAAC,eAAe,GAAG,KAAK,EAAA;QAC5C,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;;AAC9C,aAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ;;AACpB,aAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YAC/B;;AACK,aAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YACtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;;;IAI5C,aAAa,GAAA;QACnB,IAAI,CAAC,oBAAoB,CAAC;AACvB,aAAA,IAAI,CACH,MAAM,CAAC,GAAG,IAAI,GAAG,KAAA,SAAA,+BAA6B,EAC9C,cAAc,CAAC,IAAI,CAAC;aAErB,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACtB,SAAC,CAAC;;AAGE,IAAA,cAAc,CAAC,IAAY,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAEhB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB;;QAGF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE3B,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACjC,YAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE;;AAGvC,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;;AAEpC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC;AAClB,iBAAA,QAAQ;AACR,iBAAA,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAEhF,YAAA,IAAI,OAAO,CAAC,MAAM,EAAE;;gBAElB,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC;AACtE,oBAAA;AACE,wBAAA,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;AACvB,wBAAA,OAAO,EAAE,EAAE,eAAe,EAAE,kBAAkB,EAAE;AACjD,qBAAA;AACF,iBAAA,CAAC;;;;wGAlUG,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EA0BD,UAAU,ECnEzC,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,iSAUA,8QD6Bc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;AAE9C,mBAAmB,GAAA,UAAA,CAAA;AAR/B,IAAA,YAAY;AAQA,CAAA,EAAA,mBAAmB,CAsU/B;4FAtUY,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;+BACI,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,YAAY,EAAE,WAAW,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,iSAAA,EAAA,MAAA,EAAA,CAAA,uNAAA,CAAA,EAAA;8BASjD,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBAEY,QAAQ,EAAA,CAAA;sBAApB;gBAOS,UAAU,EAAA,CAAA;sBAAnB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBAE0C,eAAe,EAAA,CAAA;sBAAzD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;AEjE3C;;;;;;;;;;;;;;;;;;AAkBK;MAKQ,eAAe,CAAA;AAC1B,IAAA,SAAS,CAAO,KAAQ,EAAE,OAAwB,EAAE,OAAa,EAAA;QAC/D,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;;AAGrC,QAAA,OAAO,OAAO,CAAC,KAAK,CAAC;;wGANZ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACZD,MAAM,YAAa,SAAQ,SAAS,CAAA;AAC3B,IAAA,OAAO,SAAS,GAAG,MAAM;;AAGlC,MAAM,WAAY,SAAQ,QAAQ,CAAA;AACzB,IAAA,OAAO,SAAS,GAAG,MAAM;;AAGlC,MAAM,iBAAkB,SAAQ,cAAc,CAAA;AACrC,IAAA,OAAO,SAAS,GAAG,SAAS;;MAgBxB,qBAAqB,CAAA;AACf,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAE3D,IAAA,WAAW,GAAiB,SAAA;AAC5B,IAAA,WAAW,GAAiB,SAAA;AAC5B,IAAA,oBAAoB,GAA8B,wBAAA;AAClD,IAAA,IAAI,GAAiB,SAAA;AACrB,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,WAAW;IACX,KAAK,GAAG,KAAK;AACtB,IAAA,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB;IAEtD,IAA8C,YAAY,CAAC,KAAiB,EAAA;QAC1E,IAAI,CAAC,KAAK,EAAE;YACV;;AAGF,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC;;AAG3C,IAAA,SAAS,GAAG;AACV,QAAA,CAAC,EAAE,OAAO;AACV,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,WAAW,EAAE,QAAQ;AACrB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,UAAU,EAAE,iBAAiB;AAC7B,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,GAAG,EAAE,YAAY;AACjB,QAAA,UAAU,EAAE,YAAY;AACxB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,EAAE,EAAE,IAAI;AACR,QAAA,CAAC,EAAE,GAAG;AACN,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,KAAK,EAAE,OAAO;KACf;AACD,IAAA,gBAAgB,GAA8B;AAC5C,QAAA,CAAC,EAAE,IAAI;AACP,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,GAAG,EAAE,QAAQ;AACb,QAAA,UAAU,EAAE,OAAO;AACnB,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,EAAE,EAAE,MAAM;AACV,QAAA,CAAC,EAAE,OAAO;AACV,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,KAAK,EAAE,MAAM;KACd;AAEO,IAAA,eAAe,CAAC,YAAyB,EAAA;QAC/C,MAAM,YAAY,GAAG,YAAY,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAE7D,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YACxB;;AAGF,QAAA,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;aACxB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACvC,aAAA,SAAS,CAAC,CAAC,YAA8B,KAAI;AAC5C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBAChB;;AAGF,YAAA,YAAY,CAAC,OAAO,CAAC,EAAE,IAAG;AACxB,gBAAA,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;AAChC,aAAC,CAAC;AACJ,SAAC,CAAC;;IAGN,QAAQ,GAAA;AACN,QAAA,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;AAClC,QAAA,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;AACjC,QAAA,KAAK,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC;;AAGzC,IAAA,UAAU,CAAC,CAAC,KAAK,EAAE,GAAG,CAAoB,EAAA;AACxC,QAAA,OAAO,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;;wGAjGzE,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAaJ,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,EClDxC,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,k0DAyCA,80EDZQ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,SAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,sBAAsB,EACtB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,sBAAsB,mKACtB,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,CAAA;;4FAGV,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAGxB,OAAA,EAAA;wBACL,YAAY;wBACZ,WAAW;wBACX,sBAAsB;wBACtB,mBAAmB;wBACnB,sBAAsB;wBACtB,eAAe;AAClB,qBAAA,EAAA,QAAA,EAAA,k0DAAA,EAAA,MAAA,EAAA,CAAA,uxEAAA,CAAA,EAAA;8BAQM,IAAI,EAAA,CAAA;sBAAZ;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAG6C,YAAY,EAAA,CAAA;sBAAzD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;AEhDpC,SAAU,aAAa,CAAC,OAAgB,EAAA;AAC5C,IAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAyC,KAAI;QAClE,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,KAAI;AACpD,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACtB,SAAC,CAAC;AAEF,QAAA,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;AAE/B,QAAA,OAAO,MAAK;YACV,cAAc,CAAC,UAAU,EAAE;AAC7B,SAAC;AACH,KAAC,CAAC;AACJ;;AC+BO,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB,CAAA;AAChB,IAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AAEhC,IAAA,QAAQ;AACR,IAAA,cAAc;AACd,IAAA,YAAY;AACZ,IAAA,UAAU;IACV,KAAK,GAAG,KAAK;AACb,IAAA,SAAS;AACT,IAAA,cAAc;AACd,IAAA,sBAAsB;AACtB,IAAA,0BAA0B;AAC1B,IAAA,UAAU;AACV,IAAA,YAAY;AACZ,IAAA,QAAQ;AACR,IAAA,gBAAgB;AAEf,IAAA,UAAU,GAAG,IAAI,YAAY,EAAa;AAC1C,IAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AACvC,IAAA,cAAc,GAAG,IAAI,YAAY,EAAuB;AAElE,IAAA,UAAU;AACV,IAAA,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa;AAC3D,IAAA,gBAAgB;AAChB,IAAA,IAAI;AAEJ,IAAA,sBAAsB;IAEtB,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,MAAK;gBACrC,IAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,CAAC,6BAA6B,EAAE;gBACpC,IAAI,CAAC,yBAAyB,EAAE;AAClC,aAAC,CAAC;;;AAIN,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,OAAO,CAAC,QAAQ,EAAE,YAAY,KAAK,QAAQ,EAAE;YACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YACnD,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;;AAE5E,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE,YAAY,EAAE;AACnC,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;gBACtE,KAAK;AACL,gBAAA,YAAY,EAAE,KAAK;AACpB,aAAA,CAAC,CAAC;;;IAIC,gBAAgB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CACpD,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,YAAY,IAAG;YACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAC9B,gBAAA,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK;AAChE,aAAA,CAAC;YACF,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;;SAE1B,CAAC,CACH;;IAGK,kBAAkB,GAAA;QACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,KAA4B;;IAG5D,6BAA6B,GAAA;QACnC,IAAI,CAAC,QAAQ,CAAC;aACX,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,oBAAoB,EAAE;AACjD,aAAA,SAAS,CAAC,CAAC,KAA0B,KAAI;AACxC,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAgB,EAAE;AACnC,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEnC,SAAC,CAAC;;IAGE,yBAAyB,GAAA;AAC/B,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;YACrF,IAAI,KAAK,KAAgC,QAAA,oCAAE;;gBAEzC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;;iBACxC,IAAI,KAAK,KAAiC,SAAA,qCAAE;gBACjD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,KAA4B;;gBAElE,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAA4B,CAAC;gBAC3F,IAAI,CAAC,UAAU,EAAE;;AAErB,SAAC,CAAC;;AAGJ,IAAA,eAAe,CAAC,IAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACjD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;AAGlB,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;;IAG9D,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE;;IAGvC,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE;;IAG7C,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,KAAK,CAAC;;IAGhD,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE;;AAG9C,IAAA,cAAc,CAAC,KAAc,EAAA;QAC3B,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,qBAAqB;;AAExD,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC;;AAGlB,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ;;IAGlC,UAAU,GAAA;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO;AACjF,QAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,OAAO,CAAC;AAC7C,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,OAAO,CAAC;;;wGAzIzC,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,4mBC7CnC,2sGAkFA,EAAA,MAAA,EAAA,CAAA,swBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/CQ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,sBAAsB,EACtB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,uBAAuB,6cACvB,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,sBAAsB,EACtB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,eAAe,oDACf,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;AAGd,sBAAsB,GAAA,UAAA,CAAA;AAjBlC,IAAA,YAAY;AAiBA,CAAA,EAAA,sBAAsB,CA4IlC;4FA5IY,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAhBlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAGb,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACL,YAAY;wBACZ,mBAAmB;wBACnB,sBAAsB;wBACtB,uBAAuB;wBACvB,qBAAqB;wBACrB,sBAAsB;wBACtB,eAAe;wBACf,mBAAmB;AACtB,qBAAA,EAAA,QAAA,EAAA,2sGAAA,EAAA,MAAA,EAAA,CAAA,swBAAA,CAAA,EAAA;8BAQM,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,0BAA0B,EAAA,CAAA;sBAAlC;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBACS,cAAc,EAAA,CAAA;sBAAvB;;;ME9CU,cAAc,CAAA;AAChB,IAAA,OAAO;AACP,IAAA,SAAS;AACR,IAAA,UAAU,GAAG,IAAI,YAAY,EAAW;AACV,IAAA,OAAO;AAE/C,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;;;wGARZ,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,gTCrB3B,umBAmBA,EAAA,MAAA,EAAA,CAAA,iiBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDAc,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,0TAAE,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAEtD,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;+BACI,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,EAAA,QAAA,EAAA,umBAAA,EAAA,MAAA,EAAA,CAAA,iiBAAA,CAAA,EAAA;8BAGzD,OAAO,EAAA,CAAA;sBAAf;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBACuC,OAAO,EAAA,CAAA;sBAA9C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AEIjC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB,CAAA;AACjB,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAE3D,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,gBAAgB;AAEzB,IAAA,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE;AACrE,IAAA,uBAAuB,GAAG,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,EAAE;AACjF,IAAA,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE;AAC1D,IAAA,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB;AAEtD,IAAA,UAAU;IACV,UAAU,GAAG,EAAE;AACf,IAAA,wBAAwB,GAAG,IAAI,CAAC,qBAAqB,CAAC,wBAAwB;IAE9E,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE;;AAEpE,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC9C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACpD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAa,KAAI;AAC1G,YAAA,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC;AAC7C,SAAC,CAAC;;AAGJ,IAAA,iBAAiB,CAAC,WAAmB,EAAA;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC;AACvD,QAAA,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC;YAC5C,CAAC,WAAW,GAAG,YAAY;AAC5B,SAAA,CAAC;;IAGJ,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE;;AAGvC,IAAA,iBAAiB,CAAC,YAAoB,EAAA;;AAE5C,QAAA,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE;AACjC,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;;;AAIxD,IAAA,mBAAmB,CAAC,oBAAqD,EAAA;AACvE,QAAA,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;YACrD,KAAK;AACL,YAAA,YAAY,EAAE,KAAK;AACpB,SAAA,CAAC,CAAC;;AAGL,IAAA,UAAU,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAiD,EAAA;AACjF,QAAA,IACE,QAAQ,KAAmC,YAAA;AAC3C,YAAA,QAAQ,KAAmC,YAAA;AAC3C,aAAC,YAAY,KAAyC,eAAA;gBACpD,YAAY,KAAA,oBAAA,iDAA+C,EAC7D;AACA,YAAA,OAAO,KAAK;;AAEd,QAAA,OAAO,IAAI;;wGAjEF,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EC7BpC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,qzEAyDA,EDpCQ,MAAA,EAAA,CAAA,iqBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,aAAA,EAAA,IAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,eAAe,oDACf,cAAc,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;AAGT,uBAAuB,GAAA,UAAA,CAAA;AAfnC,IAAA,YAAY;AAeA,CAAA,EAAA,uBAAuB,CAmEnC;4FAnEY,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAdnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAGlB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACL,YAAY;wBACZ,mBAAmB;wBACnB,uBAAuB;wBACvB,qBAAqB;wBACrB,eAAe;wBACf,cAAc;AACjB,qBAAA,EAAA,QAAA,EAAA,qzEAAA,EAAA,MAAA,EAAA,CAAA,iqBAAA,CAAA,EAAA;8BAQM,YAAY,EAAA,CAAA;sBAApB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;;;AEbH,IAAY,cAIX;AAJD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAJW,cAAc,KAAd,cAAc,GAIzB,EAAA,CAAA,CAAA;;MCjBY,wBAAwB,CAAA;AAC1B,IAAA,MAAM;AACN,IAAA,YAAY;IAEZ,cAAc,GAAG,cAAc;wGAJ7B,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXrC,2tBAgBA,EAAA,MAAA,EAAA,CAAA,ikBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDPc,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,YAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAEzB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,mBAGhB,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA,CAAC,wBAAwB,CAAC,EAAA,QAAA,EAAA,2tBAAA,EAAA,MAAA,EAAA,CAAA,ikBAAA,CAAA,EAAA;8BAG5B,MAAM,EAAA,CAAA;sBAAd;gBACQ,YAAY,EAAA,CAAA;sBAApB;;;AETH,MAAM,sBAAsB,GAAG,GAAG;MASrB,sBAAsB,CAAA;IACxB,IAAI,GAAG,EAAE;IACT,QAAQ,GAAG,sBAAsB;IACjC,UAAU,GAAG,KAAK;AAE3B,IAAA,WAAW;IAEX,WAAW,CAAC,EAAE,IAAI,EAAiB,EAAA;QACjC,IAAI,IAAI,EAAE,WAAW,IAAI,IAAI,EAAE,YAAY,EAAE;AAC3C,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ;;;AAIvD,IAAA,YAAY,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAoB,EAAA;;;QAGrD,OAAO,WAAW,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ;;IAG5E,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW;;wGApB3B,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,ECbnC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,qUAMA,EDKc,MAAA,EAAA,CAAA,6NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,gIAAE,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAE9B,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;+BACI,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,WACtC,CAAC,YAAY,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,qUAAA,EAAA,MAAA,EAAA,CAAA,6NAAA,CAAA,EAAA;8BAGjC,IAAI,EAAA,CAAA;sBAAZ;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;;;AEyBI,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB,CAAA;AACnB,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AAEhC,IAAA,QAAQ;AACR,IAAA,cAAc;AACd,IAAA,WAAW;AACX,IAAA,YAAY;AACZ,IAAA,gBAAgB;AAChB,IAAA,KAAK;AAEJ,IAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAErE,IAAA,gBAAgB;;AAEhB,IAAA,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACnB,QAAA,KAAK,EAAE,IAAI,WAAW,CAAS,EAAE,CAAC;AAClC,QAAA,cAAc,EAAE,IAAI,WAAW,CAAS,EAAE,CAAC;AAC5C,KAAA,CAAC;IAEF,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE;AACzD,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACnB,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAC1B,gBAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc;AAC7C,aAAA,CAAC;;AAGJ,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;;QAGrB,IAAI,CAAC,iBAAiB,EAAE;;AAG1B,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACnB,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAC1B,gBAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc;AAC7C,aAAA,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC3B,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;;iBACd;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;YAGpB,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;;;AAIpD,IAAA,eAAe,CAAC,MAAsB,EAAA;AACpC,QAAA,OAAO,MAAM,KAAK,cAAc,CAAC,KAAK;;IAGhC,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAgC,KAAI;AAC/F,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,SAAC,CAAC;;wGAzDO,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,ECzCtC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,0rHA8FA,ED7DQ,MAAA,EAAA,CAAA,kyDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,oBAAoB,EACpB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,OAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,eAAe,EACf,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,2GACtB,wBAAwB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;AAGnB,yBAAyB,GAAA,UAAA,CAAA;AAfrC,IAAA,YAAY;AAeA,CAAA,EAAA,yBAAyB,CA2DrC;4FA3DY,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAdrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAGjB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACL,YAAY;wBACZ,mBAAmB;wBACnB,oBAAoB;wBACpB,eAAe;wBACf,sBAAsB;wBACtB,wBAAwB;AAC3B,qBAAA,EAAA,QAAA,EAAA,0rHAAA,EAAA,MAAA,EAAA,CAAA,kyDAAA,CAAA,EAAA;8BAKM,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAES,WAAW,EAAA,CAAA;sBAApB;;;AEPI,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB,CAAA;AAwBnB,IAAA,oBAAA;AACA,IAAA,iBAAA;AACA,IAAA,gBAAA;AACA,IAAA,oBAAA;AA1BD,IAAA,gBAAgB;AAChB,IAAA,kBAAkB;AAClB,IAAA,eAAe;AACf,IAAA,SAAS;AACT,IAAA,YAAY;AACZ,IAAA,WAAW;AACX,IAAA,gBAAgB;AAChB,IAAA,qBAAqB;AACrB,IAAA,KAAK;AAES,IAAA,QAAQ;AAE/B,IAAA,eAAe;AAEf,IAAA,mBAAmB;AACnB,IAAA,mBAAmB,GAAG,CAAC,CAAC;AAExB,IAAA,sBAAsB;IACtB,QAAQ,GAAG,gEAAgE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AAErG,IAAA,mBAAmB;AAEnB,IAAA,WAAA,CACU,oBAA0C,EAC1C,iBAAoC,EACpC,gBAAkC,EAClC,oBAA0C,EAAA;QAH1C,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;;IAG9B,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AACtF,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAClC,SAAC,CAAC;QAEF,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,+BAA+B,EAAE;YACtC,IAAI,CAAC,sBAAsB,EAAE;;;IAIjC,WAAW,CAAC,EAAE,kBAAkB,EAAiB,EAAA;QAC/C,IAAI,CAAC,kBAAkB,EAAE;YACvB;;AAEF,QAAA,MAAM,YAAY,GAAqB,kBAAkB,CAAC,YAAY;QAEtE,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,GAAG,EAAE;;;IAIrF,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC;;;IAIzD,WAAW,GAAA;QACT,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE;AAErE,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,YAAA,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,CAAQ,KAAA,EAAA,eAAe,CAAE,CAAA;AAC/B,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;QACF,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ;QACxC,IAAI,CAAC,+BAA+B,EAAE;AAEtC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,EAAE;;;AAInB,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,KAAK,CAAC;;IAGzD,cAAc,CAAC,KAAa,EAAE,aAAwC,EAAA;QACpE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE;YACpC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK;YACjD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,aAAa,CAAC,cAAc;YACnE,IAAI,CAAC,kBAAkB,EAAE;;;IAIrB,QAAQ,GAAA;AACd,QAAA,MAAM,WAAW,GAAG,CAAiB,cAAA,EAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC,mBAAmB,EAAE;QAC5F,MAAM,gBAAgB,GAAgB,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC;QAC1E,IAAI,gBAAgB,EAAE;YACpB,gBAAgB,CAAC,KAAK,EAAE;;;IAIpB,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;;AAGhE,IAAA,sBAAsB,CAAC,KAAa,EAAA;AAClC,QAAA,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC9C,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK;;IAGnE,uBAAuB,GAAA;AACrB,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC;;IAGvC,sBAAsB,GAAA;QAC5B,IAAI,CAAC,oBAAoB,CAAC;AACvB,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,oDAAoC,EACjE,cAAc,CAAC,IAAI,CAAC;AAErB,aAAA,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAI;YACvB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,kBAAkB,EAAE;AAEzB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,uBAAuB,EAAE;;iBACzB;gBACL,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC,CAAC;;YAGpD,IAAI,CAAC,+BAA+B,EAAE;AACtC,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACxC,SAAC,CAAC;;AAGE,IAAA,oBAAoB,CAAC,mBAAqC,EAAA;AAChE,QAAA,MAAM,eAAe,GAAG,CAAC,GAAG,mBAAmB,CAAC;AAEhD,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,KAAK,KAAI;AAC1D,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,cAAc,GAAG,CAAC,KAAK,IAAI,CAAC,cAAc;YACxE,IAAI,OAAO,EAAE;AACX,gBAAA,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE;AAC/B,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,cAAc,CAAC,KAAK;AAC7B,iBAAA,CAAC;;AAEN,SAAC,CAAC;AAEF,QAAA,OAAO,eAAe;;IAGhB,+BAA+B,GAAA;QACrC,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAChE,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAAC,mBAAmB;;wGA7J7F,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EC5C/B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ojJAuIA,EDnGQ,MAAA,EAAA,CAAA,2xNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,sGACxB,yBAAyB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;AAGpB,kBAAkB,GAAA,UAAA,CAAA;AAf9B,IAAA,YAAY,EAAE;qCAuCmB,oBAAoB;QACvB,iBAAiB;QAClB,gBAAgB;QACZ,oBAAoB,CAAA;AA3BzC,CAAA,EAAA,kBAAkB,CA+J9B;4FA/JY,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAd9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGT,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACL,YAAY;wBACZ,aAAa;wBACb,mBAAmB;wBACnB,qBAAqB;wBACrB,wBAAwB;wBACxB,yBAAyB;AAC5B,qBAAA,EAAA,QAAA,EAAA,ojJAAA,EAAA,MAAA,EAAA,CAAA,2xNAAA,CAAA,EAAA;kLAGM,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAEsB,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU;;;AEtBhB,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB,CAAA;AAqBrB,IAAA,oBAAA;AACA,IAAA,iBAAA;AArBD,IAAA,YAAY;AACZ,IAAA,eAAe;AACf,IAAA,OAAO;IACP,eAAe,GAAG,EAAE;AACpB,IAAA,YAAY;IACZ,KAAK,GAAG,KAAK;IACb,KAAK,GAAG,KAAK;AACb,IAAA,gBAAgB;AAChB,IAAA,wBAAwB;AACxB,IAAA,aAAa;AACb,IAAA,qBAAqB;AACrB,IAAA,gBAAgB;AAEf,IAAA,YAAY,GAAG,IAAI,YAAY,EAAW;IAEpD,iBAAiB,GAAG,KAAK;IACzB,eAAe,GAAG,OAAO;AACzB,IAAA,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC;IAEvB,WACU,CAAA,oBAA0C,EAC1C,iBAAoC,EAAA;QADpC,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;;IAG3B,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;gBACjC,IAAI,CAAC,oBAAoB,EAAE;;;aAExB;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAC3D,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAC/C,cAAc,CAAC,IAAI,CAAC,CACrB;;;IAIL,eAAe,CAAC,KAAa,EAAE,IAAS,EAAA;AACtC,QAAA,OAAO,IAAI;;IAGb,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;;;IAIjC,YAAY,CAAC,CAAC,qBAAqB,CAAY,EAAA;QAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,IAAI,EAAE;QACrE,OAAO,qBAAqB,GAAG,cAAc,GAAG,EAAE;;IAG5C,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACnF,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACxC,SAAC,CAAC;;wGA7DO,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,ECjCjC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,isJAuHA,EDrGQ,MAAA,EAAA,CAAA,0jGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,0BAA0B,EAC1B,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,eAAe,EACf,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAEV,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACR,OAAO,CAAC,YAAY,EAAE;gBAClB,UAAU,CAAC,QAAQ,EAAE;oBACjB,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACtD,oBAAA,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;iBAC7E,CAAC;aACL,CAAC;AACL,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;AAEQ,oBAAoB,GAAA,UAAA,CAAA;AAtBhC,IAAA,YAAY,EAAE;qCA2CmB,oBAAoB;QACvB,iBAAiB,CAAA;AAtBnC,CAAA,EAAA,oBAAoB,CA+DhC;4FA/DY,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBArBhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAGhB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACL,YAAY;wBACZ,qBAAqB;wBACrB,0BAA0B;wBAC1B,eAAe;wBACf,kBAAkB;qBACrB,EACW,UAAA,EAAA;wBACR,OAAO,CAAC,YAAY,EAAE;4BAClB,UAAU,CAAC,QAAQ,EAAE;gCACjB,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACtD,gCAAA,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;6BAC7E,CAAC;yBACL,CAAC;AACL,qBAAA,EAAA,QAAA,EAAA,isJAAA,EAAA,MAAA,EAAA,CAAA,0jGAAA,CAAA,EAAA;sHAGM,YAAY,EAAA,CAAA;sBAApB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,wBAAwB,EAAA,CAAA;sBAAhC;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAES,YAAY,EAAA,CAAA;sBAArB;;;AEMI,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB,CAAA;AAyCd,IAAA,iBAAA;AAxCX,IAAA,QAAQ;AACR,IAAA,cAAc;AACd,IAAA,YAAY;AACZ,IAAA,UAAU;AACV,IAAA,cAAc;AACd,IAAA,KAAK;AACL,IAAA,KAAK;AACL,IAAA,qBAAqB;AACrB,IAAA,aAAa;AACb,IAAA,SAAS;AACT,IAAA,sBAAsB;AACtB,IAAA,UAAU;AACV,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,eAAe;AACf,IAAA,OAAO;IACP,eAAe,GAAG,EAAE;AACpB,IAAA,gBAAgB;AAChB,IAAA,0BAA0B;AAC1B,IAAA,gBAAgB;AAEf,IAAA,UAAU,GAAG,IAAI,YAAY,EAAa;AAC1C,IAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AACvC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAW;AAC1C,IAAA,cAAc,GAAG,IAAI,YAAY,EAAuB;AAEb,IAAA,mBAAmB;AACrB,IAAA,iBAAiB;AAEpE,IAAA,mBAAmB;IACnB,qBAAqB,GAAG,EAAE;IAC1B,uBAAuB,GAAG,EAAE;IAE5B,mBAAmB,GAAG,GAAG;IACzB,uBAAuB,GAAG,GAAG;IAC7B,WAAW,GAAG,CAAC;IAEf,QAAQ,GAAG,gEAAgE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AAErG,IAAA,WAAA,CAAoB,iBAAoC,EAAA;QAApC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;;IAErC,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;;AAGF,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,sBAAsB,EAAE;;aACxB;YACL,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa;YACvE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;;;;IAK5D,sBAAsB,GAAA;AAC5B,QAAA,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;AACtF,aAAA,IAAI,CACH,SAAS,CAAC,uBAAuB,CAAC,EAClC,YAAY,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,MAAM,CAAC,EAC5C,oBAAoB,EAAE,EACtB,cAAc,CAAC,IAAI,CAAC;aAErB,SAAS,CAAC,MAAM,IAAG;AAClB,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;AAEpC,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACxC,SAAC,CAAC;;AAGE,IAAA,uBAAuB,CAAC,UAAkB,EAAA;QAChD,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa;QAC/E,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;QAEpE,IAAI,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,gBAAgB,CAAC;AAErF,QAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACjD,YAAA,kBAAkB,GAAG,IAAI,CAAC,mBAAmB;;AAG/C,QAAA,IAAI,CAAC,uBAAuB,GAAG,kBAAkB;QACjD,IAAI,CAAC,qBAAqB,GAAG,GAAG,GAAG,IAAI,CAAC,uBAAuB;;IAGzD,oBAAoB,GAAA;QAC1B,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa;AACvE,QAAA,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;;IAGvE,yBAAyB,CAAC,UAAkB,EAAE,UAAkB,EAAA;AACtE,QAAA,OAAO,CAAC,UAAU,GAAG,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;;AAGzD,IAAA,wBAAwB,CAAC,MAAc,EAAA;AAC7C,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,mBAAmB;AAC7F,QAAA,OAAO,CAAC,gBAAgB,GAAG,GAAG,IAAI,MAAM;;wGAlG/B,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EA4BK,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,EACZ,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,6BClFjD,0gFA2EA,EAAA,MAAA,EAAA,CAAA,uwEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7BQ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,KAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,wBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,4BAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,kIACvB,oBAAoB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,OAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;AAGf,uBAAuB,GAAA,UAAA,CAAA;AAdnC,IAAA,YAAY,EAAE;qCAuD0B,iBAAiB,CAAA;AAzC7C,CAAA,EAAA,uBAAuB,CAoGnC;4FApGY,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAGd,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACL,YAAY;wBACZ,kBAAkB;wBAClB,sBAAsB;wBACtB,uBAAuB;wBACvB,oBAAoB;AACvB,qBAAA,EAAA,QAAA,EAAA,0gFAAA,EAAA,MAAA,EAAA,CAAA,uwEAAA,CAAA,EAAA;sFAGM,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,0BAA0B,EAAA,CAAA;sBAAlC;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBAEoD,mBAAmB,EAAA,CAAA;sBAAvE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBACA,iBAAiB,EAAA,CAAA;sBAAnE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;AEnC5C,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB,CAAA;AACjB,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,IAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAE7D,IAAA,QAAQ;AACR,IAAA,cAAc;AACd,IAAA,YAAY;AACZ,IAAA,UAAU;AACV,IAAA,KAAK;AACL,IAAA,KAAK;AACL,IAAA,qBAAqB;AACrB,IAAA,SAAS;AACT,IAAA,UAAU;AACV,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,IAAI;AACJ,IAAA,YAAY;AACZ,IAAA,eAAe;AACf,IAAA,OAAO;AACP,IAAA,aAAa;IACb,eAAe,GAAG,EAAE;AACpB,IAAA,gBAAgB;AAChB,IAAA,gBAAgB;AAEf,IAAA,UAAU,GAAG,IAAI,YAAY,EAAa;AAC1C,IAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AACvC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAW;AAC1C,IAAA,cAAc,GAAG,IAAI,YAAY,EAAuB;IAElE,QAAQ,GAAG,gEAAgE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AAErG,IAAA,gBAAgB;IAEhB,WAAW,GAAG,CAAC;AAEf,IAAA,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,KAAgB,YAAA,mBAAC,CAAC;IAE/F,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,IAAG;AAC1F,YAAA,IAAI,CAAC,gBAAgB,GAAG,YAAY;AACtC,SAAC,CAAC;;IAGJ,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAC1D,QAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,sCAAgB;AACxD,QAAA,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE;;IAG/C,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,IAAI,CAAC;;wGAnDpC,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EC/CpC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,yqFA8EA,EDvCQ,MAAA,EAAA,CAAA,syFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,KAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,wBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,4IACrB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,4BAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;AAGlB,uBAAuB,GAAA,UAAA,CAAA;AAfnC,IAAA,YAAY;AAeA,CAAA,EAAA,uBAAuB,CAqDnC;4FArDY,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAdnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAGd,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACL,YAAY;wBACZ,aAAa;wBACb,kBAAkB;wBAClB,qBAAqB;wBACrB,qBAAqB;wBACrB,uBAAuB;AAC1B,qBAAA,EAAA,QAAA,EAAA,yqFAAA,EAAA,MAAA,EAAA,CAAA,syFAAA,CAAA,EAAA;8BAOM,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,cAAc,EAAA,CAAA;sBAAvB;;;AEvBU,IAAA,sBAAsB,GAA5B,MAAM,sBAAsB,CAAA;AAChB,IAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAE3C,IAAA,QAAQ;AACR,IAAA,QAAQ;AACR,IAAA,cAAc;AACd,IAAA,YAAY;AACZ,IAAA,UAAU;AACV,IAAA,KAAK;AACL,IAAA,KAAK;IACL,sBAAsB,GAAG,IAAI;IAC7B,qBAAqB,GAAG,IAAI;AAE5B,IAAA,2BAA2B;IAEpC,IACI,SAAS,CAAC,KAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;aAC/C;AACL,YAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE;gBACvC,KAAK;AACL,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA,CAAC;YACF,IAAI,CAAC,cAAc,EAAE;;;AAIhB,IAAA,UAAU;AACV,IAAA,UAAU;AACV,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,IAAI;AACJ,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,eAAe;AACf,IAAA,OAAO;IACP,eAAe,GAAG,EAAE;AACpB,IAAA,QAAQ;AACR,IAAA,gBAAgB;;AAEhB,IAAA,aAAa;IACb,gBAAgB,GAAqB,OAAO;AAC5C,IAAA,UAAU;AAET,IAAA,UAAU,GAAG,IAAI,YAAY,EAAa;AAC1C,IAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AACvC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAW;AAC1C,IAAA,cAAc,GAAG,IAAI,YAAY,EAAuB;AAElE,IAAA,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW;AACpD,IAAA,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa;AAE3D,IAAA,cAAc;IACd,SAAS,GAAG,QAAQ;AACpB,IAAA,kBAAkB;IAElB,QAAQ,GAAA;QACN,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAGpD,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;;YAEvB,IAAI,CAAC,0BAA0B,EAAE;YAEjC,MAAM,mBAAmB,GACvB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAA+B,wBAAA;AACpD,kBAAE;AACF,kBAAE,IAAI,CAAC,YAAY;AACvB,YAAA,MAAM,iBAAiB,GACrB,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,sCAAsB,IAAI,CAAC,IAAI;AACrD,kBAAE;AACF,kBAAE,IAAI,CAAC,IAAI;YACf,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,sCAAsB,IAAI,CAAC,KAAK;YACxE,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU;AACxD,kBAAE,MAAM,CAAC,IAAI,CAAC,UAAU;kBACtB,qBAAqB;AAEzB,YAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAG;gBAC5E,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAC1C,QAAQ,EACR,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,IAAI,CACV;gBACD,IAAI,sBAAsB,EAAE;oBAC1B,IAAI,CAAC,eAAe,EAAE;;AAExB,gBAAA,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAC3D,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,EAAE;AAC9C,aAAC,CAAC;YAEF,IAAI,IAAI,CAAC,IAAI,KAAA,wBAAA,qCAAmC,IAAI,CAAC,KAAK,EAAE;AAC1D,gBAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAClF,oBAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE;AAC1C,oBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,wBAAA,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE;;AAEnD,iBAAC,CAAC;AAEF,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,oBAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACjF,wBAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE;AAC3C,qBAAC,CAAC;;;;;AAMV,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,IAAI,OAAO,OAAO,CAAC,QAAQ,EAAE,YAAY,KAAK,QAAQ,EAAE;AACxF,YAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAG;AAC5E,gBAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC;gBAClD,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACpD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;AACpD,aAAC,CAAC;;QAEJ,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,YAAY,EAAE;YAC9D,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY;;;AAItE,IAAA,cAAc,CAAC,IAAY,EAAA;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI;;IAGtC,cAAc,GAAA;QACpB,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE;QACtE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE;YAC3D,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,eAAe,CAAC,KAAK,CAAC;YACtE,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC;YAEhE,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,WAAW,CAAC;;;aAE9C;AACL,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC/D,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;;;;AAKpD,IAAA,mBAAmB,CAAC,eAG3B,EAAA;QACC,OAAO,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,eAAe,CAAC,KAAK,CAAC;;AAGzF,IAAA,sBAAsB,CAAC,QAG9B,EAAA;QACC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,QAAQ,EAAE,KAAK,CAAC;AAElF,QAAA,OAAO,YAAY,GAAG,YAAY,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO;;IAGvD,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;YACrD,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE;AAC/D,YAAA,IAAI,SAAS,EAAE,MAAM,EAAE;gBACrB,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;gBACzD,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;gBACzD,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE;AAC3C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;;;iBAEjF;AACL,gBAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,EAAE,CAAC;AAC7C,gBAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,EAAE,CAAC;AAC7C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,EAAE;;;;IAK9C,iBAAiB,GAAA;QACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI;;IAG/C,eAAe,GAAA;QACrB,IAAI,CAAC,YAAY,CAAC;AACf,aAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;aACzB,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAI;AAClD,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,YAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC9C,SAAC,CAAC;;AAGN;;;;AAIG;IACK,0BAA0B,GAAA;;QAEhC,MAAM,cAAc,GAAG,kCAAkC;QACzD,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC;AAC5D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,kBAAkB,GAAG,GAAG,GAAG,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;;;AAI5E,QAAA,IAAI,CAAC,eAAe,IAAI,kBAAkB,EAAE;;AAE1C,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE;;AAEvB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,4BAA4B,EAAE;gBACxD,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;;;;wGA5N/C,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpDnC,20GAgGA,EDlDQ,MAAA,EAAA,CAAA,w76LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,sbACZ,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,OAAA,EAAA,OAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,MAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,4BAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;AAGlB,sBAAsB,GAAA,UAAA,CAAA;AAdlC,IAAA,YAAY;AAcA,CAAA,EAAA,sBAAsB,CAgOlC;4FAhOY,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAblC,SAAS;+BACI,4BAA4B,EAAA,eAAA,EAGrB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA;wBACL,YAAY;wBACZ,mBAAmB;wBACnB,uBAAuB;wBACvB,uBAAuB;AAC1B,qBAAA,EAAA,QAAA,EAAA,20GAAA,EAAA,MAAA,EAAA,CAAA,w76LAAA,CAAA,EAAA;8BASM,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBAEQ,2BAA2B,EAAA,CAAA;sBAAnC;gBAGG,SAAS,EAAA,CAAA;sBADZ;gBAaQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,cAAc,EAAA,CAAA;sBAAvB;;;AExGI,MAAM,uBAAuB,GAAG,iBAAiB;;ACyDjD,MAAM,cAAc,GAAG,SAAS;;ACtDvC;;;;;AAKG;AACI,MAAM,sBAAsB,GAAG,IAAI,cAAc,CACtD,wBAAwB,EACxB;AACE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH;KACF;AACF,CAAA,CACF;;AChBD;;;;;;;;;;;;;;;;;;;AAmBG;MAIU,uBAAuB,CAAA;AACjB,IAAA,MAAM,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAExD;;;;AAIG;IACH,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;;AAG3B;;;;AAIG;IACH,uBAAuB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB;;wGAlB9B,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCZY,oBAAoB,CAAA;AACd,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC;IAE/C,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAA,CAAA,CAAG;;AAG5E,IAAA,cAAc,CACZ,IAAY,EACZ,SAAkD,EAClD,QAAgB,EAAA;QAEhB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,oBAAA,CAAsB,EACpC;AACE,YAAA,WAAW,EAAE,CAAC;YACd,QAAQ;YACR,IAAI;YACJ,SAAS;AACT,YAAA,kBAAkB,EAAE,CAAC;AACtB,SAAA,EACD,EAAE,EACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3B,IAAI,CACL;;AAGH,IAAA,eAAe,CACb,cAAsB,EACtB,IAAY,EACZ,SAAkD,EAClD,QAAgB,EAAA;QAEhB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,qBAAA,CAAuB,EACrC;YACE,QAAQ;YACR,IAAI;YACJ,SAAS;YACT,cAAc;AACf,SAAA,EACD,EAAE,EACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3B,IAAI,CACL;;IAGH,kBAAkB,CAChB,WAAmB,EACnB,kBAA0B,EAC1B,IAAY,EACZ,SAAkD,EAClD,QAAgB,EAAA;QAEhB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,aAAA,CAAe,EAC7B;YACE,WAAW;YACX,QAAQ;YACR,IAAI;YACJ,SAAS;YACT,kBAAkB;AACnB,SAAA,EACD,EAAE,EACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3B,IAAI,CACL;;AAGH,IAAA,cAAc,CAAC,KAAgB,EAAA;QAC7B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,WAAA,CAAa,EAC3B,KAAK,EACL,EAAE,EACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3B,IAAI,CACL;;IAGK,WAAW,CAAC,EAAE,KAAK,EAAqB,EAAA;AAC9C,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;;QAGhC,MAAM,gBAAgB,GAAG,SAAS,CAChC,GAAG,uBAAuB,CAAA,oBAAA,CAAsB,CACjD;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC;AAC5C,QAAA,OAAO,KAAK;;wGAzFH,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAApB,oBAAoB,EAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;MC6CY,iBAAiB,CAAA;AAuBlB,IAAA,oBAAA;AACA,IAAA,oBAAA;AACA,IAAA,QAAA;AACA,IAAA,QAAA;AACA,IAAA,MAAA;AA1BD,IAAA,kBAAkB,GAAG,CAAA,EAAG,uBAAuB,CAAA,YAAA,CAAc;AAE9D,IAAA,iBAAiB,GAA4B;AACnD,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,MAAM,EAAE;AACN,YAAA,EAAE,EAAE,CAAC;AACL,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,KAAK,EAAE,CAAC;AACT,SAAA;KACF;AACO,IAAA,eAAe;IACf,qBAAqB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC3E,IAAA,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;AAE9D,IAAA,oBAAoB,GAAG,MAAM,CAAU,KAAK,CAAC;AAErC,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAElC,IAAA,YAAY;IACZ,SAAS,GAAG,KAAK;IAEzB,WACU,CAAA,oBAA0C,EAC1C,oBAA0C,EAC1C,QAAyB,EACzB,QAAyB,EACzB,MAAqB,EAAA;QAJrB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAM,CAAA,MAAA,GAAN,MAAM;;IAGR,sBAAsB,GAAG,CAAC,EAAU,EAAE,KAAa,MAAM;QAC/D,EAAE,EAAE,EAAE,IAAI,CAAC;AACX,QAAA,IAAI,EAAE,CAAA,QAAA,EAAW,KAAK,GAAG,CAAC,CAAE,CAAA;AAC5B,QAAA,SAAS,EAAE,IAAI;AAChB,KAAA,CAAC;IAEF,6BAA6B,GAAG,CAC9B,QAAkB,EAClB,KAAa,MACQ;QACrB,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAG,EAAE,KAAK,CAAC;AACnD,QAAA,cAAc,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;QACvC,KAAK,EAAE,QAAQ,CAAC,KAAK;AACtB,KAAA,CAAC;IAEF,6BAA6B,GAAG,CAC9B,QAAqB,EACrB,KAAa,MACQ;QACrB,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAG,EAAE,KAAK,CAAC;AACnD,QAAA,cAAc,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE;AACtC,KAAA,CAAC;AAEF,IAAA,eAAe,CAAC,YAA2B,EAAA;AACzC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;;IAGlC,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;;IAG1B,oBAAoB,CAAC,gBAAkC,EAAE,YAAoB,EAAA;AAC3E,QAAA,MAAM,uBAAuB,GAAG,CAAG,EAAA,uBAAuB,qBAAqB;AAC/E,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,iBAAiB,EAAE,SAAS,CAAC,CAAG,EAAA,uBAAuB,QAAQ,CAAC;AAChE,YAAA,KAAK,EAAE,SAAS,CAAC,CAAG,EAAA,uBAAuB,OAAO,CAAC;AACnD,YAAA,OAAO,EAAE,SAAS,CAAC,CAAG,EAAA,uBAAuB,SAAS,CAAC;AACvD,YAAA,KAAK,EAAE,YAAY;SACpB;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACzD,gBAAgB;AAChB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,SAAS,EAAE,SAAS;AACrB,SAAA,CAAC;QAEF;AACG,aAAA,WAAW;aACX,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAEG,MAAI,CAAC,CAAC,CAAC;aAC7B,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;AAC1C,SAAC,CAAC;;IAGN,2BAA2B,GAAA;QACzB,OAAO,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,IAAI,CACrD,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,KAAA,KAAA,kCAAgC,CAC9D;;AAGH,IAAA,yBAAyB,CACvB,KAAa,EACb,gBAAkC,EAClC,YAAoB,EAAA;AAEpB,QAAA,MAAM,gCAAgC,GAAG,CAAG,EAAA,uBAAuB,2BAA2B;AAC9F,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,KAAK,EAAE,SAAS,CAAC,CAAG,EAAA,gCAAgC,OAAO,CAAC;AAC5D,YAAA,OAAO,EAAE,SAAS,CAAC,CAAG,EAAA,gCAAgC,SAAS,CAAC;AAChE,YAAA,iBAAiB,EAAE,SAAS,CAAC,CAAG,EAAA,gCAAgC,QAAQ,CAAC;AACzE,YAAA,KAAK,EAAE,YAAY;SACpB;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACzD,gBAAgB;AAChB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,SAAS,EAAE,SAAS;AACrB,SAAA,CAAC;QAEF;AACG,aAAA,WAAW;aACX,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAEA,MAAI,CAAC,CAAC,CAAC;aAC7B,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,KAAK,CAAC;AAC1D,SAAC,CAAC;;IAGN,yBAAyB,CACvB,gBAAwB,EACxB,gBAAsC,EACtC,gBAAqC,GAAA,OAAO,EAC5C,YAAqB,EAAA;AAErB,QAAA,MAAM,iCAAiC,GAAG,CAAG,EAAA,uBAAuB,0BAA0B;AAC9F,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,iBAAiB,EAAE,SAAS,CAC1B,CAAG,EAAA,iCAAiC,QAAQ,CAC7C;AACD,YAAA,KAAK,EAAE,SAAS,CAAC,CAAG,EAAA,iCAAiC,OAAO,CAAC;AAC7D,YAAA,OAAO,EAAE,SAAS,CAAC,CAAG,EAAA,iCAAiC,SAAS,CAAC;YACjE,IAAI,YAAY,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;SAC7C;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACzD,gBAAgB;AAChB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,SAAS,EAAE,SAAS;AACrB,SAAA,CAAC;QAEF;AACG,aAAA,WAAW;AACX,aAAA,IAAI,CAACA,MAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;YACpB,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE;gBACjD,IAAI,gBAAgB,EAAE;AACpB,oBAAA,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC;AAC5C,oBAAA,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC;;;iBAE5C;AACL,gBAAA,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,EAAE;;AAEpD,SAAC,CAAC;;AAGN,IAAA,qBAAqB,CAAC,QAA6B,EAAA;AACjD,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ;;IAGjC,uBAAuB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAC9C,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,KAAwB,KAAA,2BAAC,CAC7C;;IAGH,OAAO,CACL,QAAgB,EAChB,IAAY,EACZ,KAAK,GAAG,IAAI,EACZ,KAAK,GAAG,KAAK;;AAEb,IAAA,aAAa,GAAG,KAAK,EACrB,OAAO,GAAG,KAAK,EACf,EAAE,GAAG,CAAC,EACN,YAAY,GAAG,CAAC,EAChB,QAAyB,EAAA;QAEzB,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,aAAa,CAChB,QAAQ,EACR,YAAY,EACZ,IAAI,EACJ,EAAE,EACF,aAAa,EACb,OAAO,CACR;;aACI,IAAI,KAAK,EAAE;YAChB,MAAM,SAAS,GACb,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE;YAC/C,MAAM,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,MAAM;gBACtD,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,QAAQ,EAAE,QAAQ,CAAC,cAAc;AAClC,aAAA,CAAC,CAA4B;YAC9B,IAAI,CAAC,oBAAoB,CAAC;AACvB,iBAAA,IAAI,CAACA,MAAI,CAAC,CAAC,CAAC;AACZ,iBAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;gBACtB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAChC,EAAE,EACF,QAAQ,EACR,YAAY,EACZ,IAAI,EACJ,kBAA6C,EAC7C,QAAQ,EACR,aAAa,EACb,OAAO,CACR;AACD,gBAAA,IAAI,CAAC,MAAM,CACT,OAAO,EACP,aAAa,EACb,OAAO,EACP,QAAQ,IAAK,EAAqB,EAClC,SAAS,EACT,IAAI,EACJ,QAAQ,CACT;AACH,aAAC,CAAC;;;AAIR,IAAA,mBAAmB,CACjB,IAAY,EACZ,UAAkB,EAClB,gBAAwB,EAAA;AAExB,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,YAAY,CAAC;YACzC,IAAI;AACJ,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,aAAa,EAAE,UAAU;AACzB,YAAA,kBAAkB,EAAE,gBAAgB;AACrC,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,KAAK,CAAC;;IAGxD,kBAAkB,CAChB,IAAY,EACZ,gBAAwB,EAAA;AAExB,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,YAAY,CAAC;YACzC,IAAI;AACJ,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,kBAAkB,EAAE,gBAAgB;AACrC,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC;aACT,cAAc,CAAC,KAAK;AACpB,aAAA,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;;AAG/B,IAAA,wBAAwB,CAAC,gBAAwB,EAAA;AACvD,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,YAAY,CAAC;AACzC,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,kBAAkB,EAAE,gBAAgB;AACrC,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAACA,MAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;;AAGnE,IAAA,YAAY,CAAC,KAAyB,EAAA;QAC5C,IAAI,QAAQ,GAAG,EAAE;AAEjB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,QAAQ;;aACH;YACL,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,eAAe;AAC9C,YAAA,QAAQ,GAAG,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,OAAO,EAAE;;AAGjC,QAAA,MAAM,SAAS,GAAuB;AACpC,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,UAAU,EAAE,IAAI;YAChB,QAAQ;SACT;AAED,QAAA,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,EAAe;;AAGxC,IAAA,cAAc,CACpB,SAAiB,EACjB,gBAAwB,EACxB,IAAY,EAAA;AAEZ,QAAA,MAAM,KAAK,GAAc,IAAI,CAAC,YAAY,CAAC;YACzC,IAAI;AACJ,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,kBAAkB,EAAE,gBAAgB;AACrC,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,KAAK,CAAC;;AAGhD,IAAA,gBAAgB,CACtB,UAA0D,EAAA;QAM1D,IAAI,UAAU,EAAE;YACd,OAAO,UAAU,CAAC,MAAM,CACtB,CAAC,GAAG,EAAE,QAAQ,KAAI;AAChB,gBAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE;oBAChC,GAAG,CAAC,MAAM,EAAE;;qBACP;oBACL,GAAG,CAAC,KAAK,EAAE;;gBAEb,GAAG,CAAC,KAAK,EAAE;AACX,gBAAA,OAAO,GAAG;AACZ,aAAC,EACD,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAClC;;AAEH,QAAA,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;;AAGlC,IAAA,qBAAqB,CAC3B,qBAA8C,EAAA;AAE9C,QAAA,IAAI,CAAC,iBAAiB,GAAG,qBAAqB;QAC9C,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;;IAG9B,aAAa,CACnB,QAAgB,EAChB,YAAoB,EACpB,IAAY,EACZ,EAAU,EACV,aAAsB,EACtB,OAAgB,EAAA;AAEhB,QAAA,MAAM,SAAS,GAAkB,IAAI,CAAC,eAAe,EAAE;AACvD,QAAA,IAAI,OAA2C;QAC/C,IAAI,aAAa,EAAE;YACjB,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAChD,IAAI,EACJ,SAAS,EAAA,gBAAA,2CAEV;;aACI,IAAI,OAAO,EAAE;AAClB,YAAA,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,eAAe,CACjD,YAAY,EACZ,IAAI,EACJ,SAAS,6DAEV;;aACI;AACL,YAAA,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CACpD,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,SAAS,6DAEV;;AAEH,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,aAAa,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;;IAGrE,MAAM,CACZ,OAA2C,EAC3C,SAAwB,EACxB,gBAAwB,EACxB,gBAAyB,EACzB,IAAY,EAAA;QAEZ,IAAI,SAAS,GAAG,EAAE;QAElB;AACG,aAAA,IAAI,CACH,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACrB,YAAA,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC;AAC9B,SAAC,CAAC,EACFC,KAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,GAAkB,CAAC,CAAC,EAClDA,KAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EACvC,SAAS,CAAC,CAAC,aAAqC,KAC9C,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAC/BC,KAAG,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EACtDA,KAAG,CAAC,CAAC,WAAW,KAAI;YAClB,MAAM,2BAA2B,GAAG,SAAS,CAC3C,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAmD,iDAAA,CAAA,CAC9E;AACD,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;YAE/C,OAAO;AACL,gBAAA,MAAM,EAAE;oBACN,EAAE,EAAE,WAAW,CAAC,MAAM;oBACtB,KAAK,EAAE,WAAW,CAAC,KAAK;oBACxB,KAAK,EAAE,WAAW,CAAC,KAAK;AACzB,iBAAA;AACD,gBAAA,YAAY,EAAE,aAAa,CAAC,UAAU,EAAE,GAAG,CACzC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAoC,MAAM;oBAC1D,YAAY,EAAE,GAAG,CAAC;0BACd,GAAG,CAAC;0BACJ,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK;AAC/B,8BAAE,cAAc,CAAC,YAAY;AAC7B,8BAAE,cAAc,CAAC,UAAU,CAAC;AAC9B,oBAAA,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAC1B,GAAG,EACH,cAAc,EACd,cAAc,CAAC,cAAc,CAAC,EAC9B,2BAA2B,CAC5B;oBACD,MAAM,EAAE,UAAU,CAAC,QAAQ,GAAG,QAAQ,GAAG,OAAO;AACjD,iBAAA,CAAC,CACH;aACyB;AAC9B,SAAC,CAAC,EACFD,KAAG,CAAC,CAAC,qBAAqB,KACxB,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,CAClD,CACF,CACF,EACD,SAAS,CAAC,MACR,IAAI,CAAC,uBAAuB,CAC1B,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,IAAI,CACL,CACF;AAEF,aAAA,SAAS,EAAE;;AAGR,IAAA,aAAa,CACnB,EAAU,EACV,QAAgB,EAChB,YAAoB,EACpB,IAAY,EACZ,kBAA2C,EAC3C,QAA6B,EAC7B,aAAsB,EACtB,OAAgB,EAAA;QAEhB,IAAI,aAAa,EAAE;YACjB,OAAO,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAC7C,IAAI,EACJ,kBAAkB,EAClB,GAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAE,CAAA,CACxD;;aACI,IAAI,OAAO,EAAE;YAClB,OAAO,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAC9C,YAAY,EACZ,IAAI,EACJ,kBAAkB,EAClB,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAE,CAAA,CACxD;;aACI;YACL,OAAO,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CACjD,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,kBAAkB,EAClB,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAE,CAAA,CACxD;;;AAIL,IAAA,YAAY,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;AAGhB,IAAA,MAAM,CACZ,eAAmD,EACnD,kBAA2B,EAC3B,UAAU,GAAG,KAAK,EAClB,QAAwB,EACxB,SAA+C,EAC/C,IAAY,EACZ,gBAAwB,EAAA;QAExB,MAAM,WAAW,GAAG,8BAA8B;AAClD,QAAA,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;AACtC,QAAA,IAAI,UAAkB;QACtB,IAAI,SAAS,GAAG,EAAE;QAElB;AACG,aAAA,IAAI,CACH,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACrB,YAAA,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC;SAC7B,CAAC,EACFA,KAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,GAAkB,CAAC,CAAC,EAClDA,KAAG,CAAC,OAAO,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,EAC3CA,KAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EACvC,SAAS,CAAC,CAAC,aAAqC,KAC9C,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAC/BC,KAAG,CAAC,CAAC,UAAU,MAAM,UAAU,GAAG,UAAU,GAAG,EAAE,CAAC,CAAC,EACnDA,KAAG,CAAC,CAAC,UAA8C,KACjD,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACnB,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE;AAChB,gBAAA,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;;AAEtD,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE;AAChB,gBAAA,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;;AAEtD,YAAA,OAAO,CAAC;SACT,CAAC,CACH,EACDA,KAAG,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EACtDA,KAAG,CAAC,CAAC,WAAW,KAAI;YAClB,IAAI,CAAC,kBAAkB,EAAE;gBACvB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC;AAC1D,gBAAA,IAAI,CAAC,iBAAiB,CACpB,QAAQ,EACR,WAAW,EACX,aAAa,CAAC,UAAU,IAAI,EAAE,EAC9B,YAAY,EACZ,SAAS,CACV;;AAEH,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;YAC/C,MAAM,wBAAwB,GAAG,SAAS,CACxC,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAA+C,6CAAA,CAAA,CAC1E;YAED,OAAO;AACL,gBAAA,MAAM,EAAE;oBACN,EAAE,EAAE,WAAW,CAAC,MAAM;oBACtB,KAAK,EAAE,WAAW,CAAC,KAAK;oBACxB,KAAK,EAAE,WAAW,CAAC,KAAK;AACzB,iBAAA;AACD,gBAAA,YAAY,EAAE,aAAa,CAAC,UAAU,EAAE,GAAG,CACzC,CAAC,EACC,GAAG,EACH,UAAU,EACV,OAAO,GAC0B,MAAM;oBACvC,YAAY,EAAE,GAAG,CAAC;0BACd,GAAG,CAAC;0BACJ,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK;AAC/B,8BAAE,cAAc,CAAC,YAAY;AAC7B,8BAAE,cAAc,CAAC,UAAU,CAAC;AAC9B,oBAAA,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAC1B,GAAG,EACH,cAAc,EACd,cAAc,CAAC,cAAc,CAAC,EAC9B,wBAAwB,EACxB,OAAO,CACR;oBACD,MAAM,EAAE,UAAU,CAAC,QAAQ,GAAG,QAAQ,GAAG,OAAO;AACjD,iBAAA,CAAC,CACH;aACyB;AAC9B,SAAC,CAAC,EACFD,KAAG,CAAC,CAAC,qBAAqB,KACxB,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,CAClD,CACF,CACF,EACD,SAAS,CAAC,MACR,IAAI,CAAC,uBAAuB,CAC1B,CAAC,UAAU,IAAI,CAAC,kBAAkB,EAClC,SAAS,EACT,gBAAgB,EAChB,IAAI,CACL,CACF;AAEF,aAAA,SAAS,EAAE;;AAGR,IAAA,WAAW,CAAC,GAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,GAAG,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;;;IAI3B,iBAAiB,GAAA;QACvB,OAAO;YACL,UAAU,EAAE,SAAS,CACnB,CAAA,EAAG,IAAI,CAAC,kBAAkB,qCAAqC,CAChE;YACD,QAAQ,EAAE,SAAS,CACjB,CAAA,EAAG,IAAI,CAAC,kBAAkB,8BAA8B,CACzD;YACD,YAAY,EAAE,SAAS,CACrB,CAAA,EAAG,IAAI,CAAC,kBAAkB,uCAAuC,CAClE;SACF;;AAGK,IAAA,uBAAuB,CAC7B,gBAAyB,EACzB,SAAiB,EACjB,gBAAwB,EACxB,IAAY,EAAA;QAEZ,IAAI,gBAAgB,EAAE;YACpB,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,gBAAgB,EAAE,IAAI,CAAC;;aACxD;AACL,YAAA,OAAO,EAAE,CAAC,EAAuB,CAAC;;;;IAKtC,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;;IAG9B,mBAAmB,GAAA;QACjB,IAAI,CAAC,iBAAiB,GAAG;AACvB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,MAAM,EAAE;AACN,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,KAAK,EAAE,CAAC;AACT,aAAA;SACF;QAED,IAAI,CAAC,kBAAkB,EAAE;;IAG3B,kBAAkB,CAAC,kBAAkB,GAAG,KAAK,EAAA;QAC3C,IAAI,CAAC,oBAAoB,CAAC;AACvB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;AACjC,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,GACnD,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,EAAE,MAAM,CAAC;AAE1D,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAiC,4BAAA,uCAAA;AAClD,gBAAA,kBAAkB,EAAE,UAAU;AAC9B,gBAAA,4BAA4B,EAAE,cAAc;AAC5C,gBAAA,2BAA2B,EAAE,eAAe;AAC7C,aAAA,CAAC;AACJ,SAAC,CAAC;;IAGE,iBAAiB,CACvB,GAA2C,EAC3C,cAAsB,EACtB,gBAAwB,EACxB,wBAAgC,EAChC,OAAgD,EAChD,KAAe,EAAA;QAEf,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,GAAG,EAAE,MAAM,KAAK;kBACnB,GAAG,CAAC;kBACJ,wBAAwB;;AACvB,aAAA,IAAI,GAAG,EAAE,MAAM,EAAE;AACtB,YAAA,OAAO,GAAG,CAAC,MAAM,KAAK,OAAO,EAAE;kBAC3B,GAAG,CAAC;AACN,kBAAE,CAAA,EAAG,GAAG,CAAC,MAAM,CAAA,EAAA,EAAK,OAAO,EAAE,MAAM,IAAI,EAAE,CAAA,CAAE;;AACxC,aAAA,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc,EAAE;AACxC,YAAA,OAAO,gBAAgB;;AAEzB,QAAA,OAAO,wBAAwB;;IAGzB,iBAAiB,CACvB,QAAwB,EACxB,WAAsC,EACtC,mBAAuD,EACvD,YAAoB,EACpB,SAA+C,EAAA;AAE/C,QAAA,MAAM,EACJ,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,QAAQ,EACR,QAAQ,GACT,GAAG,IAAI,CAAC,wBAAwB,CAC/B,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,SAAS,CACV;AAED,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,mCAAmC,EAAE;AACvD,YAAA,gBAAgB,EAAE,QAAQ;AAC1B,YAAA,gBAAgB,EAAE,QAAQ;AAC1B,YAAA,wBAAwB,EAAE,QAAQ;AAClC,YAAA,uBAAuB,EAAE,YAAY;AACrC,YAAA,uBAAuB,EAAE,YAAY;AACrC,YAAA,sBAAsB,EAAE,WAAW;AACnC,YAAA,wBAAwB,EAAE,aAAa;AACvC,YAAA,wBAAwB,EAAE,aAAa;AACvC,YAAA,wBAAwB,EAAE,YAAY;AACvC,SAAA,CAAC;;IAGI,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,mBAAmB,EAAE;;IAGpB,wBAAwB,CAC9B,QAAwB,EACxB,EAAE,KAAK,EAA6B,EACpC,mBAAuD,EACvD,cAAoD,EAAA;QAEpD,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE;AACvE,QAAA,MAAM,WAAW,GAAG,iBAAiB,GAAG,KAAK,IAAI,CAAC;AAClD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC1E,QAAA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,QAAQ;AACnC,QAAA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QACxD,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CACnD,mBAAmB,EACnB,cAAc,CACf;QAED,OAAO;YACL,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACrC,QAAQ;YACR,QAAQ;YACR,WAAW;AACX,YAAA,YAAY,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM;AAC3C,YAAA,YAAY,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM;AAC3C,YAAA,aAAa,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM;AAC7C,YAAA,aAAa,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM;SAC9C;;IAGK,wBAAwB,CAC9B,mBAAuD,EACvD,cAAoD,EAAA;AAEpD,QAAA,MAAM,aAAa,GAAG;AACpB,YAAA,MAAM,EAAE;AACN,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA;SACF;AAED,QAAA,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,KAAI;AACjE,YAAA,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CACvC,CAAC,EAAE,KAAK,EAAE,KAAK,WAAW,KAAK,KAAK,CACrC;AACD,YAAA,MAAM,kBAAkB,GAAG,aAAa,EAAE;kBACtC,aAAa,CAAC;AAChB,kBAAE,aAAa,CAAC,MAAM;AAExB,YAAA,IAAI,UAAU,EAAE,QAAQ,EAAE;gBACxB,kBAAkB,CAAC,MAAM,EAAE;;iBACtB;gBACL,kBAAkB,CAAC,MAAM,EAAE;;AAE/B,SAAC,CAAC;AAEF,QAAA,OAAO,aAAa;;IAGd,uBAAuB,CAC7B,kBAA2B,EAC3B,MAAoD,EAAA;QAEpD,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC;QACzE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,gBAAgB,GAAG,QAAQ;AACjC,QAAA,IAAI,YAAY,GAA8B,MAAM,CAAC,UAAU,CAAC;AAChE,QAAA,IAAI,cAAc;AAElB,QAAA,IAAI,OAAO,YAAY,KAAK,SAAS,EAAE;YACrC,cAAc,GAAG,YAAY,GAAG,IAAI,GAAG,KAAK;;aACvC;AACL,YAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,YAAA,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,gBAAgB;kBACnD,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE;kBACzC,YAAY;;AAGlB,QAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE;;AAGhD,IAAA,wBAAwB,CAAC,kBAA2B,EAAA;QAC1D,OAAO,kBAAkB,GAAG,mBAAmB,GAAG,WAAW;;IAGvD,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;;wGA/wBrD,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAb,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAS,IAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAjB,iBAAiB,EAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;MCtCY,qBAAqB,CAAA;AAQZ,IAAA,iBAAA;AAPH,IAAA,kBAAkB,GAAG,CAAA,EAAG,uBAAuB,CAAA,MAAA,CAAQ;IACvD,YAAY,GAAG,iBAAiB;IAChC,mBAAmB,GAAG,GAAG;AAElC,IAAA,sBAAsB,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC;AACxD,IAAA,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE;AAEhE,IAAA,WAAA,CAAoB,iBAAoC,EAAA;QAApC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;;AAErC,IAAA,IAAI,CAAC,IAAwB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;IAGlB,QAAQ,GAAA;;AAEN,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE;AAC/C,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;;;AAI7B,IAAA,KAAK,CAAC,IAAwB,EAAA;QACpC,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAChD,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;QAEtD,IAAI,CAAC,yBAAyB,EAAE;;IAG1B,yBAAyB,GAAA;QAC/B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;;AAG7C,IAAA,OAAO,CAAC,IAAwB,EAAA;QACtC,IAAI,KAAK,GAAe,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAG;YACZ,KAAK,EAAE,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,kBAAkB,cAAc,CAAC;AAC1D,YAAA,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,kBAAkB,gBAAgB,CAAC;YAC9D,WAAW,EAAE,WAAW,CAAC,KAAK;SAC/B;AACD,QAAA,MAAM,KAAK,GAAG;YACZ,KAAK,EAAE,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,kBAAkB,cAAc,CAAC;AAC1D,YAAA,QAAQ,EAAE,oBAAoB;YAC9B,OAAO,EAAE,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,kBAAkB,gBAAgB,CAAC;YAC9D,WAAW,EAAE,WAAW,CAAC,MAAM;SAChC;AACD,QAAA,MAAM,KAAK,GAAG;YACZ,KAAK,EAAE,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,kBAAkB,cAAc,CAAC;AAC1D,YAAA,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,kBAAkB,gBAAgB,CAAC;YAC9D,WAAW,EAAE,WAAW,CAAC,GAAG;SAC7B;AACD,QAAA,MAAM,KAAK,GAAG;YACZ,KAAK,EAAE,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,kBAAkB,cAAc,CAAC;AAC1D,YAAA,QAAQ,EAAE,2BAA2B;YACrC,OAAO,EAAE,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,kBAAkB,gBAAgB,CAAC;YAC9D,WAAW,EAAE,WAAW,CAAC,WAAW;SACrC;AACD,QAAA,MAAM,KAAK,GAAG;YACZ,KAAK,EAAE,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,kBAAkB,cAAc,CAAC;AAC1D,YAAA,QAAQ,EAAE,8CAA8C;YACxD,OAAO,EAAE,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,kBAAkB,gBAAgB,CAAC;YAC9D,WAAW,EAAE,WAAW,CAAC,MAAM;SAChC;QAED,QAAQ,IAAI;AACV,YAAA,KAAA,UAAA;AACE,gBAAA,KAAK,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;gBAC3C;AACF,YAAA,KAAA,MAAA;gBACE,KAAK,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;gBAC7B;;QAGJ,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,YAAY;AACzB,YAAA,MAAM,EAAE,KAAK;YACb,iBAAiB,EAAE,IAAI,CAAC,mBAAmB;YAC3C,KAAK;SACN;;wGA/EQ,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAArB,qBAAqB,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;MCZY,qBAAqB,CAAA;AAEtB,IAAA,UAAA;AADV,IAAA,WAAA,CACU,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU;;IAIpB,sBAAsB,GAAA;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,kDAAkD,CAAC;;wGAPrE,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAArB,qBAAqB,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;ACuGY,IAAA,mCAAmC,GAAzC,MAAM,mCAAmC,CAAA;AAG7B,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC;AAC1C,IAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,IAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,YAAY,GAAG,MAAM,CAACW,cAAY,CAAC;AACnC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAEjE,IAAA,UAAU;AACQ,IAAA,QAAQ;AACR,IAAA,IAAI;AACtB,IAAA,oBAAoB;AACpB,IAAA,kBAAkB;AAClB,IAAA,MAAM;AAEL,IAAA,uBAAuB,GAAG,IAAI,YAAY,EAAO,CAAC;AAClD,IAAA,gCAAgC,GAAG,IAAI,YAAY,EAA6B;AAChF,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAAW;AAC/C,IAAA,YAAY,GAAG,IAAI,YAAY,EAAoB;AACnD,IAAA,uBAAuB,GAAG,IAAI,YAAY,EAAW;AACrD,IAAA,4BAA4B,GAAG,IAAI,YAAY,EAAiC;AAChF,IAAA,yBAAyB,GAAG,IAAI,YAAY,EAA8B;AAC1E,IAAA,sBAAsB,GAAG,IAAI,YAAY,EAA2B;AACpE,IAAA,mBAAmB,GAA0B,IAAI,YAAY,EAAW;IAE5D,SAAS,GAAG,qBAAqB;AAEtC,IAAA,YAAY,GAAiB,IAAI,YAAY,EAAE;IAEhE,QAAQ,GAAG,EAAE;IACb,SAAS,GAAG,QAAQ;AACpB,IAAA,IAAI,GAAwB,SAAA;AAC5B,IAAA,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;AAClD,IAAA,YAAY,GAAG,IAAI,GAAG,EAA+B;AACrD,IAAA,SAAS,GAAG,MAAM,CAAe,EAAE,CAAC;AACpC,IAAA,qBAAqB,GAAG,MAAM,CAA4B,EAAE,CAAC;IAC7D,YAAY,GAA0B,EAAE;AACxC,IAAA,eAAe;IACf,KAAK,GAAG,KAAK;IACb,KAAK,GAAG,IAAI;IACZ,IAAI,GAAG,EAAE;AACT,IAAA,iBAAiB;AACjB,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC;IAClF,gBAAgB,GAAsB,EAAE;AACxC,IAAA,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CAAC,mBAAmB;IACpE,oBAAoB,GAAG,KAAK;IAC5B,aAAa,GAAqB,OAAO;IAEjC,YAAY,GAAG,KAAK;IAE5B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE;AAC/B,YAAA,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC;AACzC,gBAAA,kBAAkB,EAAE,KAAK;AACzB,gBAAA,kBAAkB,EAAE,KAAK;AACzB,gBAAA,iBAAiB,EAAE,KAAK;AACzB,aAAA,CAAC;;AAGJ,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;IAGjC,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE;AAC/B,YAAA,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC;AACzC,gBAAA,kBAAkB,EAAE,IAAI;AACxB,gBAAA,kBAAkB,EAAE,IAAI;AACxB,gBAAA,iBAAiB,EAAE,IAAI;AACxB,aAAA,CAAC;YAEF,IAAI,CAAC,kBAAkB,EAAE;;QAG3B,MAAM,sBAAsB,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe;AAE1D,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAClC,YAAA,wBAAwB,EAAE,sBAAsB;AACjD,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC;AACrC,YAAA,QAAQ,EAAE,sBAAsB;AACjC,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,MAAK;YACxC,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE;gBAC/B,IAAI,CAAC,yBAAyB,EAAE;gBAChC,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,gBAAgB,EAAE;;SAE1B,CAAC,CACH;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE;gBAC/B,IAAI,CAAC,cAAc,EAAE;;iBAChB;gBACL,IAAI,CAAC,cAAc,EAAE;;SAExB,CAAC,CACH;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,YAAY,EAAE;;aACd;YACL,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;;QAEtC,IAAI,CAAC,YAAY,EAAE;;IAGrB,cAAc,GAAA;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAChE,gBAAgB,EAAE,IAAI,CAAC,aAAa;AACpC,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,SAAS,EAAE;AACT,gBAAA,KAAK,EAAE,SAAS,CAAC,0CAA0C,CAAC,IAAI,EAAE;AAClE,gBAAA,OAAO,EAAE,SAAS,CAAC,4CAA4C,CAAC,IAAI,EAAE;AACtE,gBAAA,iBAAiB,EAAE,SAAS,CAAC,2CAA2C,CAAC,IAAI,EAAE;AAC/E,gBAAA,gBAAgB,EAAE,SAAS,CAAC,2CAA2C,CAAC,IAAI,EAAE;gBAC9E,KAAK,EAAE,IAAI,CAAC,YAAY;AACzB,aAAA;AACF,SAAA,CAAC;QAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,IAAG;YACzC,IAAI,CAAC,MAAM,EAAE;gBACX;;YAGF,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,yBAAyB,EAAE;YAChC,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,gBAAgB,EAAE;AACzB,SAAC,CAAC;;IAGI,yBAAyB,GAAA;AAC/B,QAAA,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,EAAE;;IAG/C,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE;;IAG3C,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC;gBAChC,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE;AACtC,aAAA,CAAC;;;IAIE,oBAAoB,GAAA;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe;QAErC,IAAI,CAAC,QAAQ,EAAE;YACb;;AAGF,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAA2C,gBAAA;;QAG7C,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAA,CAAE;;IAGxD,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAClC,YAAA,wBAAwB,EAAE,KAAK;AAChC,SAAA,CAAC;;AAGJ,IAAA,cAAc,CAAC,gBAAqC,EAAA;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAC3C,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,gBAAgB,CAC/C,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAC9C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAChB,YAAY,EACZ,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,YAAY,CAClB;;AAGH,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;IAGlB,OAAO,GAAA;QACL,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAC5B,IAAI,CAAC,QAAQ,CAAC,EAAE,EAChB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,KAAK,EACL,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAC3B,IAAI,CAAC,QAAQ,CAAC,WAAW,EACzB,IAAI,CAAC,IAAI,CAAC,EAAE,EACZ,IAAI,CAAC,IAAI,CACV;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC9B,YAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC;AACrC,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;;AAIpC,IAAA,eAAe,CAAC,KAAgB,EAAA;AAC9B,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YAC1B;;AAGF,QAAA,IAAI,CAAC;AACF,aAAA,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC3D,aAAA,IAAI,CAACJ,MAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,EAAE;;IAGR,kBAAkB,GAAA;QACxB,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,QAAQ,CAAC,IAAI;AACV,aAAA,IAAI,CACH,cAAc,CAAC,IAAI,CAAC,EACpB,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aAExF,SAAS,EAAE,CACf;;IAGK,UAAU,GAAA;QAChB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,OAAO,EAAE;;IAGR,wBAAwB,GAAA;;AAE9B,QAAA,IAAI,CAAC;aACF,qBAAqB,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,gBAA0B;AACvE,aAAA,IAAI,CAACA,MAAI,CAAC,CAAC,CAAC;aACZ,SAAS,CAAC,YAAY,IAAG;AACxB,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC;AAC9C,SAAC,CAAC;;IAGE,YAAY,GAAA;AAClB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;QACxE,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,IAAI;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE;AAEvD,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,cAAc,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,CAAC;;IAGrF,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,KAAK,KAAK;QAC3D,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGzC,cAAc,GAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY;;IAG7C,UAAU,GAAA;QAChB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAoC;AAC/E,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACjB,YAAA;AACE,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,WAAW;AACnB,aAAA;AACF,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,eAAe,GAAG,WAAW;;IAG5B,QAAQ,GAAA;;;AAGd,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK;;IAGlB,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,GAAiB,SAAA;;IAGjD,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACnF,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE;kBAC/B,UAAA;AACD;AAEF,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC;AACjD,SAAC,CAAC;;IAGI,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE;YACzF,MAAM,kBAAkB,GAAG,IAAI;YAC/B,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,sDAAqC;AACpE,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;aACzB,EAAE,kBAAkB,CAAC;;;IAIlB,eAAe,GAAA;QACrB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;AAC9D,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,CAAC;;IAGrE,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC;AACF,aAAA,sBAAsB;aACtB,IAAI,CACHA,MAAI,CAAC,CAAC,CAAC,EACPC,KAAG,CAAC,iBAAiB,IAAG;AACtB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE;AACxC,YAAA,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,MAAM,KAAK,CAAC;YAE3D,IAAI,CAAC,YAAY,GAAG;AAClB,kBAAE;kBACA,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,SAAS,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpF,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,KAAK;AACjC,gBAAA,KAAK,EACH,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG;sBACxD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/D,sBAAE,SAAS;gBACf,KAAK,EAAE,QAAQ,CAAC,IAA2B;gBAC3C,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAC,CACJ;AACH,SAAC,CAAC,EACFA,KAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,SAAC,CAAC,EACFA,KAAG,CAAC,MAAK;YACP,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;AAC9D,YAAA,YAAY,CAAC,OAAO,CAAC,WAAW,IAAG;AACjC,gBAAA,IAAI,WAAW,CAAC,oBAAoB,CAAC,IAAI,EAAE;AACzC,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,WAAW,CAAC,oBAAoB,CAAC,IAA2B,EAC5D,WAAW,CAAC,IAAI,CACjB;;AAEL,aAAC,CAAC;AACJ,SAAC,CAAC,EACF,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,EAC3DA,KAAG,CAAC,CAAC,QAA6B,KAAI;AACpC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;YACpE,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,WAAW,CAAC;;YAE3D,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;YAChD,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAElC,SAAC,CAAC;aAEH,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,KAAK,CAAC;AAC9D,SAAC,CAAC;;IAGE,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AACnF,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,KAAgB,YAAA,qBAAG,MAAM,GAAG,OAAO;YAC7D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AAC5C,SAAC,CAAC;;IAGI,sBAAsB,GAAA;QAC5B,IAAI,CAAC,oBAAoB,CAAC;AACvB,aAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACzB,aAAA,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;IAGjE,2BAA2B,GAAA;AACjC,QAAA,IAAI,CAAC;AACF,aAAA,2BAA2B;AAC3B,aAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACzB,aAAA,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAI;AACvB,YAAA,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAC9C,KAAK,EACL,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,YAAY,CAClB;AACH,SAAC,CAAC;;IAGE,oBAAoB,GAAA;QAC1B,IAAI,CAAC,oBAAoB,CAAC;AACvB,aAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACzB,aAAA,SAAS,CAAC,CAAC,QAA6B,KAAI;AAC3C,YAAA,IAAI,CAAC,eAAe,GAAG,QAAQ;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC5C,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;iBACf;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,OAAO,CAAC,IAAI,CAAC,uCAAuC,QAAQ,CAAA,CAAE,CAAC;;AAEnE,SAAC,CAAC;;IAGE,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC;AACF,aAAA,uBAAuB;AACvB,aAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;aACzB,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC;AACpF,SAAC,CAAC;;IAGE,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,IAAG;AACvF,YAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;AAClC,SAAC,CAAC;;IAGI,eAAe,GAAA;AACrB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,QAAQ,KAAK;AACvE,YAAA,GAAG,QAAQ;AACX,YAAA,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;YACjC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,IAAI,EAAE;AACvD,SAAA,CAAC,CAAkB;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,SAAS,CAAC;AACjD,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CAAC;;IAGrF,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAC5D,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CACrD;;IAGK,YAAY,GAAA;QAClB,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;QACvE,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,2BAA2B,EAAE;YAClC,IAAI,CAAC,oBAAoB,EAAE;;;wGAndpB,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mCAAmC,EAxBnC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,gCAAA,EAAA,kCAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA,wBAAwB,CAAC,gBAAgB,CACvC,iBAAiB,EACjB,iBAAiB,EAAE,EACnB,uBAAuB,EACvB,CAAC,IAAY,KAAI;;;AAGf,gBAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAA+B,4BAAA,EAAA,IAAI,CAAO,KAAA,CAAA,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI;AACtF,gBAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;AAC3C,aAAC,CACF;YACD,kBAAkB;YAClB,oBAAoB;YACpB,iBAAiB;YACjB,qBAAqB;YACrB,iBAAiB;YACjBG,cAAY;YACZ,qBAAqB;YACrB,eAAe;;AAEf,YAAA,UAAU;AACX,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzGH,4vCAoCA,EAAA,MAAA,EAAA,CAAA,05OAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDuCI,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAX,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,qBAAqB,EACrB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,OAAA,EAAA,OAAA,EAAA,wBAAA,EAAA,uBAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,MAAA,EAAA,cAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,4QACZ,YAAY,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;AA0BH,mCAAmC,GAAA,UAAA,CAAA;AAvC/C,IAAA,YAAY;AAuCA,CAAA,EAAA,mCAAmC,CAsd/C;4FAtdY,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAtC/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,EAG3B,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA;wBACP,eAAe;wBACf,qBAAqB;wBACrB,uBAAuB;wBACvB,sBAAsB;wBACtB,gBAAgB;wBAChB,YAAY;wBACZ,YAAY;qBACb,EACU,SAAA,EAAA;AACT,wBAAA,wBAAwB,CAAC,gBAAgB,CACvC,iBAAiB,EACjB,iBAAiB,EAAE,EACnB,uBAAuB,EACvB,CAAC,IAAY,KAAI;;;AAGf,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAA+B,4BAAA,EAAA,IAAI,CAAO,KAAA,CAAA,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI;AACtF,4BAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;AAC3C,yBAAC,CACF;wBACD,kBAAkB;wBAClB,oBAAoB;wBACpB,iBAAiB;wBACjB,qBAAqB;wBACrB,iBAAiB;wBACjBU,cAAY;wBACZ,qBAAqB;wBACrB,eAAe;;AAEf,wBAAA,UAAU;AACX,qBAAA,EAAA,QAAA,EAAA,4vCAAA,EAAA,MAAA,EAAA,CAAA,05OAAA,CAAA,EAAA;8BAkBQ,UAAU,EAAA,CAAA;sBAAlB;gBAC0B,QAAQ,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACE,IAAI,EAAA,CAAA;sBAA9B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChB,oBAAoB,EAAA,CAAA;sBAA5B;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBAES,uBAAuB,EAAA,CAAA;sBAAhC;gBACS,gCAAgC,EAAA,CAAA;sBAAzC;gBACS,iBAAiB,EAAA,CAAA;sBAA1B;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,uBAAuB,EAAA,CAAA;sBAAhC;gBACS,4BAA4B,EAAA,CAAA;sBAArC;gBACS,yBAAyB,EAAA,CAAA;sBAAlC;gBACS,sBAAsB,EAAA,CAAA;sBAA/B;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;gBAEqB,SAAS,EAAA,CAAA;sBAA9B,WAAW;uBAAC,OAAO;;;AExItB;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACG,SAAU,oBAAoB,CAClC,MAA2B,EAAA;AAE3B,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA;AACE,YAAA,OAAO,EAAE,sBAAsB;AAC/B,YAAA,QAAQ,EAAE,MAAM;AACjB,SAAA;AACF,KAAA,CAAC;AACJ;;ACpCA;;AAEG;;ACFH;;AAEG;;;;"}
|