Full Code of Altinn/altinn-studio for AI

main 17af0f7949d3 cached
16689 files
59.0 MB
16.7M tokens
45147 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (66,717K chars total). Download the full file to get everything.
Repository: Altinn/altinn-studio
Branch: main
Commit: 17af0f7949d3
Files: 16689
Total size: 59.0 MB

Directory structure:
gitextract__dhnvitw/

├── .altinn-studio-root
├── .claude/
│   ├── settings.json
│   └── skills/
│       ├── rebase-stacked-pr/
│       │   └── SKILL.md
│       ├── tekstforfatter-docs/
│       │   └── SKILL.md
│       └── text-content-review/
│           ├── MODUL A - Terminologirevisjon.md
│           ├── MODUL B - Feilmeldinger.md
│           ├── MODUL C - Knapper og handlingstekster.md
│           ├── MODUL D - Ledetekster og hjelpetekster.md
│           ├── MODUL E - Tiltaleform og register.md
│           ├── MODUL F - Helhetlig innholdsrevisjon.md
│           ├── SKILL.md
│           └── Terminologi.md
├── .coderabbit.yaml
├── .codex/
│   ├── config.toml
│   └── rules/
│       └── default.rules
├── .dockerignore
├── .editorconfig
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── analysis.yml
│   │   ├── bug_report.yml
│   │   ├── chore.yml
│   │   ├── epic-security-requirements-verification.yml
│   │   ├── epic.yml
│   │   ├── feature_request.yml
│   │   ├── question.yml
│   │   ├── test_plan.md
│   │   └── user_story.yml
│   ├── actions/
│   │   ├── app-build-frontend/
│   │   │   └── action.yaml
│   │   ├── app-run-local-env/
│   │   │   └── action.yaml
│   │   ├── app-stop-local-env/
│   │   │   └── action.yaml
│   │   ├── codeql-config/
│   │   │   └── action.yaml
│   │   ├── setup-studioctl/
│   │   │   └── action.yaml
│   │   └── yarn-install/
│   │       └── action.yaml
│   ├── codeql/
│   │   ├── codeql-config-csharp.yml
│   │   └── codeql-config-javascript.yml
│   ├── containerscan/
│   │   └── allowedlist.yaml
│   ├── labeler.yml
│   ├── pull_request_template.md
│   ├── release.yml
│   ├── scripts/
│   │   ├── codeowners-generate.mjs
│   │   ├── construct-environments.mjs
│   │   ├── construct-environments.test.mjs
│   │   └── release.sh
│   └── workflows/
│       ├── app-backend-codeql.yml
│       ├── app-backend-formatting.yml
│       ├── app-backend-tests.yml
│       ├── app-codelists-codeql.yml
│       ├── app-codelists-tests.yml
│       ├── app-fileanalyzers-codeql.yml
│       ├── app-fileanalyzers-tests.yml
│       ├── app-frontend-codeql.yml
│       ├── app-frontend-compare-repos.yml
│       ├── app-frontend-cypress.yml
│       ├── app-frontend-k6-browser.yml
│       ├── app-frontend-lighthouse-ci.yml
│       ├── app-frontend-unit-tests.yml
│       ├── app-template-build-on-pr.yaml
│       ├── app-template-test.yml
│       ├── approve-pr.yaml
│       ├── cli-build-test.yaml
│       ├── codeowners-validate.yaml
│       ├── construct-environments-script-test.yaml
│       ├── deploy-designer.yaml
│       ├── deploy-gitea-runners.yaml
│       ├── deploy-lhci-server.yaml
│       ├── deploy-loadbalancer.yaml
│       ├── deploy-repositories.yaml
│       ├── deploy-runtime-apps-config.yaml
│       ├── deploy-runtime-flux-config.yaml
│       ├── deploy-runtime-gateway.yaml
│       ├── deploy-runtime-grafana-manifests.yaml
│       ├── deploy-runtime-kubernetes-wrapper.yaml
│       ├── deploy-runtime-localtest.yaml
│       ├── deploy-runtime-observability.yaml
│       ├── deploy-runtime-operator.yaml
│       ├── deploy-runtime-pdf3.yaml
│       ├── deploy-runtime-syncroot.yaml
│       ├── deploy-runtime-workflow-engine-app.yaml
│       ├── deploy-studio-ai-agents.yaml
│       ├── deploy-studio-mcp-server.yaml
│       ├── deploy-studio-observability.yaml
│       ├── deploy-studio-otel-operator.yaml
│       ├── deploy-studio-syncroot.yaml
│       ├── deployer-check.yaml
│       ├── designer-backend-check-quartz-update.yml
│       ├── designer-backend-codeql.yml
│       ├── designer-backend-dotnet-format.yaml
│       ├── designer-backend-dotnet-migrations-ensure-compatibility.yaml
│       ├── designer-backend-dotnet-test.yaml
│       ├── designer-backend-gitea-and-db-integration-tests.yaml
│       ├── designer-frontend-codeql.yml
│       ├── designer-frontend-playwright-staging.yml
│       ├── designer-frontend-run-playwright-on-pr.yaml
│       ├── designer-frontend-unit-tests.yml
│       ├── designer-scan.yml
│       ├── gitea-check-texts-file.yml
│       ├── gitea-proxy-test.yml
│       ├── gitea-runner-test.yml
│       ├── lint-pr.yaml
│       ├── mcp-build.yaml
│       ├── mcp-test.yaml
│       ├── playwright-resourceadm.yml
│       ├── pr-labeler.yml
│       ├── release-studioctl.yaml
│       ├── release.yaml
│       ├── releaser-build-test.yml
│       ├── repositories-scan.yml
│       ├── run-playwright-resourceadm-on-pr.yml
│       ├── runtime-devenv-build.yml
│       ├── runtime-gateway-tests.yaml
│       ├── runtime-health-build.yml
│       ├── runtime-kubernetes-wrapper-build.yaml
│       ├── runtime-localtest-build.yml
│       ├── runtime-operator-build.yml
│       ├── runtime-pdf3-build.yml
│       ├── runtime-workflow-engine-app-tests.yaml
│       ├── runtime-workflow-engine-tests.yaml
│       ├── storybook-to-github-pages.yaml
│       ├── studio-components-deploy.yaml
│       ├── studio-components-legacy-deploy.yaml
│       ├── template-docker-push.yaml
│       ├── template-flux-config-push.yaml
│       ├── template-helm-push.yaml
│       ├── template-runtime-construct-environments.yaml
│       ├── template-studio-construct-environments.yaml
│       └── validate-renovate.yaml
├── .gitignore
├── .husky/
│   └── pre-commit
├── .notes/
│   └── .gitkeep
├── .prettierignore
├── .vscode/
│   ├── extensions.json
│   └── settings.json
├── .yarn/
│   ├── patches/
│   │   └── jsdom-npm-26.1.0-3857255f02.patch
│   └── releases/
│       └── yarn-4.12.0.cjs
├── .yarnrc.yml
├── AGENTS.md
├── CLAUDE.md
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── charts/
│   ├── altinn-designer/
│   │   ├── .helmignore
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   ├── NOTES.txt
│   │   │   ├── _helpers.tpl
│   │   │   ├── db-migrations-job.yaml
│   │   │   ├── deployment.yaml
│   │   │   ├── ingress.yaml
│   │   │   ├── keys-pvc.yaml
│   │   │   ├── keys-storageclass.yaml
│   │   │   ├── service.yaml
│   │   │   ├── tests/
│   │   │   │   └── test-connection.yaml
│   │   │   └── wwwRedirectIngress.yaml
│   │   └── values.yaml
│   ├── altinn-designer-config/
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   └── helm-release.yaml
│   │   └── values.yaml
│   ├── altinn-loadbalancer/
│   │   ├── .helmignore
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   ├── NOTES.txt
│   │   │   ├── _helpers.tpl
│   │   │   ├── deployment.yaml
│   │   │   ├── exporter.yaml
│   │   │   ├── networkpolicy.yaml
│   │   │   ├── podmonitor.yaml
│   │   │   └── service.yaml
│   │   └── values.yaml
│   ├── altinn-loadbalancer-config/
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   └── helm-release.yaml
│   │   └── values.yaml
│   ├── altinn-repositories/
│   │   ├── .helmignore
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   ├── NOTES.txt
│   │   │   ├── _helpers.tpl
│   │   │   ├── deployment.yaml
│   │   │   ├── ingress.yaml
│   │   │   ├── networkpolicy.yaml
│   │   │   ├── proxy-deployment.yaml
│   │   │   ├── proxy-service.yaml
│   │   │   ├── service.yaml
│   │   │   └── tests/
│   │   │       └── test-connection.yaml
│   │   └── values.yaml
│   ├── altinn-repositories-config/
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   └── helm-release.yaml
│   │   └── values.yaml
│   ├── gitea-org-runner/
│   │   ├── .helmignore
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   ├── _helpers.tpl
│   │   │   └── deployment.yaml
│   │   └── values.yaml
│   └── gitea-org-runner-config/
│       ├── Chart.yaml
│       ├── templates/
│       │   └── helm-release.yaml
│       └── values.yaml
├── codecov.yml
├── docs/
│   └── adr/
│       ├── 2024-09-25-signing-configuration.md
│       ├── 2024-09-25-signing-interface.md
│       ├── 2024-10-02-signing-transaction-handling.md
│       ├── 2024-10-17-app-component-library.md
│       ├── 2025-06-12-environment-specific-config.md
│       ├── 2025-06-12-signing-notify-delegatee.md
│       ├── 2025-09-04-studio-library-persistence.md
│       ├── 2025-09-23-backend-data-initialization.md
│       ├── 2025-10-08-studio-library-persistence-2.md
│       ├── 2025-10-17-using-go.md
│       ├── 2025-10-22-pdf-generation-architecture.md
│       ├── 2025-11-25-frontend-performance-monitoring-strategy.md
│       ├── 2026-01-07-monitoring-telemetry-collection-distribution.md
│       ├── 2026-02-19-app-components-i18n.md
│       ├── 2026-02-24-translation-key-validation.md
│       └── yyyy-mm-dd-template.md
├── infra/
│   ├── observability/
│   │   ├── base/
│   │   │   ├── clusterrole.yaml
│   │   │   ├── clusterrolebinding.yaml
│   │   │   ├── gateway-headless-svc.yaml
│   │   │   ├── gateway.yaml
│   │   │   ├── kustomization.yaml
│   │   │   ├── network-policy.yaml
│   │   │   ├── router-svc.yaml
│   │   │   ├── router.yaml
│   │   │   └── serviceaccount.yaml
│   │   ├── build.sh
│   │   ├── runtime/
│   │   │   ├── env/
│   │   │   │   ├── at22/
│   │   │   │   │   └── kustomization.yaml
│   │   │   │   ├── at23/
│   │   │   │   │   └── kustomization.yaml
│   │   │   │   ├── at24/
│   │   │   │   │   └── kustomization.yaml
│   │   │   │   ├── prod/
│   │   │   │   │   └── kustomization.yaml
│   │   │   │   ├── tt02/
│   │   │   │   │   └── kustomization.yaml
│   │   │   │   └── yt01/
│   │   │   │       └── kustomization.yaml
│   │   │   ├── kustomization.yaml
│   │   │   └── overlay/
│   │   │       ├── kustomization.yaml
│   │   │       └── patches/
│   │   │           ├── gateway-config.yaml
│   │   │           ├── gateway-secrets.yaml
│   │   │           ├── linkerd-injection.yaml
│   │   │           ├── network-policy-labels.yaml
│   │   │           └── router-config.yaml
│   │   └── studio/
│   │       ├── env/
│   │       │   ├── dev/
│   │       │   │   └── kustomization.yaml
│   │       │   ├── prod/
│   │       │   │   └── kustomization.yaml
│   │       │   └── staging/
│   │       │       └── kustomization.yaml
│   │       ├── kustomization.yaml
│   │       └── overlay/
│   │           ├── kustomization.yaml
│   │           └── patches/
│   │               ├── gateway-config.yaml
│   │               ├── gateway-secrets.yaml
│   │               └── router-config.yaml
│   ├── runtime/
│   │   ├── apps-config/
│   │   │   ├── at22/
│   │   │   │   └── kustomization.yaml
│   │   │   ├── at23/
│   │   │   │   └── kustomization.yaml
│   │   │   ├── at24/
│   │   │   │   └── kustomization.yaml
│   │   │   ├── base/
│   │   │   │   ├── apps-runtime-common-env.yaml
│   │   │   │   ├── apps-runtime-common.yaml
│   │   │   │   └── kustomization.yaml
│   │   │   ├── prod/
│   │   │   │   └── kustomization.yaml
│   │   │   ├── tt02/
│   │   │   │   └── kustomization.yaml
│   │   │   └── yt01/
│   │   │       └── kustomization.yaml
│   │   ├── flux-config/
│   │   │   ├── flux-config.yaml
│   │   │   └── kustomization.yaml
│   │   ├── grafana-manifests/
│   │   │   ├── alert-rules/
│   │   │   │   ├── altinn-apps.yaml
│   │   │   │   └── kustomization.yaml
│   │   │   ├── contact-points/
│   │   │   │   ├── altinn-studio-gateway.yaml
│   │   │   │   └── kustomization.yaml
│   │   │   ├── dashboards/
│   │   │   │   ├── altinn-apps.yaml
│   │   │   │   └── kustomization.yaml
│   │   │   ├── kustomization.yaml
│   │   │   └── service-accounts/
│   │   │       ├── altinn-studio-gateway-sa.yaml
│   │   │       └── kustomization.yaml
│   │   └── syncroot/
│   │       ├── at22/
│   │       │   └── kustomization.yaml
│   │       ├── at23/
│   │       │   └── kustomization.yaml
│   │       ├── at24/
│   │       │   └── kustomization.yaml
│   │       ├── base/
│   │       │   ├── altinn-charts.yaml
│   │       │   ├── apps-config.yaml
│   │       │   ├── apps-syncroot.yaml
│   │       │   ├── flux-config.yaml
│   │       │   ├── gateway.yaml
│   │       │   ├── kubernetes-wrapper.yaml
│   │       │   ├── kustomization.yaml
│   │       │   ├── observability.yaml
│   │       │   ├── operator.yaml
│   │       │   ├── pdf.yaml
│   │       │   └── pdf3.yaml
│   │       ├── grafana-manifests/
│   │       │   ├── grafana-manifests.yaml
│   │       │   └── kustomization.yaml
│   │       ├── prod/
│   │       │   └── kustomization.yaml
│   │       ├── tt02/
│   │       │   ├── kustomization.yaml
│   │       │   └── workflow-engine-app.yaml
│   │       └── yt01/
│   │           └── kustomization.yaml
│   └── studio/
│       ├── otel-operator/
│       │   ├── base/
│       │   │   ├── helmrelease.yaml
│       │   │   ├── helmrepository.yaml
│       │   │   ├── kustomization.yaml
│       │   │   └── namespace.yaml
│       │   └── kustomization.yaml
│       └── syncroot/
│           ├── README.md
│           ├── base/
│           │   ├── altinn-altinity-agents.yaml
│           │   ├── altinn-designer.yaml
│           │   ├── altinn-loadbalancer.yaml
│           │   ├── altinn-mcp-server.yaml
│           │   ├── altinn-repositories.yaml
│           │   ├── gitea-runners.yaml
│           │   ├── kubernetes-wrapper.yaml
│           │   ├── kustomization.yaml
│           │   ├── lhci.yaml
│           │   ├── observability.yaml
│           │   └── otel-operator.yaml
│           ├── dev/
│           │   └── kustomization.yaml
│           ├── prod/
│           │   └── kustomization.yaml
│           └── staging/
│               └── kustomization.yaml
├── libs/
│   ├── form-component/
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── FormComponent/
│   │   │   │   ├── FormComponent.test.tsx
│   │   │   │   ├── FormComponent.tsx
│   │   │   │   └── index.ts
│   │   │   ├── app-components/
│   │   │   │   ├── Card/
│   │   │   │   │   ├── Card.module.css
│   │   │   │   │   ├── Card.test.tsx
│   │   │   │   │   ├── Card.tsx
│   │   │   │   │   └── index.ts
│   │   │   │   └── index.ts
│   │   │   ├── index.ts
│   │   │   ├── modules.ts
│   │   │   ├── test/
│   │   │   │   └── setup.ts
│   │   │   └── types/
│   │   │       ├── DataModelBinding.ts
│   │   │       ├── FormComponentAction.ts
│   │   │       ├── FormComponentActionType.ts
│   │   │       └── FormComponentProps.ts
│   │   ├── tsconfig.json
│   │   └── vitest.config.ts
│   └── form-engine/
│       ├── eslint.config.mjs
│       ├── package.json
│       ├── src/
│       │   ├── FormEngine/
│       │   │   ├── FormEngine.test.ts
│       │   │   ├── FormEngine.ts
│       │   │   └── index.ts
│       │   ├── index.ts
│       │   └── test/
│       │       └── setup.ts
│       ├── tsconfig.json
│       └── vitest.config.ts
├── package.json
├── prettier.config.js
├── renovate.json
├── scripts/
│   └── pre-commit-check-for-skipped-tests
└── src/
    ├── .dockerignore
    ├── .gitignore
    ├── AI/
    │   ├── AGENTS.md
    │   ├── CLAUDE.md
    │   ├── agents/
    │   │   ├── .gitignore
    │   │   ├── .python-version
    │   │   ├── LANGFUSE_SETUP.md
    │   │   ├── README.md
    │   │   ├── agents/
    │   │   │   ├── __init__.py
    │   │   │   ├── graph/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── nodes/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── actor_node.py
    │   │   │   │   │   ├── assistant_node.py
    │   │   │   │   │   ├── intake_node.py
    │   │   │   │   │   ├── planner_node.py
    │   │   │   │   │   ├── planning_tool_node.py
    │   │   │   │   │   ├── reviewer_node.py
    │   │   │   │   │   ├── spec_node.py
    │   │   │   │   │   └── verifier_node.py
    │   │   │   │   ├── nodes.py
    │   │   │   │   ├── runner.py
    │   │   │   │   └── state.py
    │   │   │   ├── prompts/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── assistant_response_generation.md
    │   │   │   │   ├── assistant_tool_orchestration.md
    │   │   │   │   ├── chat_assistant.md
    │   │   │   │   ├── general_planning.md
    │   │   │   │   ├── goal_suggestions.md
    │   │   │   │   ├── intake_planning.md
    │   │   │   │   ├── intent_security.md
    │   │   │   │   ├── llm-as-a-judge/
    │   │   │   │   │   ├── implementation_match.md
    │   │   │   │   │   ├── intent_match.md
    │   │   │   │   │   └── no_hallucination.md
    │   │   │   │   ├── loader.py
    │   │   │   │   ├── patch_synthesis.md
    │   │   │   │   ├── reviewer_decision.md
    │   │   │   │   ├── semantic_query_extraction.md
    │   │   │   │   ├── spec_extraction.md
    │   │   │   │   ├── templates/
    │   │   │   │   │   ├── assistant_response_user.md
    │   │   │   │   │   ├── assistant_tool_selection_user.md
    │   │   │   │   │   ├── chat_assistant_user.md
    │   │   │   │   │   ├── general_planning_user.md
    │   │   │   │   │   ├── intake_planning_user.md
    │   │   │   │   │   ├── patch_synthesis_user.md
    │   │   │   │   │   ├── reviewer_decision_user.md
    │   │   │   │   │   ├── semantic_query_user.md
    │   │   │   │   │   ├── spec_extraction_user.md
    │   │   │   │   │   ├── tool_planning_user.md
    │   │   │   │   │   └── verifier_error_fix_user.md
    │   │   │   │   ├── tool_planning.md
    │   │   │   │   └── verifier_error_fixer.md
    │   │   │   ├── schemas/
    │   │   │   │   ├── __init__.py
    │   │   │   │   └── plan_schema.py
    │   │   │   ├── schemas.py
    │   │   │   ├── services/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── evaluation/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── hallucination_judge.py
    │   │   │   │   │   ├── implementation_judge.py
    │   │   │   │   │   └── intent_judge.py
    │   │   │   │   ├── events/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── events.py
    │   │   │   │   │   └── jobs.py
    │   │   │   │   ├── git/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── git_ops.py
    │   │   │   │   │   └── repo_manager.py
    │   │   │   │   ├── llm/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── intent_parser.py
    │   │   │   │   │   ├── llm_client.py
    │   │   │   │   │   └── semantic_query.py
    │   │   │   │   ├── mcp/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── mcp_client.py
    │   │   │   │   │   ├── mcp_verification.py
    │   │   │   │   │   ├── patch_generator.py
    │   │   │   │   │   ├── plan_atomic_step.py
    │   │   │   │   │   └── tool_execution.py
    │   │   │   │   ├── patching/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── actor_sync.py
    │   │   │   │   │   ├── patch_normalizer.py
    │   │   │   │   │   └── patch_validator.py
    │   │   │   │   ├── repo/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── anchor_resolver.py
    │   │   │   │   │   ├── repo_discovery.py
    │   │   │   │   │   └── resource_manager.py
    │   │   │   │   ├── telemetry/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   └── json_utils.py
    │   │   │   │   └── validation/
    │   │   │   │       ├── __init__.py
    │   │   │   │       ├── contract_validator.py
    │   │   │   │       ├── enhanced_verifier.py
    │   │   │   │       └── verify.py
    │   │   │   └── workflows/
    │   │   │       ├── __init__.py
    │   │   │       ├── actor/
    │   │   │       │   ├── __init__.py
    │   │   │       │   └── pipeline.py
    │   │   │       ├── intake/
    │   │   │       │   ├── __init__.py
    │   │   │       │   └── pipeline.py
    │   │   │       ├── reviewer/
    │   │   │       │   ├── __init__.py
    │   │   │       │   └── pipeline.py
    │   │   │       ├── shared/
    │   │   │       │   ├── __init__.py
    │   │   │       │   └── utils.py
    │   │   │       ├── spec/
    │   │   │       │   ├── __init__.py
    │   │   │       │   └── pipeline.py
    │   │   │       └── verifier/
    │   │   │           ├── __init__.py
    │   │   │           └── pipeline.py
    │   │   ├── api/
    │   │   │   ├── __init__.py
    │   │   │   ├── dependencies.py
    │   │   │   ├── main.py
    │   │   │   └── routes/
    │   │   │       ├── __init__.py
    │   │   │       ├── agent.py
    │   │   │       └── websocket.py
    │   │   ├── docker-compose.langfuse.yml
    │   │   ├── docker-compose.yaml
    │   │   ├── dockerfile
    │   │   ├── infra/
    │   │   │   └── kustomize/
    │   │   │       ├── deployment.yaml
    │   │   │       ├── kustomization.yaml
    │   │   │       ├── service.yaml
    │   │   │       └── serviceaccount.yaml
    │   │   ├── pyproject.toml
    │   │   ├── requirements-dev.txt
    │   │   ├── requirements.txt
    │   │   ├── shared/
    │   │   │   ├── config/
    │   │   │   │   ├── __init__.py
    │   │   │   │   └── base_config.py
    │   │   │   ├── models/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── attachments.py
    │   │   │   │   └── common_models.py
    │   │   │   └── utils/
    │   │   │       ├── __init__.py
    │   │   │       ├── langfuse_utils.py
    │   │   │       ├── logging_utils.py
    │   │   │       └── path_utils.py
    │   │   └── tests/
    │   │       ├── README.md
    │   │       ├── api/
    │   │       │   └── test_main.py
    │   │       └── unit/
    │   │           ├── test_mcp_client.py
    │   │           ├── test_template_engine.py
    │   │           └── test_verifier_fixer.py
    │   ├── augmenter-agent/
    │   │   ├── .dockerignore
    │   │   ├── README.md
    │   │   ├── TODO-coderabbit.md
    │   │   ├── augmenter-agent.sln
    │   │   ├── docker-compose.yaml
    │   │   ├── dockerfile
    │   │   ├── src/
    │   │   │   └── Altinn.Augmenter.Agent/
    │   │   │       ├── Altinn.Augmenter.Agent.csproj
    │   │   │       ├── Configuration/
    │   │   │       │   ├── CallbackOptions.cs
    │   │   │       │   ├── PdfGenerationOptions.cs
    │   │   │       │   └── UploadOptions.cs
    │   │   │       ├── Endpoints/
    │   │   │       │   ├── GenerateAsyncEndpoints.cs
    │   │   │       │   ├── GenerateEndpoints.cs
    │   │   │       │   └── HealthEndpoints.cs
    │   │   │       ├── Models/
    │   │   │       │   ├── ParsedFormData.cs
    │   │   │       │   ├── PdfGenerationJob.cs
    │   │   │       │   └── UploadedFile.cs
    │   │   │       ├── Program.cs
    │   │   │       ├── Properties/
    │   │   │       │   └── launchSettings.json
    │   │   │       ├── Services/
    │   │   │       │   ├── CallbackService.cs
    │   │   │       │   ├── CallbackUrlValidator.cs
    │   │   │       │   ├── ICallbackService.cs
    │   │   │       │   ├── ICallbackUrlValidator.cs
    │   │   │       │   ├── IMultipartParserService.cs
    │   │   │       │   ├── IPdfGenerationQueue.cs
    │   │   │       │   ├── IPdfGeneratorService.cs
    │   │   │       │   ├── MultipartParserService.cs
    │   │   │       │   ├── PdfGenerationBackgroundService.cs
    │   │   │       │   ├── PdfGenerationQueue.cs
    │   │   │       │   └── PdfGeneratorService.cs
    │   │   │       ├── appsettings.Development.json
    │   │   │       ├── appsettings.json
    │   │   │       └── pdf-templates/
    │   │   │           └── default.typ
    │   │   └── test/
    │   │       └── Altinn.Augmenter.Agent.Tests/
    │   │           ├── Altinn.Augmenter.Agent.Tests.csproj
    │   │           ├── GlobalUsings.cs
    │   │           ├── Integration/
    │   │           │   ├── GenerateAsyncTests.cs
    │   │           │   ├── GenerateTests.cs
    │   │           │   ├── HealthTests.cs
    │   │           │   └── Helpers/
    │   │           │       ├── TestWebApplicationFactory.cs
    │   │           │       └── TypstLocator.cs
    │   │           └── Unit/
    │   │               ├── CallbackServiceTests.cs
    │   │               ├── CallbackUrlValidatorTests.cs
    │   │               ├── MultipartParserServiceTests.cs
    │   │               └── PdfGeneratorServiceTests.cs
    │   └── mcp/
    │       ├── .gitignore
    │       ├── README.md
    │       ├── codegen/
    │       │   ├── __init__.py
    │       │   ├── cli.py
    │       │   ├── core/
    │       │   │   ├── __init__.py
    │       │   │   ├── config.py
    │       │   │   └── utils.py
    │       │   ├── evaluation/
    │       │   │   └── __init__.py
    │       │   ├── expressions/
    │       │   │   ├── __init__.py
    │       │   │   ├── config.py
    │       │   │   ├── generator.py
    │       │   │   └── utils.py
    │       │   ├── pipeline/
    │       │   │   ├── __init__.py
    │       │   │   ├── core.py
    │       │   │   ├── llm_helpers.py
    │       │   │   ├── state.py
    │       │   │   └── steps.py
    │       │   ├── repositories/
    │       │   │   ├── __init__.py
    │       │   │   └── app_fetcher.py
    │       │   └── vector_store/
    │       │       ├── __init__.py
    │       │       ├── chunker.py
    │       │       ├── loader.py
    │       │       └── store.py
    │       ├── docker-compose.yaml
    │       ├── dockerfile
    │       ├── docs/
    │       │   ├── tools-priority-list-long-term.md
    │       │   └── tools-priority-list-short-term.md
    │       ├── infra/
    │       │   └── kustomize/
    │       │       ├── deployment.yaml
    │       │       ├── kustomization.yaml
    │       │       ├── service.yaml
    │       │       └── serviceaccount.yaml
    │       ├── initiate_mcp.py
    │       ├── pyproject.toml
    │       ├── requirements.txt
    │       ├── scripts/
    │       │   ├── __init__.py
    │       │   ├── gitea_client.py
    │       │   └── github_client.py
    │       ├── server/
    │       │   ├── __init__.py
    │       │   ├── auth.py
    │       │   ├── config.py
    │       │   ├── handlers/
    │       │   │   ├── __init__.py
    │       │   │   ├── datamodel_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   ├── converters/
    │       │   │   │   │   ├── __init__.py
    │       │   │   │   │   ├── json_schema_to_metamodel.py
    │       │   │   │   │   ├── metamodel_to_csharp.py
    │       │   │   │   │   └── metamodel_to_xsd.py
    │       │   │   │   ├── datamodel_context.md
    │       │   │   │   ├── datamodel_sync_tool.py
    │       │   │   │   ├── metamodel/
    │       │   │   │   │   ├── __init__.py
    │       │   │   │   │   ├── enums.py
    │       │   │   │   │   └── model_metadata.py
    │       │   │   │   ├── utils/
    │       │   │   │   │   ├── __init__.py
    │       │   │   │   │   ├── naming.py
    │       │   │   │   │   ├── restrictions.py
    │       │   │   │   │   └── type_mapping.py
    │       │   │   │   └── wrapper.py
    │       │   │   ├── dynamic_expression_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   ├── dynamic_expression_context.md
    │       │   │   │   └── wrapper.py
    │       │   │   ├── help_tool/
    │       │   │   │   └── wrapper.py
    │       │   │   ├── layout_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   ├── layout_components_tool_no_llm.py
    │       │   │   │   ├── layout_properties_tool.py
    │       │   │   │   ├── schema_validator_tool.py
    │       │   │   │   └── wrapper.py
    │       │   │   ├── planning_tool/
    │       │   │   │   ├── doc_search.py
    │       │   │   │   ├── llms-full.txt
    │       │   │   │   ├── llms.txt
    │       │   │   │   ├── planning_context.md
    │       │   │   │   └── wrapper.py
    │       │   │   ├── policy_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   ├── policy_context.md
    │       │   │   │   ├── policy_summarization_tool.py
    │       │   │   │   ├── policy_validation_tool.py
    │       │   │   │   ├── static.py
    │       │   │   │   └── wrapper.py
    │       │   │   ├── prefill_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   ├── prefill_context.md
    │       │   │   │   └── wrapper.py
    │       │   │   ├── register.py
    │       │   │   ├── resource_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   ├── base_validator.py
    │       │   │   │   ├── resource_context.md
    │       │   │   │   ├── resource_validator_tool.py
    │       │   │   │   └── wrapper.py
    │       │   │   ├── router_tool/
    │       │   │   │   └── wrapper.py
    │       │   │   ├── status_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   └── wrapper.py
    │       │   │   └── types.py
    │       │   ├── main.py
    │       │   └── tracing.py
    │       └── tests/
    │           ├── README.md
    │           └── server/
    │               ├── test_auth.py
    │               └── test_main.py
    ├── App/
    │   ├── azure-pipelines/
    │   │   ├── build-app.yaml
    │   │   └── deploy-app.yaml
    │   ├── backend/
    │   │   ├── .claude/
    │   │   │   ├── commands/
    │   │   │   │   ├── fix-github-issue.md
    │   │   │   │   ├── new-integration-test.md
    │   │   │   │   └── port-integration-test.md
    │   │   │   └── settings.json
    │   │   ├── .codex/
    │   │   │   ├── config.toml
    │   │   │   └── rules/
    │   │   │       └── default.rules
    │   │   ├── .config/
    │   │   │   └── dotnet-tools.json
    │   │   ├── .csharpierignore
    │   │   ├── .editorconfig
    │   │   ├── .git-blame-ignore-revs
    │   │   ├── .gitignore
    │   │   ├── .vscode/
    │   │   │   ├── extensions.json
    │   │   │   ├── launch.json
    │   │   │   ├── settings.json
    │   │   │   └── tasks.json
    │   │   ├── AGENTS.md
    │   │   ├── AppLibDotnet.sln
    │   │   ├── AppLibDotnet.sln.DotSettings
    │   │   ├── CLAUDE.md
    │   │   ├── CONTRIBUTING.md
    │   │   ├── Directory.Build.props
    │   │   ├── Directory.Packages.props
    │   │   ├── Makefile
    │   │   ├── README.md
    │   │   ├── benchmark/
    │   │   │   └── Altinn.App.Benchmarks/
    │   │   │       ├── Altinn.App.Benchmarks.csproj
    │   │   │       ├── Analyzers/
    │   │   │       │   ├── AppImplementationFactoryAnalyzerBenchmarks.cs
    │   │   │       │   └── HttpContextAccessorUseAnalyzerBenchmarks.cs
    │   │   │       ├── Expressions/
    │   │   │       │   └── DateVerificationRegexBenchmarks.cs
    │   │   │       ├── Fixture.cs
    │   │   │       └── Program.cs
    │   │   ├── doc/
    │   │   │   └── adr/
    │   │   │       └── 006-altinn-3-code-list.md
    │   │   ├── global.json
    │   │   ├── run-repeatedly.sh
    │   │   ├── solutions/
    │   │   │   ├── All.sln
    │   │   │   └── Src.sln
    │   │   ├── src/
    │   │   │   ├── .gitignore
    │   │   │   ├── Altinn.App.Analyzers/
    │   │   │   │   ├── Altinn.App.Analyzers.csproj
    │   │   │   │   ├── AnalyzerReleases.Shipped.md
    │   │   │   │   ├── AnalyzerReleases.Unshipped.md
    │   │   │   │   ├── Diagnostics.cs
    │   │   │   │   ├── FormDataWrapper/
    │   │   │   │   │   ├── FormDataWrapperAnalyzer.cs
    │   │   │   │   │   ├── FormDataWrapperGenerator.cs
    │   │   │   │   │   └── FormDataWrapperUtils.cs
    │   │   │   │   ├── HttpContextAccessorUsageAnalyzer.cs
    │   │   │   │   ├── ModelPathNode.cs
    │   │   │   │   ├── PolyFills.cs
    │   │   │   │   ├── SourceTextGenerator/
    │   │   │   │   │   ├── AddIndexToPathGenerator.cs
    │   │   │   │   │   ├── AltinnRowIdsGenerator.cs
    │   │   │   │   │   ├── CopyGenerator.cs
    │   │   │   │   │   ├── GenerateJsonComment.cs
    │   │   │   │   │   ├── GetterGenerator.cs
    │   │   │   │   │   ├── RemoveGenerator.cs
    │   │   │   │   │   ├── SetterGenerator.cs
    │   │   │   │   │   ├── SourceReaderUtils.cs
    │   │   │   │   │   └── SourceTextGenerator.cs
    │   │   │   │   └── Utils/
    │   │   │   │       ├── AnalyzerConfigOptionsProviderExtensions.cs
    │   │   │   │       ├── EquatableArray.cs
    │   │   │   │       ├── FileLocationHelper.cs
    │   │   │   │       ├── HashCode.cs
    │   │   │   │       ├── NanoJsonReader.cs
    │   │   │   │       └── RoslynExtensions.cs
    │   │   │   ├── Altinn.App.Api/
    │   │   │   │   ├── Altinn.App.Api.csproj
    │   │   │   │   ├── Controllers/
    │   │   │   │   │   ├── ActionsController.cs
    │   │   │   │   │   ├── ApplicationLanguageController.cs
    │   │   │   │   │   ├── ApplicationMetadataController.cs
    │   │   │   │   │   ├── ApplicationSettingsController.cs
    │   │   │   │   │   ├── Attributes/
    │   │   │   │   │   │   └── JsonSettingsNameAttribute.cs
    │   │   │   │   │   ├── AuthenticationController.cs
    │   │   │   │   │   ├── AuthorizationController.cs
    │   │   │   │   │   ├── Conventions/
    │   │   │   │   │   │   ├── AltinnApiJsonFormatter.cs
    │   │   │   │   │   │   ├── AltinnControllerConventions.cs
    │   │   │   │   │   │   └── ConfigureMvcJsonOptions.cs
    │   │   │   │   │   ├── CustomOpenApiController.cs
    │   │   │   │   │   ├── DataController.cs
    │   │   │   │   │   ├── DataListsController.cs
    │   │   │   │   │   ├── DataTagsController.cs
    │   │   │   │   │   ├── DisableFormValueModelBindingAttribute.cs
    │   │   │   │   │   ├── EventsReceiverController.cs
    │   │   │   │   │   ├── ExternalApiController.cs
    │   │   │   │   │   ├── FileScanController.cs
    │   │   │   │   │   ├── FormBootstrapController.cs
    │   │   │   │   │   ├── HomeController.cs
    │   │   │   │   │   ├── InstancesController.cs
    │   │   │   │   │   ├── LookupOrganisationController.cs
    │   │   │   │   │   ├── LookupPersonController.cs
    │   │   │   │   │   ├── NotificationCallbackController.cs
    │   │   │   │   │   ├── OptionsController.cs
    │   │   │   │   │   ├── PartiesController.cs
    │   │   │   │   │   ├── PaymentController.cs
    │   │   │   │   │   ├── PdfController.cs
    │   │   │   │   │   ├── ProcessController.cs
    │   │   │   │   │   ├── ProfileController.cs
    │   │   │   │   │   ├── RedirectController.cs
    │   │   │   │   │   ├── ResourceController.cs
    │   │   │   │   │   ├── SigningController.cs
    │   │   │   │   │   ├── StatelessDataController.cs
    │   │   │   │   │   ├── TextsController.cs
    │   │   │   │   │   ├── UserDefinedMetadataController.cs
    │   │   │   │   │   └── ValidateController.cs
    │   │   │   │   ├── Extensions/
    │   │   │   │   │   ├── HostBuilderExtensions.cs
    │   │   │   │   │   ├── HttpClientBuilderExtensions.cs
    │   │   │   │   │   ├── HttpContextExtensions.cs
    │   │   │   │   │   ├── InstanceDataUnitOfWorkExtensions.cs
    │   │   │   │   │   ├── InstanceExtensions.cs
    │   │   │   │   │   ├── MvcBuilderExtensions.cs
    │   │   │   │   │   ├── SecurityHeadersApplicationBuilderExtensions.cs
    │   │   │   │   │   ├── ServiceCollectionExtensions.cs
    │   │   │   │   │   ├── SwaggerFilterExtensions.cs
    │   │   │   │   │   ├── WebApplicationBuilderExtensions.cs
    │   │   │   │   │   └── WebHostBuilderExtensions.cs
    │   │   │   │   ├── Helpers/
    │   │   │   │   │   ├── Patch/
    │   │   │   │   │   │   ├── DataPatchResult.cs
    │   │   │   │   │   │   └── InternalPatchService.cs
    │   │   │   │   │   ├── RequestHandling/
    │   │   │   │   │   │   ├── DataRestrictionValidation.cs
    │   │   │   │   │   │   ├── MultipartRequestReader.cs
    │   │   │   │   │   │   ├── RequestPart.cs
    │   │   │   │   │   │   └── RequestPartValidator.cs
    │   │   │   │   │   └── StartupHelper.cs
    │   │   │   │   ├── Infrastructure/
    │   │   │   │   │   ├── Filters/
    │   │   │   │   │   │   ├── AutoValidateAntiforgeryTokenIfAuthCookieAttribute.cs
    │   │   │   │   │   │   └── ValidateAntiforgeryTokenIfAuthCookieAuthorizationFilter.cs
    │   │   │   │   │   ├── Health/
    │   │   │   │   │   │   └── HealthCheck.cs
    │   │   │   │   │   ├── Lifetime/
    │   │   │   │   │   │   └── AppHostLifetime.cs
    │   │   │   │   │   ├── Middleware/
    │   │   │   │   │   │   ├── ScopeAuthorizationMiddleware.cs
    │   │   │   │   │   │   ├── SecurityHeadersMiddleware.cs
    │   │   │   │   │   │   ├── TelemetryEnrichingMiddleware.cs
    │   │   │   │   │   │   └── TelemetryEnrichingResultFilter.cs
    │   │   │   │   │   └── Telemetry/
    │   │   │   │   │       ├── CustomTelemetryInitializer.cs
    │   │   │   │   │       ├── HealthTelemetryFilter.cs
    │   │   │   │   │       └── IdentityTelemetryFilter.cs
    │   │   │   │   ├── Mappers/
    │   │   │   │   │   └── SimpleInstanceMapper.cs
    │   │   │   │   ├── Models/
    │   │   │   │   │   ├── AppProcessState.cs
    │   │   │   │   │   ├── DataDeleteResponse.cs
    │   │   │   │   │   ├── DataElementFileScanResult.cs
    │   │   │   │   │   ├── DataPatchRequest.cs
    │   │   │   │   │   ├── DataPatchRequestMultiple.cs
    │   │   │   │   │   ├── DataPatchResponse.cs
    │   │   │   │   │   ├── DataPatchResponseMultiple.cs
    │   │   │   │   │   ├── DataPostResponse.cs
    │   │   │   │   │   ├── EnrichedInstanceResponse.cs
    │   │   │   │   │   ├── InstanceFileScanResult.cs
    │   │   │   │   │   ├── InstanceResponse.cs
    │   │   │   │   │   ├── InstansiationInstance.cs
    │   │   │   │   │   ├── LookupOrganisationResponse.cs
    │   │   │   │   │   ├── LookupPersonRequest.cs
    │   │   │   │   │   ├── LookupPersonResponse.cs
    │   │   │   │   │   ├── ProcessNext.cs
    │   │   │   │   │   ├── SetTagsRequest.cs
    │   │   │   │   │   ├── SetTagsResponse.cs
    │   │   │   │   │   ├── SigningAuthorizedOrganisationsResponse.cs
    │   │   │   │   │   ├── SigningDataElementsResponse.cs
    │   │   │   │   │   ├── SigningStateResponse.cs
    │   │   │   │   │   ├── SimpleInstance.cs
    │   │   │   │   │   ├── TagsList.cs
    │   │   │   │   │   ├── UserActionRequest.cs
    │   │   │   │   │   ├── UserActionResponse.cs
    │   │   │   │   │   └── UserDefinedMetadataDto.cs
    │   │   │   │   ├── Properties/
    │   │   │   │   │   └── launchSettings.json
    │   │   │   │   └── packaging/
    │   │   │   │       └── Altinn.App.Api.props
    │   │   │   ├── Altinn.App.Clients.Fiks/
    │   │   │   │   ├── Altinn.App.Clients.Fiks.csproj
    │   │   │   │   ├── Configuration/
    │   │   │   │   │   ├── FiksSetupBuilder.cs
    │   │   │   │   │   └── IFiksSetupBuilder.cs
    │   │   │   │   ├── Constants/
    │   │   │   │   │   ├── FiksArkivConstants.cs
    │   │   │   │   │   └── FiksIOConstants.cs
    │   │   │   │   ├── Exceptions/
    │   │   │   │   │   ├── FiksArkivConfigurationException.cs
    │   │   │   │   │   ├── FiksArkivException.cs
    │   │   │   │   │   ├── FiksIOConfigurationException.cs
    │   │   │   │   │   └── FiksIOException.cs
    │   │   │   │   ├── Extensions/
    │   │   │   │   │   ├── ArkivmeldingExtensions.cs
    │   │   │   │   │   ├── ArkivmeldingKvitteringExtensions.cs
    │   │   │   │   │   ├── DataElementExtensions.cs
    │   │   │   │   │   ├── InstanceExtensions.cs
    │   │   │   │   │   ├── KorrespondansepartExtensions.cs
    │   │   │   │   │   ├── ListExtensions.cs
    │   │   │   │   │   ├── ServiceCollectionExtensions.cs
    │   │   │   │   │   ├── ServiceProviderExtensions.cs
    │   │   │   │   │   ├── StreamExtensions.cs
    │   │   │   │   │   ├── StringExtensions.cs
    │   │   │   │   │   ├── TypeExtensions.cs
    │   │   │   │   │   └── XmlExtensions.cs
    │   │   │   │   ├── Factories/
    │   │   │   │   │   ├── KlassifikasjonFactory.cs
    │   │   │   │   │   └── KorrespondansepartFactory.cs
    │   │   │   │   ├── FiksArkiv/
    │   │   │   │   │   ├── FiksArkivConfigResolver.cs
    │   │   │   │   │   ├── FiksArkivConfigValidationService.cs
    │   │   │   │   │   ├── FiksArkivDefaultPayloadGenerator.cs
    │   │   │   │   │   ├── FiksArkivDefaultResponseHandler.cs
    │   │   │   │   │   ├── FiksArkivHost.cs
    │   │   │   │   │   ├── FiksArkivInstanceClient.cs
    │   │   │   │   │   ├── FiksArkivServiceTask.cs
    │   │   │   │   │   ├── IFiksArkivConfigResolver.cs
    │   │   │   │   │   ├── IFiksArkivHost.cs
    │   │   │   │   │   ├── IFiksArkivInstanceClient.cs
    │   │   │   │   │   ├── IFiksArkivPayloadGenerator.cs
    │   │   │   │   │   ├── IFiksArkivResponseHandler.cs
    │   │   │   │   │   └── Models/
    │   │   │   │   │       ├── FiksArkivDocumentMetadata.cs
    │   │   │   │   │       ├── FiksArkivDocuments.cs
    │   │   │   │   │       ├── FiksArkivReceivedMessagePayload.cs
    │   │   │   │   │       ├── FiksArkivRecipient.cs
    │   │   │   │   │       ├── FiksArkivSettings.cs
    │   │   │   │   │       └── MessagePayloadWrapper.cs
    │   │   │   │   └── FiksIO/
    │   │   │   │       ├── FiksIOClient.cs
    │   │   │   │       ├── FiksIOClientFactory.cs
    │   │   │   │       ├── FiksIOMaskinportenClient.cs
    │   │   │   │       ├── IFiksIOClient.cs
    │   │   │   │       ├── IFiksIOClientFactory.cs
    │   │   │   │       └── Models/
    │   │   │   │           ├── FiksIOMessagePayload.cs
    │   │   │   │           ├── FiksIOMessageRequest.cs
    │   │   │   │           ├── FiksIOMessageResponse.cs
    │   │   │   │           ├── FiksIOReceivedMessage.cs
    │   │   │   │           └── FiksIOSettings.cs
    │   │   │   ├── Altinn.App.Core/
    │   │   │   │   ├── Altinn.App.Core.csproj
    │   │   │   │   ├── AppImplementationFactory.cs
    │   │   │   │   ├── Configuration/
    │   │   │   │   │   ├── AppSettings.cs
    │   │   │   │   │   ├── CacheSettings.cs
    │   │   │   │   │   ├── FrontEndSettings.cs
    │   │   │   │   │   ├── GeneralSettings.cs
    │   │   │   │   │   ├── MetricsSettings.cs
    │   │   │   │   │   ├── PlatformFrontendSettings.cs
    │   │   │   │   │   └── PlatformSettings.cs
    │   │   │   │   ├── Constants/
    │   │   │   │   │   ├── AltinnEnvironments.cs
    │   │   │   │   │   ├── AltinnTaskTypes.cs
    │   │   │   │   │   ├── AltinnUrns.cs
    │   │   │   │   │   ├── AuthorizationSchemes.cs
    │   │   │   │   │   ├── AuthzConstants.cs
    │   │   │   │   │   └── General.cs
    │   │   │   │   ├── EFormidling/
    │   │   │   │   │   ├── EformidlingConstants.cs
    │   │   │   │   │   ├── EformidlingStartup.cs
    │   │   │   │   │   ├── Extensions/
    │   │   │   │   │   │   └── ServiceCollectionExtensions.cs
    │   │   │   │   │   ├── Implementation/
    │   │   │   │   │   │   ├── DefaultEFormidlingReceivers.cs
    │   │   │   │   │   │   ├── DefaultEFormidlingService.cs
    │   │   │   │   │   │   ├── EFormidlingLegacyConfigurationProvider.cs
    │   │   │   │   │   │   ├── EformidlingDeliveryException.cs
    │   │   │   │   │   │   └── EformidlingStatusCheckEventHandler2.cs
    │   │   │   │   │   └── Interface/
    │   │   │   │   │       ├── IEFormidlingMetadata.cs
    │   │   │   │   │       ├── IEFormidlingReceivers.cs
    │   │   │   │   │       └── IEFormidlingService.cs
    │   │   │   │   ├── Exceptions/
    │   │   │   │   │   ├── AltinnException.cs
    │   │   │   │   │   └── ConfigurationException.cs
    │   │   │   │   ├── Extensions/
    │   │   │   │   │   ├── CancellationTokenExtensions.cs
    │   │   │   │   │   ├── ClaimsPrincipalExtensions.cs
    │   │   │   │   │   ├── ConfigurationBuilderExtensions.cs
    │   │   │   │   │   ├── DataProtectionConfiguration.cs
    │   │   │   │   │   ├── DictionaryExtensions.cs
    │   │   │   │   │   ├── HttpClientExtension.cs
    │   │   │   │   │   ├── HttpContextExtensions.cs
    │   │   │   │   │   ├── InstanceEventExtensions.cs
    │   │   │   │   │   ├── MultipartContentExtensions.cs
    │   │   │   │   │   ├── NationalIdentityNumberExtensions.cs
    │   │   │   │   │   ├── OrganisationNumberExtensions.cs
    │   │   │   │   │   ├── ProcessStateExtensions.cs
    │   │   │   │   │   ├── ServiceCollectionExtensions.cs
    │   │   │   │   │   ├── StringExtensions.cs
    │   │   │   │   │   └── XmlToLinqExtensions.cs
    │   │   │   │   ├── Features/
    │   │   │   │   │   ├── AccessManagement/
    │   │   │   │   │   │   └── IAccessManagementClient.cs
    │   │   │   │   │   ├── Action/
    │   │   │   │   │   │   ├── PaymentUserAction.cs
    │   │   │   │   │   │   ├── SigningUserAction.cs
    │   │   │   │   │   │   ├── UniqueSignatureAuthorizer.cs
    │   │   │   │   │   │   ├── UserActionAuthorizerContext.cs
    │   │   │   │   │   │   └── UserActionService.cs
    │   │   │   │   │   ├── Auth/
    │   │   │   │   │   │   ├── Authenticated.cs
    │   │   │   │   │   │   ├── AuthenticationContext.cs
    │   │   │   │   │   │   ├── AuthenticationContextDI.cs
    │   │   │   │   │   │   ├── AuthenticationContextException.cs
    │   │   │   │   │   │   ├── IAuthenticationContext.cs
    │   │   │   │   │   │   ├── Scopes.cs
    │   │   │   │   │   │   └── TokenIssuer.cs
    │   │   │   │   │   ├── AuthenticationMethod.cs
    │   │   │   │   │   ├── Bootstrap/
    │   │   │   │   │   │   ├── BootstrapGlobalService.cs
    │   │   │   │   │   │   ├── FormBootstrapService.cs
    │   │   │   │   │   │   ├── LayoutAnalysisService.cs
    │   │   │   │   │   │   └── Models/
    │   │   │   │   │   │       ├── BootstrapGlobalResponse.cs
    │   │   │   │   │   │       └── FormBootstrapResponse.cs
    │   │   │   │   │   ├── Cache/
    │   │   │   │   │   │   ├── AppConfigurationCache.cs
    │   │   │   │   │   │   ├── AppConfigurationCacheDI.cs
    │   │   │   │   │   │   └── IAppConfigurationCache.cs
    │   │   │   │   │   ├── Correspondence/
    │   │   │   │   │   │   ├── Builder/
    │   │   │   │   │   │   │   ├── BuilderUtils.cs
    │   │   │   │   │   │   │   ├── CorrespondenceAttachmentBuilder.cs
    │   │   │   │   │   │   │   ├── CorrespondenceContentBuilder.cs
    │   │   │   │   │   │   │   ├── CorrespondenceNotificationBuilder.cs
    │   │   │   │   │   │   │   ├── CorrespondenceNotificationOverrideBuilder.cs
    │   │   │   │   │   │   │   ├── CorrespondenceRequestBuilder.cs
    │   │   │   │   │   │   │   ├── ICorrespondenceAttachmentBuilder.cs
    │   │   │   │   │   │   │   ├── ICorrespondenceContentBuilder.cs
    │   │   │   │   │   │   │   ├── ICorrespondenceNotificationBuilder.cs
    │   │   │   │   │   │   │   ├── ICorrespondenceNotificationOverrideBuilder.cs
    │   │   │   │   │   │   │   └── ICorrespondenceRequestBuilder.cs
    │   │   │   │   │   │   ├── CorrespondenceAuthorisationFactory.cs
    │   │   │   │   │   │   ├── CorrespondenceClient.cs
    │   │   │   │   │   │   ├── Exceptions/
    │   │   │   │   │   │   │   ├── CorrespondenceArgumentException.cs
    │   │   │   │   │   │   │   ├── CorrespondenceException.cs
    │   │   │   │   │   │   │   └── CorrespondenceRequestException.cs
    │   │   │   │   │   │   ├── Extensions/
    │   │   │   │   │   │   │   └── ServiceCollectionExtensions.cs
    │   │   │   │   │   │   ├── ICorrespondenceClient.cs
    │   │   │   │   │   │   └── Models/
    │   │   │   │   │   │       ├── AttachmentPayload.cs
    │   │   │   │   │   │       ├── CorrespondenceApiScopes.cs
    │   │   │   │   │   │       ├── CorrespondenceAttachment.cs
    │   │   │   │   │   │       ├── CorrespondenceAuthorisation.cs
    │   │   │   │   │   │       ├── CorrespondenceContent.cs
    │   │   │   │   │   │       ├── CorrespondenceDataLocationType.cs
    │   │   │   │   │   │       ├── CorrespondenceExternalReference.cs
    │   │   │   │   │   │       ├── CorrespondenceNotification.cs
    │   │   │   │   │   │       ├── CorrespondenceNotificationChannel.cs
    │   │   │   │   │   │       ├── CorrespondenceNotificationRecipient.cs
    │   │   │   │   │   │       ├── CorrespondenceNotificationRecipientWrapper.cs
    │   │   │   │   │   │       ├── CorrespondenceNotificationTemplate.cs
    │   │   │   │   │   │       ├── CorrespondencePayload.cs
    │   │   │   │   │   │       ├── CorrespondenceReferenceType.cs
    │   │   │   │   │   │       ├── CorrespondenceReplyOption.cs
    │   │   │   │   │   │       ├── CorrespondenceRequest.cs
    │   │   │   │   │   │       ├── CorrespondenceStatus.cs
    │   │   │   │   │   │       ├── Request/
    │   │   │   │   │   │       │   ├── InitializeAttachmentRequest.cs
    │   │   │   │   │   │       │   └── InitializeCorrespondencesRequest.cs
    │   │   │   │   │   │       └── Response/
    │   │   │   │   │   │           ├── AttachmentOverviewResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceAttachmentResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceAttachmentStatusResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceContentResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceDataLocationTypeResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceDetailsResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationDetailsResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationOrderResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationRecipientResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationStatusDetailsResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationStatusResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationStatusSummaryResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationSummaryResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceStatusEventResponse.cs
    │   │   │   │   │   │           ├── GetCorrespondenceStatusResponse.cs
    │   │   │   │   │   │           └── SendCorrespondenceResponse.cs
    │   │   │   │   │   ├── DataLists/
    │   │   │   │   │   │   ├── DataListsFactory.cs
    │   │   │   │   │   │   ├── DataListsService.cs
    │   │   │   │   │   │   ├── IDataListsService.cs
    │   │   │   │   │   │   ├── InstanceDataListsFactory.cs
    │   │   │   │   │   │   ├── NullDataListProvider.cs
    │   │   │   │   │   │   └── NullInstanceDataListProvider.cs
    │   │   │   │   │   ├── DataProcessing/
    │   │   │   │   │   │   ├── GenericDataProcessor.cs
    │   │   │   │   │   │   └── NullInstantiationProcessor.cs
    │   │   │   │   │   ├── ExternalApi/
    │   │   │   │   │   │   ├── ExternalApiFactory.cs
    │   │   │   │   │   │   ├── ExternalApiService.cs
    │   │   │   │   │   │   └── IExternalApiClient.cs
    │   │   │   │   │   ├── FeatureFlags.cs
    │   │   │   │   │   ├── FileAnalyzis/
    │   │   │   │   │   │   ├── FileAnalyserFactory.cs
    │   │   │   │   │   │   ├── FileAnalysisResult.cs
    │   │   │   │   │   │   ├── FileAnalysisService.cs
    │   │   │   │   │   │   ├── IFileAnalyser.cs
    │   │   │   │   │   │   ├── IFileAnalyserFactory.cs
    │   │   │   │   │   │   └── IFileAnalysisService.cs
    │   │   │   │   │   ├── FormDataReader.cs
    │   │   │   │   │   ├── IAppOptionsProvider.cs
    │   │   │   │   │   ├── IDataElementValidator.cs
    │   │   │   │   │   ├── IDataListProvider.cs
    │   │   │   │   │   ├── IDataProcessor.cs
    │   │   │   │   │   ├── IDataWriteProcessor.cs
    │   │   │   │   │   ├── IEmailNotificationClient.cs
    │   │   │   │   │   ├── IEventHandler.cs
    │   │   │   │   │   ├── IFormDataValidator.cs
    │   │   │   │   │   ├── IInstanceAppOptionsProvider.cs
    │   │   │   │   │   ├── IInstanceDataAccessor.cs
    │   │   │   │   │   ├── IInstanceDataListProvider.cs
    │   │   │   │   │   ├── IInstanceDataMutator.cs
    │   │   │   │   │   ├── IInstanceValidator.cs
    │   │   │   │   │   ├── IInstantiationProcessor.cs
    │   │   │   │   │   ├── IInstantiationValidator.cs
    │   │   │   │   │   ├── INotificationCancelClient.cs
    │   │   │   │   │   ├── INotificationOrderClient.cs
    │   │   │   │   │   ├── IPdfFormatter.cs
    │   │   │   │   │   ├── IProcessEnd.cs
    │   │   │   │   │   ├── IProcessExclusiveGateway.cs
    │   │   │   │   │   ├── IProcessTaskAbandon.cs
    │   │   │   │   │   ├── IProcessTaskEnd.cs
    │   │   │   │   │   ├── IProcessTaskStart.cs
    │   │   │   │   │   ├── ISmsNotificationClient.cs
    │   │   │   │   │   ├── ITaskValidator.cs
    │   │   │   │   │   ├── IUserAction.cs
    │   │   │   │   │   ├── IUserActionAuthorizer.cs
    │   │   │   │   │   ├── IValidateQueryParamPrefill.cs
    │   │   │   │   │   ├── IValidator.cs
    │   │   │   │   │   ├── Maskinporten/
    │   │   │   │   │   │   ├── Constants/
    │   │   │   │   │   │   │   ├── JwtClaimTypes.cs
    │   │   │   │   │   │   │   └── TokenAuthority.cs
    │   │   │   │   │   │   ├── Converters/
    │   │   │   │   │   │   │   └── JsonWebKeyConverter.cs
    │   │   │   │   │   │   ├── Delegates/
    │   │   │   │   │   │   │   └── MaskinportenDelegatingHandler.cs
    │   │   │   │   │   │   ├── Exceptions/
    │   │   │   │   │   │   │   ├── MaskinportenAuthenticationException.cs
    │   │   │   │   │   │   │   ├── MaskinportenConfigurationException.cs
    │   │   │   │   │   │   │   ├── MaskinportenException.cs
    │   │   │   │   │   │   │   ├── MaskinportenTokenExpiredException.cs
    │   │   │   │   │   │   │   └── MaskinportenUnsupportedTokenException.cs
    │   │   │   │   │   │   ├── Extensions/
    │   │   │   │   │   │   │   ├── HttpClientBuilderExtensions.cs
    │   │   │   │   │   │   │   ├── ServiceCollectionExtensions.cs
    │   │   │   │   │   │   │   └── WebHostBuilderExtensions.cs
    │   │   │   │   │   │   ├── IMaskinportenClient.cs
    │   │   │   │   │   │   ├── MaskinportenClient.cs
    │   │   │   │   │   │   └── Models/
    │   │   │   │   │   │       ├── MaskinportenSettings.cs
    │   │   │   │   │   │       ├── MaskinportenTokenResponse.cs
    │   │   │   │   │   │       ├── OAuthAuthorizationServerMetadata.cs
    │   │   │   │   │   │       └── TokenCacheEntry.cs
    │   │   │   │   │   ├── Notifications/
    │   │   │   │   │   │   ├── Cancellation/
    │   │   │   │   │   │   │   ├── CancelOnProcessEnd.cs
    │   │   │   │   │   │   │   └── ICancelInstantiationNotification.cs
    │   │   │   │   │   │   ├── Email/
    │   │   │   │   │   │   │   └── EmailNotificationClient.cs
    │   │   │   │   │   │   ├── Exceptions/
    │   │   │   │   │   │   │   └── NotificationConditionSecretNotFoundException.cs
    │   │   │   │   │   │   ├── Future/
    │   │   │   │   │   │   │   └── NotificationOrderClient.cs
    │   │   │   │   │   │   ├── INotificationService.cs
    │   │   │   │   │   │   ├── NotificationService.cs
    │   │   │   │   │   │   ├── Order/
    │   │   │   │   │   │   │   └── NotificationCancelClient.cs
    │   │   │   │   │   │   ├── SecretProvider/
    │   │   │   │   │   │   │   ├── NotificationConditionCodeValidator.cs
    │   │   │   │   │   │   │   ├── NotificationConditionSecretProvider.cs
    │   │   │   │   │   │   │   └── NotificationConditionTokenGenerator.cs
    │   │   │   │   │   │   ├── Sms/
    │   │   │   │   │   │   │   └── SmsNotificationClient.cs
    │   │   │   │   │   │   └── Texts/
    │   │   │   │   │   │       ├── NotificationTexts.cs
    │   │   │   │   │   │       └── ReplacementTokens.cs
    │   │   │   │   │   ├── Options/
    │   │   │   │   │   │   ├── Altinn2Provider/
    │   │   │   │   │   │   │   ├── Altinn2CodeListProvider.cs
    │   │   │   │   │   │   │   ├── Altinn2MetadataApiClient.cs
    │   │   │   │   │   │   │   └── MetadataCodelistResponse.cs
    │   │   │   │   │   │   ├── Altinn3LibraryCodeList/
    │   │   │   │   │   │   │   ├── Altinn3LibraryCodeListApiClient.cs
    │   │   │   │   │   │   │   ├── Altinn3LibraryCodeListResponse.cs
    │   │   │   │   │   │   │   ├── Altinn3LibraryCodeListService.cs
    │   │   │   │   │   │   │   ├── Altinn3LibraryOptionsProvider.cs
    │   │   │   │   │   │   │   ├── IAltinn3LibraryCodeListApiClient.cs
    │   │   │   │   │   │   │   └── IAltinn3LibraryCodeListService.cs
    │   │   │   │   │   │   ├── AppOptionsFactory.cs
    │   │   │   │   │   │   ├── AppOptionsFileHandler.cs
    │   │   │   │   │   │   ├── AppOptionsService.cs
    │   │   │   │   │   │   ├── AppOptionsServiceExtentions.cs
    │   │   │   │   │   │   ├── CommonOptionProviderServiceCollectionExtensions.cs
    │   │   │   │   │   │   ├── DefaultAppOptionsProvider.cs
    │   │   │   │   │   │   ├── IAppOptionsFileHandler.cs
    │   │   │   │   │   │   ├── IAppOptionsService.cs
    │   │   │   │   │   │   ├── InstanceAppOptionsFactory.cs
    │   │   │   │   │   │   └── JoinedAppOptionsProvider.cs
    │   │   │   │   │   ├── Payment/
    │   │   │   │   │   │   ├── Exceptions/
    │   │   │   │   │   │   │   └── PaymentException.cs
    │   │   │   │   │   │   ├── IOrderDetailsCalculator.cs
    │   │   │   │   │   │   ├── Models/
    │   │   │   │   │   │   │   ├── Address.cs
    │   │   │   │   │   │   │   ├── CardDetails.cs
    │   │   │   │   │   │   │   ├── InvoiceDetails.cs
    │   │   │   │   │   │   │   ├── OrderDetails.cs
    │   │   │   │   │   │   │   ├── Payer.cs
    │   │   │   │   │   │   │   ├── PayerCompany.cs
    │   │   │   │   │   │   │   ├── PayerPrivatePerson.cs
    │   │   │   │   │   │   │   ├── PayerType.cs
    │   │   │   │   │   │   │   ├── PaymentDetails.cs
    │   │   │   │   │   │   │   ├── PaymentInformation.cs
    │   │   │   │   │   │   │   ├── PaymentOrderLine.cs
    │   │   │   │   │   │   │   ├── PaymentReceiver.cs
    │   │   │   │   │   │   │   ├── PaymentStatus.cs
    │   │   │   │   │   │   │   └── PhoneNumber.cs
    │   │   │   │   │   │   ├── Processors/
    │   │   │   │   │   │   │   ├── FakePaymentProcessor/
    │   │   │   │   │   │   │   │   └── FakePaymentProcessor.cs
    │   │   │   │   │   │   │   ├── IPaymentProcessor.cs
    │   │   │   │   │   │   │   └── Nets/
    │   │   │   │   │   │   │       ├── INetsClient.cs
    │   │   │   │   │   │   │       ├── Models/
    │   │   │   │   │   │   │       │   ├── HttpApiResult.cs
    │   │   │   │   │   │   │       │   ├── NetsCheckout.cs
    │   │   │   │   │   │   │       │   ├── NetsCheckoutConsumerDetails.cs
    │   │   │   │   │   │   │       │   ├── NetsCompleteWebhookPayload.cs
    │   │   │   │   │   │   │       │   ├── NetsCreatePayment.cs
    │   │   │   │   │   │   │       │   ├── NetsCreatePaymentSuccess.cs
    │   │   │   │   │   │   │       │   ├── NetsNotifications.cs
    │   │   │   │   │   │   │       │   ├── NetsOrder.cs
    │   │   │   │   │   │   │       │   ├── NetsOrderItem.cs
    │   │   │   │   │   │   │       │   ├── NetsPaymentFull.cs
    │   │   │   │   │   │   │       │   ├── NetsPaymentMethod.cs
    │   │   │   │   │   │   │       │   └── NetsPaymentMethodConfiguration.cs
    │   │   │   │   │   │   │       ├── NetsClient.cs
    │   │   │   │   │   │   │       ├── NetsMapper.cs
    │   │   │   │   │   │   │       ├── NetsPaymentProcessor.cs
    │   │   │   │   │   │   │       ├── NetsPaymentSettings.cs
    │   │   │   │   │   │   │       ├── NetsWebhookSecretProvider.cs
    │   │   │   │   │   │   │       └── README.md
    │   │   │   │   │   │   └── Services/
    │   │   │   │   │   │       ├── IPaymentService.cs
    │   │   │   │   │   │       └── PaymentService.cs
    │   │   │   │   │   ├── Pdf/
    │   │   │   │   │   │   └── NullPdfFormatter.cs
    │   │   │   │   │   ├── Redirect/
    │   │   │   │   │   │   ├── IReturnUrlService.cs
    │   │   │   │   │   │   ├── ReturnUrlService.cs
    │   │   │   │   │   │   └── ReturnUrlValidationResult.cs
    │   │   │   │   │   ├── Signing/
    │   │   │   │   │   │   ├── Exceptions/
    │   │   │   │   │   │   │   ├── SigneeProviderNotFoundException.cs
    │   │   │   │   │   │   │   └── SigningException.cs
    │   │   │   │   │   │   ├── Extensions/
    │   │   │   │   │   │   │   └── SigningInstanceDataAccessorExtensions.cs
    │   │   │   │   │   │   ├── Helpers/
    │   │   │   │   │   │   │   ├── SigningNotificationHelper.cs
    │   │   │   │   │   │   │   └── SigningTextHelper.cs
    │   │   │   │   │   │   ├── ISigneeProvider.cs
    │   │   │   │   │   │   ├── Models/
    │   │   │   │   │   │   │   ├── ContentWrapper.cs
    │   │   │   │   │   │   │   ├── DefaultTexts.cs
    │   │   │   │   │   │   │   ├── SigneeContext.cs
    │   │   │   │   │   │   │   └── SigneeContextState.cs
    │   │   │   │   │   │   ├── NotificationChoice.cs
    │   │   │   │   │   │   ├── ProvidedSignee.cs
    │   │   │   │   │   │   ├── Services/
    │   │   │   │   │   │   │   ├── ISignDocumentManager.cs
    │   │   │   │   │   │   │   ├── ISigneeContextsManager.cs
    │   │   │   │   │   │   │   ├── ISigningCallToActionService.cs
    │   │   │   │   │   │   │   ├── ISigningDelegationService.cs
    │   │   │   │   │   │   │   ├── ISigningReceiptService.cs
    │   │   │   │   │   │   │   ├── ISigningService.cs
    │   │   │   │   │   │   │   ├── SignDocumentManager.cs
    │   │   │   │   │   │   │   ├── SigneeContextsManager.cs
    │   │   │   │   │   │   │   ├── SigningCallToActionService.cs
    │   │   │   │   │   │   │   ├── SigningDelegationService.cs
    │   │   │   │   │   │   │   ├── SigningReceiptService.cs
    │   │   │   │   │   │   │   └── SigningService.cs
    │   │   │   │   │   │   └── SigneeCommunication.cs
    │   │   │   │   │   ├── Telemetry/
    │   │   │   │   │   │   ├── Signing/
    │   │   │   │   │   │   │   ├── Telemetry.SignDocumentManager.cs
    │   │   │   │   │   │   │   ├── Telemetry.SigneeContextsManager.cs
    │   │   │   │   │   │   │   ├── Telemetry.SigningCallToActionService.cs
    │   │   │   │   │   │   │   ├── Telemetry.SigningDelegationService.cs
    │   │   │   │   │   │   │   ├── Telemetry.SigningReceiptService.cs
    │   │   │   │   │   │   │   └── Telemetry.SigningService.cs
    │   │   │   │   │   │   ├── Telemetry.AccessManagement.cs
    │   │   │   │   │   │   ├── Telemetry.AppOptionsService.cs
    │   │   │   │   │   │   ├── Telemetry.ApplicationLanguage.cs
    │   │   │   │   │   │   ├── Telemetry.ApplicationMetadata.Client.cs
    │   │   │   │   │   │   ├── Telemetry.ApplicationMetadata.Service.cs
    │   │   │   │   │   │   ├── Telemetry.Authentication.cs
    │   │   │   │   │   │   ├── Telemetry.Authorization.Client.cs
    │   │   │   │   │   │   ├── Telemetry.Authorization.Service.cs
    │   │   │   │   │   │   ├── Telemetry.Correspondence.cs
    │   │   │   │   │   │   ├── Telemetry.Data.cs
    │   │   │   │   │   │   ├── Telemetry.DataClient.cs
    │   │   │   │   │   │   ├── Telemetry.DataList.cs
    │   │   │   │   │   │   ├── Telemetry.ErClient.cs
    │   │   │   │   │   │   ├── Telemetry.EventsClient.cs
    │   │   │   │   │   │   ├── Telemetry.Fiks.cs
    │   │   │   │   │   │   ├── Telemetry.FileAnalysis.cs
    │   │   │   │   │   │   ├── Telemetry.FileValidation.cs
    │   │   │   │   │   │   ├── Telemetry.InstanceDataAccessor.cs
    │   │   │   │   │   │   ├── Telemetry.InstanceLockClient.cs
    │   │   │   │   │   │   ├── Telemetry.Instances.cs
    │   │   │   │   │   │   ├── Telemetry.Maskinporten.cs
    │   │   │   │   │   │   ├── Telemetry.ModelSerialization.cs
    │   │   │   │   │   │   ├── Telemetry.Notifications.cs
    │   │   │   │   │   │   ├── Telemetry.PartyClient.cs
    │   │   │   │   │   │   ├── Telemetry.Payment.cs
    │   │   │   │   │   │   ├── Telemetry.PdfGeneratorClient.cs
    │   │   │   │   │   │   ├── Telemetry.PdfService.cs
    │   │   │   │   │   │   ├── Telemetry.Prefill.Service.cs
    │   │   │   │   │   │   ├── Telemetry.ProcessClient.cs
    │   │   │   │   │   │   ├── Telemetry.ProcessReader.cs
    │   │   │   │   │   │   ├── Telemetry.Processes.cs
    │   │   │   │   │   │   ├── Telemetry.ProfileClient.cs
    │   │   │   │   │   │   ├── Telemetry.RegisterClient.cs
    │   │   │   │   │   │   ├── Telemetry.ScopeAuthorization.cs
    │   │   │   │   │   │   ├── Telemetry.UserHelper.cs
    │   │   │   │   │   │   ├── Telemetry.Validation.cs
    │   │   │   │   │   │   ├── Telemetry.cs
    │   │   │   │   │   │   └── TelemetryActivityExtensions.cs
    │   │   │   │   │   └── Validation/
    │   │   │   │   │       ├── Default/
    │   │   │   │   │       │   ├── DataAnnotationValidator.cs
    │   │   │   │   │       │   ├── DefaultDataElementValidator.cs
    │   │   │   │   │       │   ├── DefaultTaskValidator.cs
    │   │   │   │   │       │   ├── ExpressionValidator.cs
    │   │   │   │   │       │   ├── LegacyIInstanceValidatorFormDataValidator.cs
    │   │   │   │   │       │   ├── LegacyIInstanceValidatorTaskValidator.cs
    │   │   │   │   │       │   ├── RequiredLayoutValidator.cs
    │   │   │   │   │       │   ├── SignatureHashValidator.cs
    │   │   │   │   │       │   └── SigningTaskValidator.cs
    │   │   │   │   │       ├── GenericFormDataValidator.cs
    │   │   │   │   │       ├── Helpers/
    │   │   │   │   │       │   └── ModelStateHelpers.cs
    │   │   │   │   │       ├── IFileValidator.cs
    │   │   │   │   │       ├── NullInstantiationValidator.cs
    │   │   │   │   │       └── Wrappers/
    │   │   │   │   │           ├── DataElementValidatorWrapper.cs
    │   │   │   │   │           ├── FormDataValidatorWrapper.cs
    │   │   │   │   │           └── TaskValidatorWrapper.cs
    │   │   │   │   ├── Helpers/
    │   │   │   │   │   ├── AllowedContributorsHelper.cs
    │   │   │   │   │   ├── AppTextHelper.cs
    │   │   │   │   │   ├── AuthenticationHelper.cs
    │   │   │   │   │   ├── CamelCaseExceptDictionaryResolver.cs
    │   │   │   │   │   ├── DataHelper.cs
    │   │   │   │   │   ├── DataModel/
    │   │   │   │   │   │   ├── DataModel.cs
    │   │   │   │   │   │   ├── DataModelException.cs
    │   │   │   │   │   │   ├── DataModelWrapper.cs
    │   │   │   │   │   │   └── RowRemovalOption.cs
    │   │   │   │   │   ├── Extensions/
    │   │   │   │   │   │   ├── StringExtensions.cs
    │   │   │   │   │   │   └── Utf8JsonReaderExtentions.cs
    │   │   │   │   │   ├── InstantiationHelper.cs
    │   │   │   │   │   ├── JsonHelper.cs
    │   │   │   │   │   ├── JsonSerializerIgnorePrefix.cs
    │   │   │   │   │   ├── JsonSerializerPermissive.cs
    │   │   │   │   │   ├── LinqExpressionHelpers.cs
    │   │   │   │   │   ├── LogSanitizer.cs
    │   │   │   │   │   ├── MemoryAsStream.cs
    │   │   │   │   │   ├── MimeTypeMap.cs
    │   │   │   │   │   ├── MultiDecisionHelper.cs
    │   │   │   │   │   ├── NaturalStringComparerPolyfill.cs
    │   │   │   │   │   ├── ObjectUtils.cs
    │   │   │   │   │   ├── PathHelper.cs
    │   │   │   │   │   ├── PlatformHttpException.cs
    │   │   │   │   │   ├── PlatformHttpResponseSnapshotException.cs
    │   │   │   │   │   ├── ProcessError.cs
    │   │   │   │   │   ├── ProcessHelper.cs
    │   │   │   │   │   ├── RemoveBomExtentions.cs
    │   │   │   │   │   ├── ResponseWrapperStream.cs
    │   │   │   │   │   ├── SelfLinkHelper.cs
    │   │   │   │   │   ├── Serialization/
    │   │   │   │   │   │   ├── ModelDeserializer.cs
    │   │   │   │   │   │   └── ModelSerializationService.cs
    │   │   │   │   │   ├── ServiceException.cs
    │   │   │   │   │   ├── ShadowFieldsConverter.cs
    │   │   │   │   │   ├── UrlHelper.cs
    │   │   │   │   │   └── UserHelper.cs
    │   │   │   │   ├── Implementation/
    │   │   │   │   │   ├── AppResourcesSI.cs
    │   │   │   │   │   ├── DefaultAppEvents.cs
    │   │   │   │   │   ├── PrefillSI.cs
    │   │   │   │   │   └── UserTokenProvider.cs
    │   │   │   │   ├── Infrastructure/
    │   │   │   │   │   └── Clients/
    │   │   │   │   │       ├── AccessManagement/
    │   │   │   │   │       │   └── AccessManagementClient.cs
    │   │   │   │   │       ├── Authentication/
    │   │   │   │   │       │   └── AuthenticationClient.cs
    │   │   │   │   │       ├── Authorization/
    │   │   │   │   │       │   └── AuthorizationClient.cs
    │   │   │   │   │       ├── Events/
    │   │   │   │   │       │   ├── EventsClient.cs
    │   │   │   │   │       │   ├── EventsSubscriptionClient.cs
    │   │   │   │   │       │   ├── Subscription.cs
    │   │   │   │   │       │   └── SubscriptionRequest.cs
    │   │   │   │   │       ├── KeyVault/
    │   │   │   │   │       │   ├── SecretsClient.cs
    │   │   │   │   │       │   └── SecretsLocalClient.cs
    │   │   │   │   │       ├── Pdf/
    │   │   │   │   │       │   └── PdfGeneratorClient.cs
    │   │   │   │   │       ├── Profile/
    │   │   │   │   │       │   ├── ProfileClient.cs
    │   │   │   │   │       │   └── ProfileClientCachingDecorator.cs
    │   │   │   │   │       ├── Register/
    │   │   │   │   │       │   ├── AltinnPartyClient.cs
    │   │   │   │   │       │   ├── PersonClient.cs
    │   │   │   │   │       │   └── RegisterERClient.cs
    │   │   │   │   │       ├── Secrets/
    │   │   │   │   │       │   └── AppCodesSettings.cs
    │   │   │   │   │       └── Storage/
    │   │   │   │   │           ├── ApplicationClient.cs
    │   │   │   │   │           ├── DataClient.cs
    │   │   │   │   │           ├── InstanceClient.cs
    │   │   │   │   │           ├── InstanceEventClient.cs
    │   │   │   │   │           ├── InstanceLockClient.cs
    │   │   │   │   │           ├── ProcessClient.cs
    │   │   │   │   │           ├── SignClient.cs
    │   │   │   │   │           └── TextClient.cs
    │   │   │   │   ├── Interface/
    │   │   │   │   │   ├── IAppEvents.cs
    │   │   │   │   │   ├── IApplication.cs
    │   │   │   │   │   ├── IAuthentication.cs
    │   │   │   │   │   ├── IAuthorization.cs
    │   │   │   │   │   ├── IDSF.cs
    │   │   │   │   │   ├── IData.cs
    │   │   │   │   │   ├── IER.cs
    │   │   │   │   │   ├── IEvents.cs
    │   │   │   │   │   ├── IInstance.cs
    │   │   │   │   │   ├── IInstanceEvent.cs
    │   │   │   │   │   ├── IPersonLookup.cs
    │   │   │   │   │   ├── IPersonRetriever.cs
    │   │   │   │   │   ├── IPrefill.cs
    │   │   │   │   │   ├── IProcess.cs
    │   │   │   │   │   ├── IProfile.cs
    │   │   │   │   │   ├── IRegister.cs
    │   │   │   │   │   ├── ISecrets.cs
    │   │   │   │   │   ├── ITaskEvents.cs
    │   │   │   │   │   └── IUserTokenProvider.cs
    │   │   │   │   ├── Internal/
    │   │   │   │   │   ├── AccessManagement/
    │   │   │   │   │   │   ├── Exceptions/
    │   │   │   │   │   │   │   ├── AccessManagementArgumentException.cs
    │   │   │   │   │   │   │   ├── AccessManagementException.cs
    │   │   │   │   │   │   │   └── AccessManagementRequestException.cs
    │   │   │   │   │   │   ├── Helpers/
    │   │   │   │   │   │   │   └── UrlHelper.cs
    │   │   │   │   │   │   └── Models/
    │   │   │   │   │   │       ├── DelegationConstants.cs
    │   │   │   │   │   │       ├── DelegationRequest.cs
    │   │   │   │   │   │       ├── DelegationResponse.cs
    │   │   │   │   │   │       └── Shared/
    │   │   │   │   │   │           ├── AltinnAction.cs
    │   │   │   │   │   │           ├── AppsInstanceDelegationRequestDto.cs
    │   │   │   │   │   │           ├── DelegationParty.cs
    │   │   │   │   │   │           ├── Resource.cs
    │   │   │   │   │   │           └── RightDto.cs
    │   │   │   │   │   ├── AltinnCdn/
    │   │   │   │   │   │   ├── AltinnCdnClient.cs
    │   │   │   │   │   │   ├── AltinnCdnOrgs.cs
    │   │   │   │   │   │   └── IAltinnCdnClient.cs
    │   │   │   │   │   ├── App/
    │   │   │   │   │   │   ├── AppMetadata.cs
    │   │   │   │   │   │   ├── ApplicationConfigException.cs
    │   │   │   │   │   │   ├── FrontendFeatures.cs
    │   │   │   │   │   │   ├── IAppEvents.cs
    │   │   │   │   │   │   ├── IAppMetadata.cs
    │   │   │   │   │   │   ├── IAppResources.cs
    │   │   │   │   │   │   ├── IApplicationClient.cs
    │   │   │   │   │   │   ├── IFrontendFeatures.cs
    │   │   │   │   │   │   ├── IIndexPageGenerator.cs
    │   │   │   │   │   │   └── IndexPageGenerator.cs
    │   │   │   │   │   ├── AppModel/
    │   │   │   │   │   │   ├── DefaultAppModel.cs
    │   │   │   │   │   │   └── IAppModel.cs
    │   │   │   │   │   ├── Auth/
    │   │   │   │   │   │   ├── AuthenticationTokenResolver.cs
    │   │   │   │   │   │   ├── AuthorizationService.cs
    │   │   │   │   │   │   ├── IAuthenticationClient.cs
    │   │   │   │   │   │   ├── IAuthenticationTokenResolver.cs
    │   │   │   │   │   │   ├── IAuthorizationClient.cs
    │   │   │   │   │   │   ├── IAuthorizationService.cs
    │   │   │   │   │   │   └── IUserTokenProvider.cs
    │   │   │   │   │   ├── Data/
    │   │   │   │   │   │   ├── CleanInstanceDataAccessor.cs
    │   │   │   │   │   │   ├── DataElementAccessChecker.cs
    │   │   │   │   │   │   ├── DataElementCache.cs
    │   │   │   │   │   │   ├── DataService.cs
    │   │   │   │   │   │   ├── FormDataWrapperFactory.cs
    │   │   │   │   │   │   ├── IDataClient.cs
    │   │   │   │   │   │   ├── IDataElementAccessChecker.cs
    │   │   │   │   │   │   ├── IDataService.cs
    │   │   │   │   │   │   ├── IFormDataWrapper.cs
    │   │   │   │   │   │   ├── InstanceDataUnitOfWork.cs
    │   │   │   │   │   │   ├── InstanceDataUnitOfWorkInitializer.cs
    │   │   │   │   │   │   ├── PreviousDataAccessor.cs
    │   │   │   │   │   │   └── ReflectionFormDataWrapper.cs
    │   │   │   │   │   ├── Events/
    │   │   │   │   │   │   ├── EventHandlerResolver.cs
    │   │   │   │   │   │   ├── IEventHandlerResolver.cs
    │   │   │   │   │   │   ├── IEventSecretCodeProvider.cs
    │   │   │   │   │   │   ├── IEventsClient.cs
    │   │   │   │   │   │   ├── IEventsSubscription.cs
    │   │   │   │   │   │   ├── KeyVaultSecretCodeProvider.cs
    │   │   │   │   │   │   ├── SubscriptionValidationHandler.cs
    │   │   │   │   │   │   └── UnhandledEventHandler.cs
    │   │   │   │   │   ├── Expressions/
    │   │   │   │   │   │   ├── ExpressionEvaluator.cs
    │   │   │   │   │   │   ├── ExpressionEvaluatorTypeErrorException.cs
    │   │   │   │   │   │   ├── ExpressionValue.cs
    │   │   │   │   │   │   ├── ILayoutEvaluatorStateInitializer.cs
    │   │   │   │   │   │   ├── LayoutEvaluator.cs
    │   │   │   │   │   │   ├── LayoutEvaluatorState.cs
    │   │   │   │   │   │   ├── LayoutEvaluatorStateInitializer.cs
    │   │   │   │   │   │   └── UnicodeDateTimeTokenConverter.cs
    │   │   │   │   │   ├── InstanceLocking/
    │   │   │   │   │   │   ├── IInstanceLocker.cs
    │   │   │   │   │   │   └── InstanceLocker.cs
    │   │   │   │   │   ├── Instances/
    │   │   │   │   │   │   ├── IInstanceClient.cs
    │   │   │   │   │   │   └── IInstanceEventClient.cs
    │   │   │   │   │   ├── Language/
    │   │   │   │   │   │   ├── ApplicationLanguage.cs
    │   │   │   │   │   │   ├── IApplicationLanguage.cs
    │   │   │   │   │   │   └── LanguageConst.cs
    │   │   │   │   │   ├── Linq/
    │   │   │   │   │   │   └── Extensions.cs
    │   │   │   │   │   ├── LocaltestValidation.cs
    │   │   │   │   │   ├── Pdf/
    │   │   │   │   │   │   ├── IPdfGeneratorClient.cs
    │   │   │   │   │   │   ├── IPdfService.cs
    │   │   │   │   │   │   ├── PdfGenerationException.cs
    │   │   │   │   │   │   ├── PdfGeneratorSettings.cs
    │   │   │   │   │   │   └── PdfService.cs
    │   │   │   │   │   ├── Prefill/
    │   │   │   │   │   │   └── IPrefill.cs
    │   │   │   │   │   ├── Process/
    │   │   │   │   │   │   ├── Authorization/
    │   │   │   │   │   │   │   ├── IUserActionAuthorizerProvider.cs
    │   │   │   │   │   │   │   ├── UserActionAuthorizerProvider.cs
    │   │   │   │   │   │   │   └── UserActionAuthorizerServiceCollectionExtension.cs
    │   │   │   │   │   │   ├── Elements/
    │   │   │   │   │   │   │   ├── AltinnExtensionProperties/
    │   │   │   │   │   │   │   │   ├── AltinnAction.cs
    │   │   │   │   │   │   │   │   ├── AltinnEFormidlingConfiguration.cs
    │   │   │   │   │   │   │   │   ├── AltinnEnvironmentConfig.cs
    │   │   │   │   │   │   │   │   ├── AltinnExtensionConfigValidationExtensions.cs
    │   │   │   │   │   │   │   │   ├── AltinnGatewayExtension.cs
    │   │   │   │   │   │   │   │   ├── AltinnPaymentConfiguration.cs
    │   │   │   │   │   │   │   │   ├── AltinnPdfConfiguration.cs
    │   │   │   │   │   │   │   │   ├── AltinnSignatureConfiguration.cs
    │   │   │   │   │   │   │   │   ├── AltinnSubformPdfConfiguration.cs
    │   │   │   │   │   │   │   │   └── AltinnTaskExtension.cs
    │   │   │   │   │   │   │   ├── AppProcessElementInfo.cs
    │   │   │   │   │   │   │   ├── AppProcessState.cs
    │   │   │   │   │   │   │   ├── AppProcessTaskTypeInfo.cs
    │   │   │   │   │   │   │   ├── Base/
    │   │   │   │   │   │   │   │   └── ProcessElement.cs
    │   │   │   │   │   │   │   ├── Definitions.cs
    │   │   │   │   │   │   │   ├── EndEvent.cs
    │   │   │   │   │   │   │   ├── ExclusiveGateway.cs
    │   │   │   │   │   │   │   ├── ExtensionElements.cs
    │   │   │   │   │   │   │   ├── Process.cs
    │   │   │   │   │   │   │   ├── ProcessTask.cs
    │   │   │   │   │   │   │   ├── SequenceFlow.cs
    │   │   │   │   │   │   │   ├── ServiceTask.cs
    │   │   │   │   │   │   │   ├── StartEvent.cs
    │   │   │   │   │   │   │   └── UserAction.cs
    │   │   │   │   │   │   ├── EventHandlers/
    │   │   │   │   │   │   │   ├── EndEventEventHandler.cs
    │   │   │   │   │   │   │   ├── IEndEventEventHandler.cs
    │   │   │   │   │   │   │   └── ProcessTask/
    │   │   │   │   │   │   │       ├── AbandonTaskEventHandler.cs
    │   │   │   │   │   │   │       ├── EndTaskEventHandler.cs
    │   │   │   │   │   │   │       ├── Interfaces/
    │   │   │   │   │   │   │       │   ├── IAbandonTaskEventHandler.cs
    │   │   │   │   │   │   │       │   ├── IEndTaskEventHandler.cs
    │   │   │   │   │   │   │       │   └── IStartTaskEventHandler.cs
    │   │   │   │   │   │   │       └── StartTaskEventHandler.cs
    │   │   │   │   │   │   ├── ExclusiveGatewayFactory.cs
    │   │   │   │   │   │   ├── ExpressionsExclusiveGateway.cs
    │   │   │   │   │   │   ├── Interfaces/
    │   │   │   │   │   │   │   ├── IProcessClient.cs
    │   │   │   │   │   │   │   ├── IProcessEngine.cs
    │   │   │   │   │   │   │   ├── IProcessEngineAuthorizer.cs
    │   │   │   │   │   │   │   ├── IProcessEventDispatcher.cs
    │   │   │   │   │   │   │   ├── IProcessEventHandlerDelegator.cs
    │   │   │   │   │   │   │   ├── IProcessNavigator.cs
    │   │   │   │   │   │   │   └── IProcessReader.cs
    │   │   │   │   │   │   ├── ProcessEngine.cs
    │   │   │   │   │   │   ├── ProcessEngineAuthorizer.cs
    │   │   │   │   │   │   ├── ProcessEventDispatcher.cs
    │   │   │   │   │   │   ├── ProcessEventHandlingDelegator.cs
    │   │   │   │   │   │   ├── ProcessException.cs
    │   │   │   │   │   │   ├── ProcessNavigator.cs
    │   │   │   │   │   │   ├── ProcessReader.cs
    │   │   │   │   │   │   ├── ProcessReaderExtensions.cs
    │   │   │   │   │   │   ├── ProcessSequenceFlowType.cs
    │   │   │   │   │   │   ├── ProcessStateEnricher.cs
    │   │   │   │   │   │   └── ProcessTasks/
    │   │   │   │   │   │       ├── Common/
    │   │   │   │   │   │       │   ├── IProcessTaskCleaner.cs
    │   │   │   │   │   │       │   ├── IProcessTaskDataLocker.cs
    │   │   │   │   │   │       │   ├── IProcessTaskFinalizer.cs
    │   │   │   │   │   │       │   ├── IProcessTaskInitializer.cs
    │   │   │   │   │   │       │   ├── ProcessTaskCleaner.cs
    │   │   │   │   │   │       │   ├── ProcessTaskDataLocker.cs
    │   │   │   │   │   │       │   ├── ProcessTaskFinalizer.cs
    │   │   │   │   │   │       │   └── ProcessTaskInitializer.cs
    │   │   │   │   │   │       ├── ConfirmationProcessTask.cs
    │   │   │   │   │   │       ├── DataProcessTask.cs
    │   │   │   │   │   │       ├── FeedbackProcessTask.cs
    │   │   │   │   │   │       ├── IProcessTask.cs
    │   │   │   │   │   │       ├── NullTypeProcessTask.cs
    │   │   │   │   │   │       ├── PaymentProcessTask.cs
    │   │   │   │   │   │       ├── ServiceTasks/
    │   │   │   │   │   │       │   ├── EFormidlingServiceTask.cs
    │   │   │   │   │   │       │   ├── IServiceTask.cs
    │   │   │   │   │   │       │   ├── Legacy/
    │   │   │   │   │   │       │   │   ├── EformidlingServiceTaskLegacy.cs
    │   │   │   │   │   │       │   │   └── PdfServiceTaskLegacy.cs
    │   │   │   │   │   │       │   ├── PdfServiceTask.cs
    │   │   │   │   │   │       │   └── SubformPdfServiceTask.cs
    │   │   │   │   │   │       └── SigningProcessTask.cs
    │   │   │   │   │   ├── Profile/
    │   │   │   │   │   │   └── IProfileClient.cs
    │   │   │   │   │   ├── Registers/
    │   │   │   │   │   │   ├── IAltinnPartyClient.cs
    │   │   │   │   │   │   ├── IOrganizationClient.cs
    │   │   │   │   │   │   ├── IPersonClient.cs
    │   │   │   │   │   │   └── RegisterClient.cs
    │   │   │   │   │   ├── RuntimeEnvironment.cs
    │   │   │   │   │   ├── Secrets/
    │   │   │   │   │   │   └── ISecretsClient.cs
    │   │   │   │   │   ├── Sign/
    │   │   │   │   │   │   ├── ISignClient.cs
    │   │   │   │   │   │   └── SignatureContext.cs
    │   │   │   │   │   ├── Texts/
    │   │   │   │   │   │   ├── IText.cs
    │   │   │   │   │   │   ├── ITranslationService.cs
    │   │   │   │   │   │   └── TranslationService.cs
    │   │   │   │   │   └── Validation/
    │   │   │   │   │       ├── FileValidationService.cs
    │   │   │   │   │       ├── FileValidatorFactory.cs
    │   │   │   │   │       ├── IFileValidationService.cs
    │   │   │   │   │       ├── IFileValidatorFactory.cs
    │   │   │   │   │       ├── IValidationService.cs
    │   │   │   │   │       ├── IValidatorFactory.cs
    │   │   │   │   │       └── ValidationService.cs
    │   │   │   │   └── Models/
    │   │   │   │       ├── AppIdentifier.cs
    │   │   │   │       ├── AppOption.cs
    │   │   │   │       ├── AppOptions.cs
    │   │   │   │       ├── AppResourceId.cs
    │   │   │   │       ├── ApplicationLanguage.cs
    │   │   │   │       ├── ApplicationMetadata.cs
    │   │   │   │       ├── Attachment.cs
    │   │   │   │       ├── AttachmentList.cs
    │   │   │   │       ├── BrowserAssetsConfiguration.cs
    │   │   │   │       ├── CalculationResult.cs
    │   │   │   │       ├── CloudEvent.cs
    │   │   │   │       ├── Components.cs
    │   │   │   │       ├── DataElementChanges.cs
    │   │   │   │       ├── DataElementIdentifier.cs
    │   │   │   │       ├── DataList.cs
    │   │   │   │       ├── DataListMetadata.cs
    │   │   │   │       ├── Expressions/
    │   │   │   │       │   ├── ComponentContext.cs
    │   │   │   │       │   ├── Expression.cs
    │   │   │   │       │   ├── ExpressionConverter.cs
    │   │   │   │       │   └── ExpressionFunction.cs
    │   │   │   │       ├── GlobalPageSettings.cs
    │   │   │   │       ├── InstanceIdentifier.cs
    │   │   │   │       ├── InstanceSelection.cs
    │   │   │   │       ├── JwtToken.cs
    │   │   │   │       ├── JwtTokenJsonConverter.cs
    │   │   │   │       ├── LanguageCode.cs
    │   │   │   │       ├── LanguageCodeJsonConverter.cs
    │   │   │   │       ├── Layout/
    │   │   │   │       │   ├── Components/
    │   │   │   │       │   │   ├── Base/
    │   │   │   │       │   │   │   ├── BaseComponent.cs
    │   │   │   │       │   │   │   ├── BaseLayoutComponent.cs
    │   │   │   │       │   │   │   ├── NoReferenceComponent.cs
    │   │   │   │       │   │   │   └── ReferenceComponent.cs
    │   │   │   │       │   │   ├── CardsComponent.cs
    │   │   │   │       │   │   ├── GridComponent.cs
    │   │   │   │       │   │   ├── LikertComponent.cs
    │   │   │   │       │   │   ├── NonRepeatingGroupComponent.cs
    │   │   │   │       │   │   ├── OptionsComponent.cs
    │   │   │   │       │   │   ├── PageComponent.cs
    │   │   │   │       │   │   ├── RepeatingGroupComponent.cs
    │   │   │   │       │   │   ├── SubFormComponent.cs
    │   │   │   │       │   │   ├── TabsComponent.cs
    │   │   │   │       │   │   ├── UnknownComponent.cs
    │   │   │   │       │   │   └── _readme.md
    │   │   │   │       │   ├── DataReference.cs
    │   │   │   │       │   ├── LayoutModel.cs
    │   │   │   │       │   ├── ModelBinding.cs
    │   │   │   │       │   └── UiFolderComponent.cs
    │   │   │   │       ├── LayoutSet.cs
    │   │   │   │       ├── LayoutSettings.cs
    │   │   │   │       ├── Logo.cs
    │   │   │   │       ├── MimeType.cs
    │   │   │   │       ├── NationalIdentityNumber.cs
    │   │   │   │       ├── NationalIdentityNumberJsonConverter.cs
    │   │   │   │       ├── Notifications/
    │   │   │   │       │   ├── Email/
    │   │   │   │       │   │   ├── EmailNotification.cs
    │   │   │   │       │   │   ├── EmailNotificationException.cs
    │   │   │   │       │   │   ├── EmailOrderResponse.cs
    │   │   │   │       │   │   └── EmailRecipient.cs
    │   │   │   │       │   ├── Future/
    │   │   │   │       │   │   ├── InstansiationNotification.cs
    │   │   │   │       │   │   ├── NotificationOrderException.cs
    │   │   │   │       │   │   ├── NotificationOrderRequest.cs
    │   │   │   │       │   │   └── NotificationOrderResponse.cs
    │   │   │   │       │   ├── Order/
    │   │   │   │       │   │   └── NotificationCancelException.cs
    │   │   │   │       │   └── Sms/
    │   │   │   │       │       ├── SmsNotification.cs
    │   │   │   │       │       ├── SmsNotificationException.cs
    │   │   │   │       │       ├── SmsOrderResponse.cs
    │   │   │   │       │       └── SmsRecipient.cs
    │   │   │   │       ├── OnEntry.cs
    │   │   │   │       ├── OrganisationNumber.cs
    │   │   │   │       ├── OrganisationNumberJsonConverter.cs
    │   │   │   │       ├── OrganisationOrPersonIdentifier.cs
    │   │   │   │       ├── OrganisationOrPersonIdentifierJsonConverter.cs
    │   │   │   │       ├── PageGroup.cs
    │   │   │   │       ├── Pages.cs
    │   │   │   │       ├── Pdf/
    │   │   │   │       │   ├── PdfGeneratorCookieOptions.cs
    │   │   │   │       │   ├── PdfGeneratorRequest.cs
    │   │   │   │       │   └── PdfGeneratorRequestOptions.cs
    │   │   │   │       ├── Process/
    │   │   │   │       │   ├── ProcessChangeResult.cs
    │   │   │   │       │   ├── ProcessGatewayInformation.cs
    │   │   │   │       │   ├── ProcessNextRequest.cs
    │   │   │   │       │   ├── ProcessStartRequest.cs
    │   │   │   │       │   └── ProcessStateChange.cs
    │   │   │   │       ├── QueryResponse.cs
    │   │   │   │       ├── Result/
    │   │   │   │       │   └── ServiceResult.cs
    │   │   │   │       ├── StylesConfig.cs
    │   │   │   │       ├── TaskNavigationEntryJsonConverter.cs
    │   │   │   │       ├── UiConfiguration.cs
    │   │   │   │       ├── UserAction/
    │   │   │   │       │   ├── ActionError.cs
    │   │   │   │       │   ├── ClientAction.cs
    │   │   │   │       │   ├── UserActionContext.cs
    │   │   │   │       │   └── UserActionResult.cs
    │   │   │   │       ├── UserContext.cs
    │   │   │   │       └── Validation/
    │   │   │   │           ├── ExpressionValidation.cs
    │   │   │   │           ├── FrontendSeverityConverter.cs
    │   │   │   │           ├── InstantiationValidationResult.cs
    │   │   │   │           ├── ValidationException.cs
    │   │   │   │           ├── ValidationIssue.cs
    │   │   │   │           ├── ValidationIssueCodes.cs
    │   │   │   │           ├── ValidationIssueSeverity.cs
    │   │   │   │           ├── ValidationIssueSource.cs
    │   │   │   │           └── ValidationIssueWithSource.cs
    │   │   │   ├── Altinn.App.Internal.Analyzers/
    │   │   │   │   ├── Altinn.App.Internal.Analyzers.csproj
    │   │   │   │   ├── AnalyzerReleases.Shipped.md
    │   │   │   │   ├── AnalyzerReleases.Unshipped.md
    │   │   │   │   └── AppImplementationInjectionAnalyzer.cs
    │   │   │   ├── Directory.Build.props
    │   │   │   └── Directory.Build.targets
    │   │   └── test/
    │   │       ├── Altinn.App.Analyzers.Tests/
    │   │       │   ├── Altinn.App.Analyzers.Tests.csproj
    │   │       │   ├── Fixtures/
    │   │       │   │   ├── AltinnAppCoreFixture.cs
    │   │       │   │   ├── AltinnTestAppFixture.Contents.cs
    │   │       │   │   ├── AltinnTestAppFixture.cs
    │   │       │   │   ├── BaseFixture.cs
    │   │       │   │   ├── Collections.cs
    │   │       │   │   ├── DiagnosticJsonConverter.cs
    │   │       │   │   └── ProjectModification.cs
    │   │       │   ├── HttpContextAccessorUsageAnalyzerTests.cs
    │   │       │   ├── Internal/
    │   │       │   │   └── AppImplementationInjectionAnalyzerTests.cs
    │   │       │   ├── ModuleInitializer.cs
    │   │       │   ├── _snapshots/
    │   │       │   │   ├── AppImplementationInjectionAnalyzerTests.Emits_Diagnostics.verified.txt
    │   │       │   │   └── HttpContextAccessorUsageAnalyzerTests.Emits_Diagnostic.verified.txt
    │   │       │   └── testapp/
    │   │       │       ├── .altinnstudio/
    │   │       │       │   └── settings.json
    │   │       │       ├── .dockerignore
    │   │       │       ├── .gitignore
    │   │       │       ├── App/
    │   │       │       │   ├── App.csproj
    │   │       │       │   ├── Program.cs
    │   │       │       │   ├── Properties/
    │   │       │       │   │   └── launchSettings.json
    │   │       │       │   ├── additional/
    │   │       │       │   │   └── InvalidHttpContextAccessorUse.cs
    │   │       │       │   ├── appsettings.Development.json
    │   │       │       │   ├── appsettings.Production.json
    │   │       │       │   ├── appsettings.Staging.json
    │   │       │       │   ├── appsettings.json
    │   │       │       │   ├── config/
    │   │       │       │   │   ├── applicationmetadata.json
    │   │       │       │   │   ├── authorization/
    │   │       │       │   │   │   └── policy.xml
    │   │       │       │   │   ├── process/
    │   │       │       │   │   │   └── process.bpmn
    │   │       │       │   │   └── texts/
    │   │       │       │   │       └── resource.nb.json
    │   │       │       │   ├── models/
    │   │       │       │   │   ├── model.cs
    │   │       │       │   │   ├── model.metadata.json
    │   │       │       │   │   ├── model.schema.json
    │   │       │       │   │   └── model.xsd
    │   │       │       │   └── ui/
    │   │       │       │       ├── Task_1/
    │   │       │       │       │   ├── Settings.json
    │   │       │       │       │   └── layouts/
    │   │       │       │       │       └── Side1.json
    │   │       │       │       └── footer.json
    │   │       │       ├── App.sln
    │   │       │       ├── Directory.Build.props
    │   │       │       ├── Dockerfile
    │   │       │       └── deployment/
    │   │       │           ├── .helmignore
    │   │       │           ├── Chart.yaml
    │   │       │           └── values.yaml
    │   │       ├── Altinn.App.Api.Tests/
    │   │       │   ├── Altinn.App.Api.Tests.csproj
    │   │       │   ├── Controllers/
    │   │       │   │   ├── ActionsControllerTests.cs
    │   │       │   │   ├── ApplicationMetadataControllerTests.cs
    │   │       │   │   ├── Conventions/
    │   │       │   │   │   ├── AltinnApiJsonFormatterTests.cs
    │   │       │   │   │   ├── AltinnControllerConventionTests.cs
    │   │       │   │   │   ├── ConfigureMvcJsonOptionsTests.cs
    │   │       │   │   │   └── EnumSerializationTests.cs
    │   │       │   │   ├── DataControllerPatchTests.InvalidTestValue_ReturnsConflict.verified.txt
    │   │       │   │   ├── DataControllerTests.cs
    │   │       │   │   ├── DataController_LayoutEvaluatorTests.cs
    │   │       │   │   ├── DataController_PatchTests.cs
    │   │       │   │   ├── DataController_PostTests.cs
    │   │       │   │   ├── DataController_PutTests.cs
    │   │       │   │   ├── DataController_RequiredActionTests.cs
    │   │       │   │   ├── DataController_UserAccessTests.cs
    │   │       │   │   ├── DataTagsControllerTests.cs
    │   │       │   │   ├── EventsReceiverControllerTests.cs
    │   │       │   │   ├── ExternalApiControllerTests.cs
    │   │       │   │   ├── FileScanControllerTests.cs
    │   │       │   │   ├── FormBootstrapControllerTests.cs
    │   │       │   │   ├── HomeControllerTest_PartySelection.cs
    │   │       │   │   ├── HomeControllerTest_SetQueryParams.Ensure_ok_request_when_query_params_are_valid.verified.txt
    │   │       │   │   ├── HomeControllerTest_SetQueryParams.Ensure_only_one_content_security_policy.verified.txt
    │   │       │   │   ├── HomeControllerTest_SetQueryParams.ReturnsMappedModelWhenValidationSucceds.verified.txt
    │   │       │   │   ├── HomeControllerTest_SetQueryParams.SetQueryParms_ReturnBadRequestWhenValidationFails.verified.txt
    │   │       │   │   ├── HomeControllerTest_SetQueryParams.cs
    │   │       │   │   ├── InstancesControllerFixture.cs
    │   │       │   │   ├── InstancesController_ActiveInstancesTests.cs
    │   │       │   │   ├── InstancesController_CopyInstanceTests.cs
    │   │       │   │   ├── InstancesController_GetTests.ReturnsOkResult_Deserialized.verified.txt
    │   │       │   │   ├── InstancesController_GetTests.ReturnsOkResult_Raw.verified.txt
    │   │       │   │   ├── InstancesController_GetTests.cs
    │   │       │   │   ├── InstancesController_PostNewInstanceTests.PostNewInstance_Simplified_Org.verified.txt
    │   │       │   │   ├── InstancesController_PostNewInstanceTests.PostNewInstance_Simplified_SelfIdentifiedUser.verified.txt
    │   │       │   │   ├── InstancesController_PostNewInstanceTests.PostNewInstance_Simplified_ServiceOwner.verified.txt
    │   │       │   │   ├── InstancesController_PostNewInstanceTests.PostNewInstance_Simplified_SystemUser.verified.txt
    │   │       │   │   ├── InstancesController_PostNewInstanceTests.PostNewInstance_Simplified_User.verified.txt
    │   │       │   │   ├── InstancesController_PostNewInstanceTests.cs
    │   │       │   │   ├── LookupOrganisationControllerTests.cs
    │   │       │   │   ├── LookupPersonControllerTests.cs
    │   │       │   │   ├── NotificationCallbackControllerTests.cs
    │   │       │   │   ├── OptionsControllerTests.cs
    │   │       │   │   ├── PaymentControllerTests.cs
    │   │       │   │   ├── PdfControllerTests.cs
    │   │       │   │   ├── ProcessControllerTests.RunProcessNext_FailingValidator_Reject_ReturnsOk.verified.txt
    │   │       │   │   ├── ProcessControllerTests.RunProcessNext_FailingValidator_ReturnsValidationErrors.verified.txt
    │   │       │   │   ├── ProcessControllerTests.RunProcessNext_PdfFails_DataIsUnlocked.verified.txt
    │   │       │   │   ├── ProcessControllerTests.cs
    │   │       │   │   ├── ProfileControllerTests.PartyClient_401.verified.txt
    │   │       │   │   ├── ProfileControllerTests.User.verified.txt
    │   │       │   │   ├── ProfileControllerTests.cs
    │   │       │   │   ├── SigningControllerTests.cs
    │   │       │   │   ├── StatelessDataControllerTests.cs
    │   │       │   │   ├── TestResources/
    │   │       │   │   │   └── DummyModel.cs
    │   │       │   │   ├── TextsControllerTests.cs
    │   │       │   │   ├── UserDefinedMetadataControllerTests.cs
    │   │       │   │   ├── ValidateControllerTests.cs
    │   │       │   │   ├── ValidateControllerValidateDataTests.cs
    │   │       │   │   └── ValidateController_ValidateInstanceTests.cs
    │   │       │   ├── CustomWebApplicationFactory.cs
    │   │       │   ├── Data/
    │   │       │   │   ├── Instances/
    │   │       │   │   │   ├── .gitignore
    │   │       │   │   │   ├── tdd/
    │   │       │   │   │   │   ├── contributer-restriction/
    │   │       │   │   │   │   │   ├── 1337/
    │   │       │   │   │   │   │   │   ├── 0fc98a23-fe31-4ef5-8fb9-dd3f479354cd.pretest.json
    │   │       │   │   │   │   │   │   └── 1fc98a23-fe31-4ef5-8fb9-dd3f479354ce.pretest.json
    │   │       │   │   │   │   │   ├── 500000/
    │   │       │   │   │   │   │   │   └── 5d9e906b-83ed-44df-85a7-2f104c640bff.pretest.json
    │   │       │   │   │   │   │   └── 500600/
    │   │       │   │   │   │   │       ├── 00000000-dead-0000-babe-000000000999/
    │   │       │   │   │   │   │       │   ├── blob/
    │   │       │   │   │   │   │       │   │   └── cd691c32-0000-4555-8aee-0b7054a413e4.pretest
    │   │       │   │   │   │   │       │   └── cd691c32-0000-4555-8aee-0b7054a413e4.pretest.json
    │   │       │   │   │   │   │       ├── 00000000-dead-0000-babe-000000000999.pretest.json
    │   │       │   │   │   │   │       ├── 09e16a2d-e009-4f3a-940b-da1ea54a18b4/
    │   │       │   │   │   │   │       │   ├── blob/
    │   │       │   │   │   │   │       │   │   └── c52f40dd-11d1-4e24-b13b-4fcfdf6ca1c6.pretest
    │   │       │   │   │   │   │       │   └── c52f40dd-11d1-4e24-b13b-4fcfdf6ca1c6.pretest.json
    │   │       │   │   │   │   │       ├── 09e16a2d-e009-4f3a-940b-da1ea54a18b4.pretest.json
    │   │       │   │   │   │   │       ├── 0fc98a23-fe31-4ef5-8fb9-dd3f479354ce/
    │   │       │   │   │   │   │       │   ├── blob/
    │   │       │   │   │   │   │       │   │   ├── fc121812-0336-45fb-a75c-490df3ad5109.pretest
    │   │       │   │   │   │   │       │   │   └── fc121812-0336-45fb-a75c-490df3ad510a.pretest
    │   │       │   │   │   │   │       │   ├── fc121812-0336-45fb-a75c-490df3ad5109.pretest.json
    │   │       │   │   │   │   │       │   └── fc121812-0336-45fb-a75c-490df3ad510a.pretest.json
    │   │       │   │   │   │   │       ├── 0fc98a23-fe31-4ef5-8fb9-dd3f479354ce.pretest.json
    │   │       │   │   │   │   │       ├── 3102f61d-1446-4ca5-9fed-3c7c7d67249c/
    │   │       │   │   │   │   │       │   ├── 5240d834-dca6-44d3-b99a-1b7ca9b862af.pretest.json
    │   │       │   │   │   │   │       │   └── blob/
    │   │       │   │   │   │   │       │       └── 5240d834-dca6-44d3-b99a-1b7ca9b862af.pretest
    │   │       │   │   │   │   │       ├── 3102f61d-1446-4ca5-9fed-3c7c7d67249c.pretest.json
    │   │       │   │   │   │   │       ├── 5a2fa5ec-f97c-4816-b57a-dc78a981917e/
    │   │       │   │   │   │   │       │   ├── blob/
    │   │       │   │   │   │   │       │   │   └── cd691c32-ae36-4555-8aee-0b7054a413e4.pretest
    │   │       │   │   │   │   │       │   └── cd691c32-ae36-4555-8aee-0b7054a413e4.pretest.json
    │   │       │   │   │   │   │       ├── 5a2fa5ec-f97c-4816-b57a-dc78a981917e.pretest.json
    │   │       │   │   │   │   │       ├── cff1cb24-5bc1-4888-8e06-c634753c5144/
    │   │       │   │   │   │   │       │   ├── blob/
    │   │       │   │   │   │   │       │   │   └── f3e04c65-aa70-40ec-84df-087cc2583402.pretest
    │   │       │   │   │   │   │       │   └── f3e04c65-aa70-40ec-84df-087cc2583402.pretest.json
    │   │       │   │   │   │   │       ├── cff1cb24-5bc1-4888-8e06-c634753c5144.pretest.json
    │   │       │   │   │   │   │       ├── fad57e80-ec2f-4dee-90ac-400fa6d7720f/
    │   │       │   │   │   │   │       │   ├── 3b46b9ef-774c-4849-b4dd-66ef871f5b07.pretest.json
    │   │       │   │   │   │   │       │   └── blob/
    │   │       │   │   │   │   │       │       └── 3b46b9ef-774c-4849-b4dd-66ef871f5b07.pretest
    │   │       │   │   │   │   │       └── fad57e80-ec2f-4dee-90ac-400fa6d7720f.pretest.json
    │   │       │   │   │   │   └── task-action/
    │   │       │   │   │   │       └── 1337/
    │   │       │   │   │   │           ├── b1135209-628e-4a6e-9efd-e4282068ef41.pretest.json
    │   │       │   │   │   │           ├── b1135209-628e-4a6e-9efd-e4282068ef42.pretest.json
    │   │       │   │   │   │           └── b1135209-628e-4a6e-9efd-e4282068ef43.pretest.json
    │   │       │   │   │   └── ttd/
    │   │       │   │   │       └── service-tasks/
    │   │       │   │   │           ├── .gitignore
    │   │       │   │   │           └── 501337/
    │   │       │   │   │               ├── a2af1cfd-db99-45f9-9625-9dfa1223485f/
    │   │       │   │   │               │   ├── blob/
    │   │       │   │   │               │   │   └── fd4c42a4-a6a0-4aec-b8e9-9f5d34c445ca.pretest
    │   │       │   │   │               │   └── fd4c42a4-a6a0-4aec-b8e9-9f5d34c445ca.pretest.json
    │   │       │   │   │               ├── a2af1cfd-db99-45f9-9625-9dfa1223485f.pretest.json
    │   │       │   │   │               └── b1af1cfd-db99-45f9-9625-9dfa1223485f.pretest.json
    │   │       │   │   ├── Register/
    │   │       │   │   │   ├── Org/
    │   │       │   │   │   │   ├── 897069631.json
    │   │       │   │   │   │   ├── 897069650.json
    │   │       │   │   │   │   ├── 897069651.json
    │   │       │   │   │   │   ├── 897069652.json
    │   │       │   │   │   │   ├── 897069653.json
    │   │       │   │   │   │   ├── 900000001.json
    │   │       │   │   │   │   ├── 910423185.json
    │   │       │   │   │   │   ├── 910423495.json
    │   │       │   │   │   │   ├── 910457292.json
    │   │       │   │   │   │   ├── 910471120.json
    │   │       │   │   │   │   └── 950474084.json
    │   │       │   │   │   └── Person/
    │   │       │   │   │       ├── 01017512345.json
    │   │       │   │   │       ├── 01039012345.json
    │   │       │   │   │       ├── 01899699552.json
    │   │       │   │   │       ├── 08829698278.json
    │   │       │   │   │       └── 17858296439.json
    │   │       │   │   ├── TestData.cs
    │   │       │   │   ├── apps/
    │   │       │   │   │   ├── tdd/
    │   │       │   │   │   │   ├── contributer-restriction/
    │   │       │   │   │   │   │   ├── appsettings.json
    │   │       │   │   │   │   │   ├── config/
    │   │       │   │   │   │   │   │   ├── applicationmetadata.json
    │   │       │   │   │   │   │   │   ├── authorization/
    │   │       │   │   │   │   │   │   │   └── policy.xml
    │   │       │   │   │   │   │   │   ├── process/
    │   │       │   │   │   │   │   │   │   └── process.bpmn
    │   │       │   │   │   │   │   │   └── texts/
    │   │       │   │   │   │   │   │       └── resource.nb.json
    │   │       │   │   │   │   │   ├── models/
    │   │       │   │   │   │   │   │   ├── Skjema.cs
    │   │       │   │   │   │   │   │   └── default.validation.json
    │   │       │   │   │   │   │   ├── options/
    │   │       │   │   │   │   │   │   └── fileSourceOptions.json
    │   │       │   │   │   │   │   └── ui/
    │   │       │   │   │   │   │       └── Task_1/
    │   │       │   │   │   │   │           ├── Settings.json
    │   │       │   │   │   │   │           └── layouts/
    │   │       │   │   │   │   │               ├── hidden_page.json
    │   │       │   │   │   │   │               └── page.json
    │   │       │   │   │   │   ├── demo-app/
    │   │       │   │   │   │   │   └── config/
    │   │       │   │   │   │   │       └── applicationmetadata.json
    │   │       │   │   │   │   ├── eformidling-app/
    │   │       │   │   │   │   │   ├── appsettings.json
    │   │       │   │   │   │   │   ├── config/
    │   │       │   │   │   │   │   │   ├── applicationmetadata.json
    │   │       │   │   │   │   │   │   ├── authorization/
    │   │       │   │   │   │   │   │   │   └── policy.xml
    │   │       │   │   │   │   │   │   ├── process/
    │   │       │   │   │   │   │   │   │   └── process.bpmn
    │   │       │   │   │   │   │   │   └── texts/
    │   │       │   │   │   │   │   │       └── resource.nb.json
    │   │       │   │   │   │   │   ├── logic/
    │   │       │   │   │   │   │   │   ├── App.cs
    │   │       │   │   │   │   │   │   └── EFormidlingMetadata.cs
    │   │       │   │   │   │   │   ├── models/
    │   │       │   │   │   │   │   │   ├── Skjema.cs
    │   │       │   │   │   │   │   │   └── Skjema.xsd
    │   │       │   │   │   │   │   └── ui/
    │   │       │   │   │   │   │       └── layouts/
    │   │       │   │   │   │   │           └── FormLayout.json
    │   │       │   │   │   │   ├── permissive-app/
    │   │       │   │   │   │   │   ├── appsettings.json
    │   │       │   │   │   │   │   ├── config/
    │   │       │   │   │   │   │   │   ├── applicationmetadata.json
    │   │       │   │   │   │   │   │   ├── authorization/
    │   │       │   │   │   │   │   │   │   └── policy.xml
    │   │       │   │   │   │   │   │   ├── process/
    │   │       │   │   │   │   │   │   │   └── process.bpmn
    │   │       │   │   │   │   │   │   └── texts/
    │   │       │   │   │   │   │   │       └── resource.nb.json
    │   │       │   │   │   │   │   ├── models/
    │   │       │   │   │   │   │   │   ├── Skjema.cs
    │   │       │   │   │   │   │   │   └── default.validation.json
    │   │       │   │   │   │   │   ├── options/
    │   │       │   │   │   │   │   │   └── fileSourceOptions.json
    │   │       │   │   │   │   │   └── ui/
    │   │       │   │   │   │   │       └── Task_1/
    │   │       │   │   │   │   │           ├── Settings.json
    │   │       │   │   │   │   │           └── layouts/
    │   │       │   │   │   │   │               └── page.json
    │   │       │   │   │   │   └── task-action/
    │   │       │   │   │   │       ├── appsettings.json
    │   │       │   │   │   │       └── config/
    │   │       │   │   │   │           ├── applicationmetadata.json
    │   │       │   │   │   │           ├── authorization/
    │   │       │   │   │   │           │   └── policy.xml
    │   │       │   │   │   │           ├── models/
    │   │       │   │   │   │           │   └── Scheme.cs
    │   │       │   │   │   │           ├── process/
    │   │       │   │   │   │           │   └── process.bpmn
    │   │       │   │   │   │           └── texts/
    │   │       │   │   │   │               └── resource.nb.json
    │   │       │   │   │   └── ttd/
    │   │       │   │   │       └── service-tasks/
    │   │       │   │   │           ├── appsettings.json
    │   │       │   │   │           ├── config/
    │   │       │   │   │           │   ├── applicationmetadata.json
    │   │       │   │   │           │   ├── authorization/
    │   │       │   │   │           │   │   └── policy.xml
    │   │       │   │   │           │   ├── process/
    │   │       │   │   │           │   │   └── process.bpmn
    │   │       │   │   │           │   └── texts/
    │   │       │   │   │           │       └── resource.nb.json
    │   │       │   │   │           ├── models/
    │   │       │   │   │           │   ├── Model.cs
    │   │       │   │   │           │   ├── Model.schema.json
    │   │       │   │   │           │   └── Model.xsd
    │   │       │   │   │           └── ui/
    │   │       │   │   │               ├── Task_1/
    │   │       │   │   │               │   ├── Settings.json
    │   │       │   │   │               │   └── layouts/
    │   │       │   │   │               │       └── Side1.json
    │   │       │   │   │               └── footer.json
    │   │       │   │   └── authorization/
    │   │       │   │       ├── claims/
    │   │       │   │       │   ├── 12345.json
    │   │       │   │       │   └── 1337.json
    │   │       │   │       ├── partylist/
    │   │       │   │       │   ├── 1001.json
    │   │       │   │       │   ├── 1002.json
    │   │       │   │       │   ├── 1003.json
    │   │       │   │       │   ├── 12345.json
    │   │       │   │       │   └── 1337.json
    │   │       │   │       ├── resources/
    │   │       │   │       │   ├── Appid_119.json
    │   │       │   │       │   ├── Appid_120.json
    │   │       │   │       │   ├── Appid_122.json
    │   │       │   │       │   ├── Appid_123.json
    │   │       │   │       │   ├── Appid_124.json
    │   │       │   │       │   ├── Appid_125.json
    │   │       │   │       │   ├── Appid_126.json
    │   │       │   │       │   ├── Appid_127.json
    │   │       │   │       │   ├── Appid_128.json
    │   │       │   │       │   ├── Appid_129.json
    │   │       │   │       │   ├── Appid_130.json
    │   │       │   │       │   ├── Appid_132.json
    │   │       │   │       │   ├── Appid_133.json
    │   │       │   │       │   ├── Appid_134.json
    │   │       │   │       │   ├── Appid_136.json
    │   │       │   │       │   ├── Appid_137.json
    │   │       │   │       │   ├── Appid_138.json
    │   │       │   │       │   ├── Appid_139.json
    │   │       │   │       │   ├── Appid_142.json
    │   │       │   │       │   ├── Appid_144.json
    │   │       │   │       │   ├── Appid_145.json
    │   │       │   │       │   ├── Appid_147.json
    │   │       │   │       │   ├── Appid_148.json
    │   │       │   │       │   ├── Appid_150.json
    │   │       │   │       │   ├── Appid_153.json
    │   │       │   │       │   ├── Appid_154.json
    │   │       │   │       │   ├── Appid_155.json
    │   │       │   │       │   ├── Appid_164.json
    │   │       │   │       │   ├── Appid_168.json
    │   │       │   │       │   ├── Appid_178.json
    │   │       │   │       │   ├── Appid_179.json
    │   │       │   │       │   ├── Appid_180.json
    │   │       │   │       │   ├── Appid_181.json
    │   │       │   │       │   ├── Appid_182.json
    │   │       │   │       │   ├── Appid_184.json
    │   │       │   │       │   ├── Appid_185.json
    │   │       │   │       │   ├── Appid_191.json
    │   │       │   │       │   ├── Appid_192.json
    │   │       │   │       │   ├── Appid_193.json
    │   │       │   │       │   ├── Appid_196.json
    │   │       │   │       │   ├── Appid_197.json
    │   │       │   │       │   ├── Appid_198.json
    │   │       │   │       │   ├── Appid_199.json
    │   │       │   │       │   ├── Appid_200.json
    │   │       │   │       │   ├── Appid_201.json
    │   │       │   │       │   ├── Appid_202.json
    │   │       │   │       │   ├── Appid_203.json
    │   │       │   │       │   ├── Appid_204.json
    │   │       │   │       │   ├── Appid_205.json
    │   │       │   │       │   ├── Appid_206.json
    │   │       │   │       │   ├── Appid_207.json
    │   │       │   │       │   ├── Appid_208.json
    │   │       │   │       │   ├── Appid_209.json
    │   │       │   │       │   ├── Appid_210.json
    │   │       │   │       │   ├── Appid_211.json
    │   │       │   │       │   ├── Appid_212.json
    │   │       │   │       │   ├── Appid_213.json
    │   │       │   │       │   ├── Appid_214.json
    │   │       │   │       │   ├── Appid_215.json
    │   │       │   │       │   ├── Appid_216.json
    │   │       │   │       │   ├── Appid_217.json
    │   │       │   │       │   ├── Appid_218.json
    │   │       │   │       │   ├── Appid_219.json
    │   │       │   │       │   ├── Appid_220.json
    │   │       │   │       │   ├── Appid_221.json
    │   │       │   │       │   ├── Appid_222.json
    │   │       │   │       │   ├── Appid_223.json
    │   │       │   │       │   ├── Appid_400.json
    │   │       │   │       │   ├── Appid_401.json
    │   │       │   │       │   ├── Appid_402.json
    │   │       │   │       │   ├── Appid_403.json
    │   │       │   │       │   ├── Appid_43.json
    │   │       │   │       │   ├── altinn_access_management.json
    │   │       │   │       │   ├── nav_tiltakAvtaleOmArbeidstrening.json
    │   │       │   │       │   └── policies/
    │   │       │   │       │       └── altinn_maskinporten_scope_delegation.xml
    │   │       │   │       └── roles/
    │   │       │   │           ├── User_1001/
    │   │       │   │           │   ├── party_500000/
    │   │       │   │           │   │   └── roles.json
    │   │       │   │           │   └── party_510001/
    │   │       │   │           │       └── roles.json
    │   │       │   │           ├── User_1002/
    │   │       │   │           │   ├── party_500000/
    │   │       │   │           │   │   └── roles.json
    │   │       │   │           │   └── party_510002/
    │   │       │   │           │       └── roles.json
    │   │       │   │           ├── User_1003/
    │   │       │   │           │   └── party_510003/
    │   │       │   │           │       └── roles.json
    │   │       │   │           ├── User_12345/
    │   │       │   │           │   └── party_512345/
    │   │       │   │           │       └── roles.json
    │   │       │   │           └── User_1337/
    │   │       │   │               ├── party_500000/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500001/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500002/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500003/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500600/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500700/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500800/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500801/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500802/
    │   │       │   │               │   └── roles.json
    │   │       │   │               └── party_501337/
    │   │       │   │                   └── roles.json
    │   │       │   ├── EFormidling/
    │   │       │   │   └── EformidlingStatusCheckEventHandlerTests.cs
    │   │       │   ├── Extensions/
    │   │       │   │   ├── HttpClientExtensions.cs
    │   │       │   │   ├── HttpClientExtensionsTests.cs
    │   │       │   │   ├── InstanceExtensionsTest.cs
    │   │       │   │   └── WebHostBuilderExtensionsTests.cs
    │   │       │   ├── Features/
    │   │       │   │   └── Bootstrap/
    │   │       │   │       └── FormBootstrapServiceTests.cs
    │   │       │   ├── Helpers/
    │   │       │   │   ├── Patch/
    │   │       │   │   │   ├── PatchServiceTests.Test_Ok.verified.txt
    │   │       │   │   │   └── PatchServiceTests.cs
    │   │       │   │   ├── RequestHandling/
    │   │       │   │   │   └── DataRestrictionValidationTests.cs
    │   │       │   │   └── StartupHelperTests.cs
    │   │       │   ├── Mappers/
    │   │       │   │   └── SimpleInstanceMapperTests.cs
    │   │       │   ├── Maskinporten/
    │   │       │   │   └── MaskinportenClientIntegrationTest.cs
    │   │       │   ├── Middleware/
    │   │       │   │   ├── SecurityHeadersMiddlewareTests.cs
    │   │       │   │   ├── TelemetryEnrichingMiddlewareTests.Should_Always_Be_A_Root_Trace.verified.txt
    │   │       │   │   ├── TelemetryEnrichingMiddlewareTests.Should_Always_Be_A_Root_Trace_Unless_Pdf.verified.txt
    │   │       │   │   ├── TelemetryEnrichingMiddlewareTests.Should_Have_Root_AspNetCore_Trace_Org.verified.txt
    │   │       │   │   ├── TelemetryEnrichingMiddlewareTests.Should_Have_Root_AspNetCore_Trace_User.verified.txt
    │   │       │   │   └── TelemetryEnrichingMiddlewareTests.cs
    │   │       │   ├── MockHttpMessageHandler.cs
    │   │       │   ├── Mocks/
    │   │       │   │   ├── AppConfigurationCacheMock.cs
    │   │       │   │   ├── AppMetadataMock.cs
    │   │       │   │   ├── AppModelMock.cs
    │   │       │   │   ├── Authentication/
    │   │       │   │   │   ├── ConfigurationManagerStub.cs
    │   │       │   │   │   └── JwtCookiePostConfigureOptionsStub.cs
    │   │       │   │   ├── AuthorizationMock.cs
    │   │       │   │   ├── DataClientMock.cs
    │   │       │   │   ├── Event/
    │   │       │   │   │   ├── DummyFailureEventHandler.cs
    │   │       │   │   │   ├── DummySuccessEventHandler.cs
    │   │       │   │   │   ├── EventSecretCodeProviderStub.cs
    │   │       │   │   │   ├── EventsClientMock.cs
    │   │       │   │   │   └── InstanceEventClientMock.cs
    │   │       │   │   ├── InstanceClientMockSi.cs
    │   │       │   │   ├── InstanceLockerMock.cs
    │   │       │   │   ├── PepWithPDPAuthorizationMockSI.cs
    │   │       │   │   ├── ProcessClientMock.cs
    │   │       │   │   ├── RegisterClientMock.cs
    │   │       │   │   └── SignClientMock.cs
    │   │       │   ├── Models/
    │   │       │   │   ├── InstanceFileScanResultTests.cs
    │   │       │   │   └── XacmlResourceAttributes.cs
    │   │       │   ├── ModuleInitializer.cs
    │   │       │   ├── OpenApi/
    │   │       │   │   ├── OpenApiSpecChangeDetection.SaveCustomOpenApiSpec.verified.json
    │   │       │   │   ├── OpenApiSpecChangeDetection.SaveJsonSwagger.verified.json
    │   │       │   │   └── OpenApiSpecChangeDetection.cs
    │   │       │   ├── Process/
    │   │       │   │   └── ServiceTasks/
    │   │       │   │       ├── EFormidling/
    │   │       │   │       │   └── EFormidlingServiceTaskTests.cs
    │   │       │   │       └── Pdf/
    │   │       │   │           └── PdfServiceTaskTests.cs
    │   │       │   ├── Program.cs
    │   │       │   ├── PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt
    │   │       │   ├── PublicApiTests.cs
    │   │       │   ├── Telemetry/
    │   │       │   │   └── TelemetryConfigurationTests.cs
    │   │       │   ├── TestStubs/
    │   │       │   │   └── SwaggerIncludeXmlCommentsTestDouble.cs
    │   │       │   └── Utils/
    │   │       │       ├── JsonUtils.cs
    │   │       │       └── ReflectionUtils.cs
    │   │       ├── Altinn.App.Clients.Fiks.Tests/
    │   │       │   ├── Altinn.App.Clients.Fiks.Tests.csproj
    │   │       │   ├── AutoAdvancingFakeTime.cs
    │   │       │   ├── Extensions/
    │   │       │   │   ├── .Verify/
    │   │       │   │   │   ├── ArkivmeldingExtensionsTests.SerializeXmlBytes_SerializesCorrectly.verified.txt
    │   │       │   │   │   └── ArkivmeldingExtensionsTests.ToPayload_ReturnsCorrectPayload.verified.txt
    │   │       │   │   ├── ArkivmeldingExtensionsTests.cs
    │   │       │   │   ├── DataElementsExtensionsTests.cs
    │   │       │   │   ├── InstanceExtensionsTests.cs
    │   │       │   │   ├── ListExtensionsTests.cs
    │   │       │   │   ├── ServiceCollectionExtensionsTests.cs
    │   │       │   │   ├── StreamExtensionsTest.cs
    │   │       │   │   ├── StringExtensionsTests.cs
    │   │       │   │   └── TypeExtensionsTest.cs
    │   │       │   ├── FiksArkiv/
    │   │       │   │   ├── .Verify/
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerClassification_ReturnsExpectedValue_ForKnownAuthenticationTypes.Org.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerClassification_ReturnsExpectedValue_ForKnownAuthenticationTypes.ServiceOwner.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerClassification_ReturnsExpectedValue_ForKnownAuthenticationTypes.SystemUser.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerClassification_ReturnsExpectedValue_ForKnownAuthenticationTypes.User.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.1.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.10.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.11.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.2.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.3.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.4.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.5.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.6.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.7.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.8.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.9.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetRecipientParty_ReturnsExpectedValue.1.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetRecipientParty_ReturnsExpectedValue.2.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.1.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.2.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.3.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.4.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.5.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.6.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.7.verified.txt
    │   │       │   │   │   ├── FiksArkivDefaultPayloadGeneratorTest.GeneratePayload_GeneratesCorrectPayload.1.verified.txt
    │   │       │   │   │   ├── FiksArkivDefaultPayloadGeneratorTest.GeneratePayload_GeneratesCorrectPayload.2.verified.txt
    │   │       │   │   │   ├── FiksArkivDefaultPayloadGeneratorTest.GeneratePayload_GeneratesCorrectPayload.3.verified.txt
    │   │       │   │   │   └── FiksArkivDefaultPayloadGeneratorTest.GeneratePayload_GeneratesCorrectPayload.4.verified.txt
    │   │       │   │   ├── FiksArkivConfigResolverTest.cs
    │   │       │   │   ├── FiksArkivConfigValidationServiceTest.cs
    │   │       │   │   ├── FiksArkivDefaultPayloadGeneratorTest.cs
    │   │       │   │   ├── FiksArkivDefaultResponseHandlerTest.cs
    │   │       │   │   ├── FiksArkivHostTest.cs
    │   │       │   │   ├── FiksArkivInstanceClientTest.cs
    │   │       │   │   ├── FiksArkivServiceTaskTest.cs
    │   │       │   │   └── Models/
    │   │       │   │       ├── FiksArkivDocumentsTest.cs
    │   │       │   │       └── FiksArkivSettingsTest.cs
    │   │       │   ├── FiksIO/
    │   │       │   │   ├── .Verify/
    │   │       │   │   │   ├── FiksIOClientTest.InitialiseFiksIOClient_CallsCreateClientWithCorrectPayload_Custom.1.verified.txt
    │   │       │   │   │   ├── FiksIOClientTest.InitialiseFiksIOClient_CallsCreateClientWithCorrectPayload_Custom.2.verified.txt
    │   │       │   │   │   ├── FiksIOClientTest.InitialiseFiksIOClient_CallsCreateClientWithCorrectPayload_Custom.3.verified.txt
    │   │       │   │   │   ├── FiksIOClientTest.InitialiseFiksIOClient_CallsCreateClientWithCorrectPayload_Custom.verified.txt
    │   │       │   │   │   ├── FiksIOClientTest.InitialiseFiksIOClient_CallsCreateClientWithCorrectPayload_Default.AnythingElse.verified.txt
    │   │       │   │   │   └── FiksIOClientTest.InitialiseFiksIOClient_CallsCreateClientWithCorrectPayload_Default.Production.verified.txt
    │   │       │   │   ├── FiksIOClientTest.cs
    │   │       │   │   ├── FiksIOMaskinportenClientTest.cs
    │   │       │   │   └── Models/
    │   │       │   │       ├── FiksIOMessageResponderTest.cs
    │   │       │   │       └── FiksIOMessageResponseTest.cs
    │   │       │   ├── ModuleInitializer.cs
    │   │       │   ├── PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt
    │   │       │   ├── PublicApiTests.cs
    │   │       │   ├── TestFixture.cs
    │   │       │   ├── TestHelpers.cs
    │   │       │   └── XsdValidator.cs
    │   │       ├── Altinn.App.Core.Tests/
    │   │       │   ├── Altinn.App.Core.Tests.csproj
    │   │       │   ├── Configuration/
    │   │       │   │   └── GeneralSettingsTests.cs
    │   │       │   ├── Constants/
    │   │       │   │   └── AltinnEnvironmentsTest.cs
    │   │       │   ├── Data/
    │   │       │   │   └── SkjemaWithNamespace.cs
    │   │       │   ├── DataLists/
    │   │       │   │   ├── DataListsFactoryTest.cs
    │   │       │   │   ├── InstanceDataListsFactoryTest.cs
    │   │       │   │   ├── NullDataListProviderTest.cs
    │   │       │   │   └── NullInstanceDataListProviderTest.cs
    │   │       │   ├── Eformidling/
    │   │       │   │   └── Implementation/
    │   │       │   │       ├── DefaultEFormidlingServiceTests.cs
    │   │       │   │       └── EFormidlingConfigurationProviderTests.cs
    │   │       │   ├── Extensions/
    │   │       │   │   ├── ConfigurationBuilderExtensionsTest.cs
    │   │       │   │   ├── DictionaryExtensionsTests.cs
    │   │       │   │   ├── HttpClientExtensionTest.cs
    │   │       │   │   ├── InstanceEventExtensionsTests.cs
    │   │       │   │   ├── MultipartContentExtensionsTests.cs
    │   │       │   │   ├── NationalIdentityNumberExtensionsTest.cs
    │   │       │   │   ├── OrganisationNumberExtensionsTest.cs
    │   │       │   │   ├── ProcessStateExtensionTests.cs
    │   │       │   │   ├── ServiceCollectionTests.cs
    │   │       │   │   └── StringExtensionTests.cs
    │   │       │   ├── Features/
    │   │       │   │   ├── Action/
    │   │       │   │   │   ├── PaymentUserActionTests.cs
    │   │       │   │   │   ├── SigningUserActionTests.cs
    │   │       │   │   │   ├── TestData/
    │   │       │   │   │   │   ├── appmetadata.json
    │   │       │   │   │   │   ├── payment-task-process.bpmn
    │   │       │   │   │   │   ├── signature-missing-signee-userid.json
    │   │       │   │   │   │   ├── signature-missing-signee.json
    │   │       │   │   │   │   ├── signature-signee-userid-null.json
    │   │       │   │   │   │   ├── signature.json
    │   │       │   │   │   │   ├── signing-task-missing-correspondence.bpmn
    │   │       │   │   │   │   ├── signing-task-process-empty-datatypes-to-sign.bpmn
    │   │       │   │   │   │   ├── signing-task-process-missing-config.bpmn
    │   │       │   │   │   │   └── signing-task-process.bpmn
    │   │       │   │   │   ├── UniqueSignatureAuthorizerTests.cs
    │   │       │   │   │   └── UserActionServiceTests.cs
    │   │       │   │   ├── Auth/
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_ServiceOwner_Token_When_App_Metadata_Org_Differs_service_owner_mismatched_app_org.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=Org_Vwzj.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=Org_yeqB.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=SelfIdentifiedUser_ffv+.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=ServiceOwner_AmaP.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=ServiceOwner_IrMn.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=ServiceOwner_eWOI.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=SystemUser_8nGc.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=SystemUser_EvgU.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=SystemUser_Gxg0.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=SystemUser_U6aZ.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=Unknown_RecL.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=Unknown_qbyO.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=User_T1OG.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=User_csSy.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=User_fOrK.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=User_sUK3.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.cs
    │   │       │   │   │   ├── AuthenticationInfoTests.cs
    │   │       │   │   │   └── ScopesTests.cs
    │   │       │   │   ├── AuthenticationMethodTest.cs
    │   │       │   │   ├── Bootstrap/
    │   │       │   │   │   └── LayoutAnalysisServiceTests.cs
    │   │       │   │   ├── Correspondence/
    │   │       │   │   │   ├── Builder/
    │   │       │   │   │   │   ├── BuilderUtilsTests.cs
    │   │       │   │   │   │   ├── CorrespondenceBuilderTests.cs
    │   │       │   │   │   │   ├── CorrespondenceNotificationOverrideBuilderTests.cs
    │   │       │   │   │   │   └── CorrespondenceNotificationOverrideBuilderTests_Obsolete.cs
    │   │       │   │   │   ├── CorrespondenceClientMappingTests.cs
    │   │       │   │   │   ├── CorrespondenceClientTests.cs
    │   │       │   │   │   ├── Models/
    │   │       │   │   │   │   ├── CorrespondenceRequestTests.cs
    │   │       │   │   │   │   └── CorrespondenceResponseTests.cs
    │   │       │   │   │   └── TestHelpers.cs
    │   │       │   │   ├── DataProcessing/
    │   │       │   │   │   ├── GenericDataProcessorTests.cs
    │   │       │   │   │   └── NullInstantiationProcessTests.cs
    │   │       │   │   ├── ExternalApi/
    │   │       │   │   │   ├── ExternalApiFactoryTests.cs
    │   │       │   │   │   └── ExternalApiServiceTest.cs
    │   │       │   │   ├── FormDataReaderTests.cs
    │   │       │   │   ├── Maskinporten/
    │   │       │   │   │   ├── Delegates/
    │   │       │   │   │   │   └── MaskinportenDelegatingHandlerTest.cs
    │   │       │   │   │   ├── MaskinportenClientTest.cs
    │   │       │   │   │   ├── Models/
    │   │       │   │   │   │   ├── MaskinportenSettingsTest.cs
    │   │       │   │   │   │   └── MaskinportenTokenResponseTest.cs
    │   │       │   │   │   └── TestHelpers.cs
    │   │       │   │   ├── Notifications/
    │   │       │   │   │   ├── Cancellation/
    │   │       │   │   │   │   └── CancelOnProcessEndTests.cs
    │   │       │   │   │   ├── Email/
    │   │       │   │   │   │   ├── EmailNotificationClientTests.Order_VerifyHttpCall.verified.txt
    │   │       │   │   │   │   └── EmailNotificationClientTests.cs
    │   │       │   │   │   ├── NotificationServiceTests.cs
    │   │       │   │   │   ├── Order/
    │   │       │   │   │   │   ├── NotificationCancelClientTests.Cancel_VerifyHttpCall.verified.txt
    │   │       │   │   │   │   ├── NotificationClientTests.cs
    │   │       │   │   │   │   └── NotificationRecipientSerializationTests.cs
    │   │       │   │   │   ├── SecretProvider/
    │   │       │   │   │   │   ├── NotificationConditionCodeValidatorTests.cs
    │   │       │   │   │   │   ├── NotificationConditionSecretProviderTests.cs
    │   │       │   │   │   │   ├── NotificationConditionTokenGeneratorTests.GenerateToken_RecordsTelemetry.verified.txt
    │   │       │   │   │   │   └── NotificationConditionTokenGeneratorTests.cs
    │   │       │   │   │   ├── Sms/
    │   │       │   │   │   │   ├── SmsNotificationClientTests.Order_VerifyHttpCall.verified.txt
    │   │       │   │   │   │   └── SmsNotificationClientTests.cs
    │   │       │   │   │   └── Texts/
    │   │       │   │   │       └── NotificationTextsTests.cs
    │   │       │   │   ├── Options/
    │   │       │   │   │   ├── Altinn2Provider/
    │   │       │   │   │   │   ├── Altinn2MetadataApiClientHttpMessageHandlerMoq.cs
    │   │       │   │   │   │   ├── Altinn2OptionsCacheTests.cs
    │   │       │   │   │   │   └── Altinn2OptionsTests.cs
    │   │       │   │   │   ├── Altinn3LibraryProvider/
    │   │       │   │   │   │   ├── Altinn3LibraryCodeListClientMessageHandlerMock.cs
    │   │       │   │   │   │   ├── Altinn3LibraryCodeListClientTests.cs
    │   │       │   │   │   │   ├── Altinn3LibraryCodeListServiceTestData.cs
    │   │       │   │   │   │   └── Altinn3LibraryCodeListServiceTests.cs
    │   │       │   │   │   ├── AppOptionsFactoryTests.cs
    │   │       │   │   │   ├── InstanceAppOptionsFactoryTests.cs
    │   │       │   │   │   └── JoinedAppOptionsTests.cs
    │   │       │   │   ├── Payment/
    │   │       │   │   │   ├── AltinnPaymentConfigurationTests.cs
    │   │       │   │   │   ├── PaymentServiceTests.cs
    │   │       │   │   │   └── Providers/
    │   │       │   │   │       └── Nets/
    │   │       │   │   │           ├── HttpApiResultTests.cs
    │   │       │   │   │           ├── NetsMapperTests.cs
    │   │       │   │   │           └── NetsPaymentProcessorTests.cs
    │   │       │   │   ├── Signing/
    │   │       │   │   │   ├── Helpers/
    │   │       │   │   │   │   └── SigningNotificationHelpers.cs
    │   │       │   │   │   ├── SignDocumentManagerTests.cs
    │   │       │   │   │   ├── SigneeContextsManagerTests.cs
    │   │       │   │   │   ├── SigningCallToActionServiceTests.cs
    │   │       │   │   │   ├── SigningDelegationServiceTests.cs
    │   │       │   │   │   ├── SigningReceiptServiceTests.cs
    │   │       │   │   │   └── SigningServiceTests.cs
    │   │       │   │   ├── Telemetry/
    │   │       │   │   │   └── TelemetryDITests.cs
    │   │       │   │   └── Validators/
    │   │       │   │       ├── Default/
    │   │       │   │       │   ├── DataAnnotationValidatorTests.cs
    │   │       │   │       │   ├── DefaultTaskValidatorTests.cs
    │   │       │   │       │   ├── ExpressionValidatorTests.cs
    │   │       │   │       │   ├── LegacyIValidationFormDataTests.cs
    │   │       │   │       │   ├── SignatureHashValidatorTests.cs
    │   │       │   │       │   └── SigningTaskValidatorTests.cs
    │   │       │   │       ├── GenericValidatorTests.cs
    │   │       │   │       ├── LegacyValidationServiceTests/
    │   │       │   │       │   ├── ValidationServiceOldTests.cs
    │   │       │   │       │   └── ValidationServiceTests.cs
    │   │       │   │       ├── NullInstantiationValidatorTests.cs
    │   │       │   │       ├── ValidationServiceTests.GenericFormDataValidator_serviceModelIsString_CallsValidatorFunctionForIncremental.verified.txt
    │   │       │   │       ├── ValidationServiceTests.GenericFormDataValidator_serviceModelIsString_CallsValidatorFunctionForTask.verified.txt
    │   │       │   │       ├── ValidationServiceTests.ValidateIncrementalFormData_WithNoData_ShouldReturnNoIssues.verified.txt
    │   │       │   │       ├── ValidationServiceTests.ValidateInstanceAtTask_WithIgnoredValidators_ShouldRunOnlyNonIgnoredValidators.verified.txt
    │   │       │   │       ├── ValidationServiceTests.ValidateInstanceAtTask_WithNoData_ShouldReturnNoIssues.verified.txt
    │   │       │   │       ├── ValidationServiceTests.cs
    │   │       │   │       └── expression-validation-tests/
    │   │       │   │           ├── .editorconfig
    │   │       │   │           ├── backend/
    │   │       │   │           │   ├── hidden-field.json
    │   │       │   │           │   ├── hidden-page.json
    │   │       │   │           │   ├── nested-repeating-hidden-row.json
    │   │       │   │           │   ├── nested-repeating-hidden.json
    │   │       │   │           │   ├── repeating-hidden-row.json
    │   │       │   │           │   └── repeating-hidden.json
    │   │       │   │           └── shared/
    │   │       │   │               ├── component-lookup-hidden.json
    │   │       │   │               ├── many-errors-direct.json
    │   │       │   │               ├── many-errors.json
    │   │       │   │               ├── nested-repeating.json
    │   │       │   │               ├── override.json
    │   │       │   │               ├── repeating-direct.json
    │   │       │   │               ├── repeating.json
    │   │       │   │               ├── single-field-equals.json
    │   │       │   │               └── warning.json
    │   │       │   ├── Helpers/
    │   │       │   │   ├── AllowedContributorsHelperTests.cs
    │   │       │   │   ├── InstantiationHelperTests.cs
    │   │       │   │   ├── JsonHelperTests.cs
    │   │       │   │   ├── JsonSerializerIgnorePrefixTests.cs
    │   │       │   │   ├── LinqExpressionHelpersTests.cs
    │   │       │   │   ├── LogSanitizerTests.cs
    │   │       │   │   ├── MemoryAsStreamTests.cs
    │   │       │   │   ├── MimeTypeMapTests.cs
    │   │       │   │   ├── MultiDecisionHelper/
    │   │       │   │   │   ├── MultiDecisionHelperTests.CreateMultiDecisionRequest_generates_multidecisionrequest_with_all_actions_current_task_elemtnId.verified.txt
    │   │       │   │   │   ├── MultiDecisionHelperTests.CreateMultiDecisionRequest_generates_multidecisionrequest_with_all_actions_endevent.verified.txt
    │   │       │   │   │   ├── MultiDecisionHelperTests.CreateMultiDecisionRequest_generates_multidecisionrequest_with_all_actions_instanceId_is_GUID_only.verified.txt
    │   │       │   │   │   └── MultiDecisionHelperTests.cs
    │   │       │   │   ├── ObjectUtilsTests.cs
    │   │       │   │   ├── ObjectUtils_XmlSerializationTests.cs
    │   │       │   │   ├── PathHelperTests.cs
    │   │       │   │   ├── PlatformHttpResponseSnapshotExceptionTests.cs
    │   │       │   │   ├── ProcessHelperTests.cs
    │   │       │   │   ├── RemoveBomExtentionsTests.cs
    │   │       │   │   ├── SelfLinkHelperTests.cs
    │   │       │   │   ├── ShadowFieldsConverterTests.cs
    │   │       │   │   ├── TestData/
    │   │       │   │   │   ├── MultiDecisionHelper/
    │   │       │   │   │   │   ├── all-actions-allowed.json
    │   │       │   │   │   │   └── one-action-denied.json
    │   │       │   │   │   └── simple-gateway.bpmn
    │   │       │   │   ├── UrlHelperTests.cs
    │   │       │   │   ├── UserHelperTest.cs
    │   │       │   │   └── Utf8JsonReaderExtensionsTests.cs
    │   │       │   ├── Implementation/
    │   │       │   │   ├── AppResourcesSITests.cs
    │   │       │   │   ├── EventsClientTest.AddEvent_RegisterEventWithInstanceOwnerOrganisation_CloudEventInRequestContainOrganisationNumber.verified.txt
    │   │       │   │   ├── EventsClientTest.cs
    │   │       │   │   ├── InstanceClientTests.AddCompleteConfirmation_SuccessfulCallToStorage.verified.txt
    │   │       │   │   ├── InstanceClientTests.cs
    │   │       │   │   ├── NullPdfFormatterTests.cs
    │   │       │   │   ├── PersonClientTests.cs
    │   │       │   │   ├── PrefillSITest.cs
    │   │       │   │   ├── TestData/
    │   │       │   │   │   ├── AppDataModel/
    │   │       │   │   │   │   └── ModelWithShadowFields.cs
    │   │       │   │   │   ├── AppMetadata/
    │   │       │   │   │   │   ├── default.applicationmetadata.json
    │   │       │   │   │   │   ├── invalid.applicationmetadata.json
    │   │       │   │   │   │   └── no-on-entry.applicationmetadata.json
    │   │       │   │   │   ├── AppPolicy/
    │   │       │   │   │   │   └── policy.xml
    │   │       │   │   │   └── AppProcess/
    │   │       │   │   │       └── process.bpmn
    │   │       │   │   ├── TestResources/
    │   │       │   │   │   └── DummyModel.cs
    │   │       │   │   └── TextClientTest.cs
    │   │       │   ├── Infrastructure/
    │   │       │   │   └── Clients/
    │   │       │   │       ├── AccessManagement/
    │   │       │   │       │   ├── AccessManagementClientTests.DelegateRights_VerifyHttpCall.verified.txt
    │   │       │   │       │   ├── AccessManagementClientTests.RevokeRights_VerifyHttpCall.verified.txt
    │   │       │   │       │   └── AccessManagementClientTests.cs
    │   │       │   │       ├── Authorization/
    │   │       │   │       │   ├── AuthorizationClientTests.AuthorizeActions_returns_dictionary_with_one_action_denied.verified.txt
    │   │       │   │       │   ├── AuthorizationClientTests.cs
    │   │       │   │       │   └── TestData/
    │   │       │   │       │       └── one-action-denied.json
    │   │       │   │       ├── EventsSubscriptionClientTests.cs
    │   │       │   │       ├── KeyVault/
    │   │       │   │       │   └── SecretsLocalClientTests.cs
    │   │       │   │       ├── Profile/
    │   │       │   │       │   ├── ProfileClientTests.Returns_Test_Profile.verified.txt
    │   │       │   │       │   └── ProfileClientTests.cs
    │   │       │   │       ├── Register/
    │   │       │   │       │   └── AltinnPartyClientTest.cs
    │   │       │   │       └── Storage/
    │   │       │   │           ├── DataClientTests.InsertBinaryData_MethodProduceValidPlatformRequest_AltinnToken.verified.txt
    │   │       │   │           ├── DataClientTests.InsertBinaryData_MethodProduceValidPlatformRequest_CustomToken.verified.txt
    │   │       │   │           ├── DataClientTests.InsertBinaryData_MethodProduceValidPlatformRequest_DefaultAuth.verified.txt
    │   │       │   │           ├── DataClientTests.InsertBinaryData_MethodProduceValidPlatformRequest_UserToken.verified.txt
    │   │       │   │           ├── DataClientTests.cs
    │   │       │   │           ├── DataClientTestsXmlJson.cs
    │   │       │   │           ├── SignClientTests.cs
    │   │       │   │           └── TestData/
    │   │       │   │               └── ExampleModel.cs
    │   │       │   ├── Internal/
    │   │       │   │   ├── AccessManagement/
    │   │       │   │   │   ├── DelegationRequestTests.cs
    │   │       │   │   │   └── UrlHelperTests.cs
    │   │       │   │   ├── AltinnCdn/
    │   │       │   │   │   └── AltinnCdnClientTest.cs
    │   │       │   │   ├── App/
    │   │       │   │   │   ├── AppMetadataTest.GetApplicationMetadata_deserialize_serialize_unmapped_properties.verified.txt
    │   │       │   │   │   ├── AppMetadataTest.GetApplicationMetadata_desrializes_file_from_disk.verified.txt
    │   │       │   │   │   ├── AppMetadataTest.cs
    │   │       │   │   │   ├── FrontendFeaturesTest.cs
    │   │       │   │   │   └── TestData/
    │   │       │   │   │       ├── AppMetadata/
    │   │       │   │   │       │   ├── default.applicationmetadata.json
    │   │       │   │   │       │   ├── eformid.applicationmetadata.json
    │   │       │   │   │       │   ├── invalid-int.applicationmetadata.json
    │   │       │   │   │       │   ├── invalid.applicationmetadata.json
    │   │       │   │   │       │   ├── logo-org-source.applicationmetadata.json
    │   │       │   │   │       │   ├── onentry-legacy-selectoptions.applicationmetadata.json
    │   │       │   │   │       │   ├── onentry-new-selectoptions.applicationmetadata.json
    │   │       │   │   │       │   ├── onentry-prefer-new-selectoptions.applicationmetadata.json
    │   │       │   │   │       │   └── unmapped-properties.applicationmetadata.json
    │   │       │   │   │       ├── AppPolicy/
    │   │       │   │   │       │   └── policy.xml
    │   │       │   │   │       └── AppProcess/
    │   │       │   │   │           └── process.bpmn
    │   │       │   │   ├── Auth/
    │   │       │   │   │   ├── AuthenticationTokenResolverTest.cs
    │   │       │   │   │   ├── AuthorizationServiceTests.GetPartyList_returns_party_list_from_AuthorizationClient.verified.txt
    │   │       │   │   │   └── AuthorizationServiceTests.cs
    │   │       │   │   ├── Data/
    │   │       │   │   │   ├── DataElementAccessCheckerTest.cs
    │   │       │   │   │   ├── DataServiceTests.cs
    │   │       │   │   │   └── DataTypeComparerTest.cs
    │   │       │   │   ├── Events/
    │   │       │   │   │   ├── EventHandlerResolverTests.cs
    │   │       │   │   │   └── UnhandledEventHandlerTests.cs
    │   │       │   │   ├── InstanceLocking/
    │   │       │   │   │   ├── InstanceLockTests.CustomTtl_UsedInStorageApiCall.verified.txt
    │   │       │   │   │   ├── InstanceLockTests.EmptyJsonResponseBody_ThrowsPlatformHttpException.verified.txt
    │   │       │   │   │   ├── InstanceLockTests.InvalidInstanceId_ThrowsInvalidOperationException.verified.txt
    │   │       │   │   │   ├── InstanceLockTests.NullResponseBody_ThrowsPlatformHttpException.verified.txt
    │   │       │   │   │   ├── InstanceLockTests.StorageApiError_ThrowsCorrectPlatformHttpException_storageStatusCode=Conflict.verified.txt
    │   │       │   │   │   ├── InstanceLockTests.StorageApiError_ThrowsCorrectPlatformHttpException_storageStatusCode=InternalServerError.verified.txt
    │   │       │   │   │   ├── InstanceLockTests.StorageApiError_ThrowsCorrectPlatformHttpException_storageStatusCode=NotFound.verified.txt
    │   │       │   │   │   └── InstanceLockTests.cs
    │   │       │   │   ├── Linq/
    │   │       │   │   │   └── ExtensionsTest.cs
    │   │       │   │   ├── LocaltestValidationTests.cs
    │   │       │   │   ├── Pdf/
    │   │       │   │   │   ├── PdfServiceTests.GenerateAndStorePdf.verified.txt
    │   │       │   │   │   ├── PdfServiceTests.GenerateAndStorePdf_WithSubformParameters_ShouldCallPdfServiceWithSubformUrl.verified.txt
    │   │       │   │   │   └── PdfServiceTests.cs
    │   │       │   │   ├── Process/
    │   │       │   │   │   ├── Authorization/
    │   │       │   │   │   │   ├── TestData/
    │   │       │   │   │   │   │   └── UserActionAuthorizerStub.cs
    │   │       │   │   │   │   └── UserActionAuthorizerServiceCollectionExtensionTests.cs
    │   │       │   │   │   ├── Elements/
    │   │       │   │   │   │   ├── AltinnExtensionProperties/
    │   │       │   │   │   │   │   └── AltinnEFormidlingConfigurationTests.cs
    │   │       │   │   │   │   └── AppProcessStateTests.cs
    │   │       │   │   │   ├── EventHandlers/
    │   │       │   │   │   │   └── ProcessTask/
    │   │       │   │   │   │       ├── AbandonTaskEventHandlerTests.cs
    │   │       │   │   │   │       ├── EndTaskEventHandlerTests.cs
    │   │       │   │   │   │       └── StartTaskEventHandlerTests.cs
    │   │       │   │   │   ├── ExpressionsExclusiveGatewayTests.cs
    │   │       │   │   │   ├── ProcessEngineAuthorizerTests.cs
    │   │       │   │   │   ├── ProcessEngineTest.StartProcess_starts_process_and_moves_to_first_task.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.StartProcess_starts_process_and_moves_to_first_task_SelfIdentifiedUser.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.StartProcess_starts_process_and_moves_to_first_task_ServiceOwner.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.StartProcess_starts_process_and_moves_to_first_task_SystemUser.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.StartProcess_starts_process_and_moves_to_first_task_User.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.Telemetry.IProcessEnd_not_registered.json.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.Telemetry.IProcessEnd_registered.json.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.cs
    │   │       │   │   │   ├── ProcessEventHandlingTests.cs
    │   │       │   │   │   ├── ProcessNavigatorTests.cs
    │   │       │   │   │   ├── ProcessReaderExtensionsTests.cs
    │   │       │   │   │   ├── ProcessReaderTests.IsStartEvent_returns_true_when_element_is_StartEvent.verified.txt
    │   │       │   │   │   ├── ProcessReaderTests.cs
    │   │       │   │   │   ├── ProcessTasks/
    │   │       │   │   │   │   ├── Common/
    │   │       │   │   │   │   │   ├── ProcessTaskDataLockerTests.cs
    │   │       │   │   │   │   │   └── ProcessTaskFinalizerTests.cs
    │   │       │   │   │   │   ├── PaymentProcessTaskTests.cs
    │   │       │   │   │   │   └── SigningProcessTaskTests.cs
    │   │       │   │   │   ├── ServiceTasks/
    │   │       │   │   │   │   ├── EFormidlingServiceTaskTests.cs
    │   │       │   │   │   │   ├── Legacy/
    │   │       │   │   │   │   │   ├── EformidlingServiceTaskLegacyTests.cs
    │   │       │   │   │   │   │   ├── PdfServiceTaskLegacyTests.cs
    │   │       │   │   │   │   │   └── TestData/
    │   │       │   │   │   │   │       └── DummyDataType.cs
    │   │       │   │   │   │   ├── PdfServiceTaskTests.cs
    │   │       │   │   │   │   └── SubformPdfServiceTaskTests.cs
    │   │       │   │   │   ├── StubGatewayFilters/
    │   │       │   │   │   │   └── DataValuesFilter.cs
    │   │       │   │   │   ├── TestData/
    │   │       │   │   │   │   ├── DummyModel.cs
    │   │       │   │   │   │   ├── ProcessEngineTest/
    │   │       │   │   │   │   │   └── config/
    │   │       │   │   │   │   │       └── process/
    │   │       │   │   │   │   │           └── process.bpmn
    │   │       │   │   │   │   ├── not-bpmn.bpmn
    │   │       │   │   │   │   ├── simple-gateway-default.bpmn
    │   │       │   │   │   │   ├── simple-gateway-signature-config.bpmn
    │   │       │   │   │   │   ├── simple-gateway-with-join-gateway.bpmn
    │   │       │   │   │   │   ├── simple-gateway.bpmn
    │   │       │   │   │   │   ├── simple-linear-both.bpmn
    │   │       │   │   │   │   ├── simple-linear-new.bpmn
    │   │       │   │   │   │   ├── simple-linear.bpmn
    │   │       │   │   │   │   ├── simple-no-end.bpmn
    │   │       │   │   │   │   └── with-double-sign.bpmn
    │   │       │   │   │   └── TestUtils/
    │   │       │   │   │       └── ProcessTestUtils.cs
    │   │       │   │   └── Texts/
    │   │       │   │       ├── TranslationServiceInstanceTests.cs
    │   │       │   │       └── TranslationServiceTests.cs
    │   │       │   ├── LayoutExpressions/
    │   │       │   │   ├── CommonTests/
    │   │       │   │   │   ├── .editorconfig
    │   │       │   │   │   ├── ContextListRoot.cs
    │   │       │   │   │   ├── ExpressionTestCaseRoot.cs
    │   │       │   │   │   ├── TestBackendExclusiveFunctions.cs
    │   │       │   │   │   ├── TestContextList.cs
    │   │       │   │   │   ├── TestFunctions.cs
    │   │       │   │   │   ├── TestInvalid.cs
    │   │       │   │   │   ├── exclusive-tests/
    │   │       │   │   │   │   └── functions/
    │   │       │   │   │   │       └── gatewayAction/
    │   │       │   │   │   │           ├── no-action-defined-is-null.json
    │   │       │   │   │   │           ├── simple-lookup-equals.json
    │   │       │   │   │   │           └── simple-lookup.json
    │   │       │   │   │   ├── shared-tests/
    │   │       │   │   │   │   ├── README.md
    │   │       │   │   │   │   ├── context-lists/
    │   │       │   │   │   │   │   ├── groups/
    │   │       │   │   │   │   │   │   ├── noData.json
    │   │       │   │   │   │   │   │   ├── oneRow.json
    │   │       │   │   │   │   │   │   ├── rows-before-after.json
    │   │       │   │   │   │   │   │   └── twoRows.json
    │   │       │   │   │   │   │   ├── nonRepeatingGroups/
    │   │       │   │   │   │   │   │   ├── accordion-in-group.json
    │   │       │   │   │   │   │   │   ├── accordion.json
    │   │       │   │   │   │   │   │   ├── cards-in-group.json
    │   │       │   │   │   │   │   │   ├── cards.json
    │   │       │   │   │   │   │   │   ├── grid-in-group.json
    │   │       │   │   │   │   │   │   ├── grid.json
    │   │       │   │   │   │   │   │   ├── simple.json
    │   │       │   │   │   │   │   │   ├── tabs-in-group.json
    │   │       │   │   │   │   │   │   └── tabs.json
    │   │       │   │   │   │   │   ├── recursiveGroups/
    │   │       │   │   │   │   │   │   ├── recursiveNoData.json
    │   │       │   │   │   │   │   │   ├── recursiveOneRow.json
    │   │       │   │   │   │   │   │   ├── recursiveTwoRowsInner.json
    │   │       │   │   │   │   │   │   └── recursiveTwoRowsOuter.json
    │   │       │   │   │   │   │   └── simple/
    │   │       │   │   │   │   │       ├── simple.json
    │   │       │   │   │   │   │       └── twoPages.json
    │   │       │   │   │   │   ├── functions/
    │   │       │   │   │   │   │   ├── and/
    │   │       │   │   │   │   │   │   ├── all-true.json
    │   │       │   │   │   │   │   │   ├── allows-0.json
    │   │       │   │   │   │   │   │   ├── allows-1.json
    │   │       │   │   │   │   │   │   ├── allows-stringy-0.json
    │   │       │   │   │   │   │   │   ├── allows-stringy-1.json
    │   │       │   │   │   │   │   │   ├── allows-stringy-false.json
    │   │       │   │   │   │   │   │   ├── allows-stringy-true.json
    │   │       │   │   │   │   │   │   ├── casts-to-boolean.json
    │   │       │   │   │   │   │   │   ├── casts-to-boolean2.json
    │   │       │   │   │   │   │   │   ├── disallows-2.json
    │   │       │   │   │   │   │   │   ├── disallows-empty-strings.json
    │   │       │   │   │   │   │   │   ├── disallows-other-strings.json
    │   │       │   │   │   │   │   │   ├── empty-and.json
    │   │       │   │   │   │   │   │   ├── last-false.json
    │   │       │   │   │   │   │   │   ├── null-is-false.json
    │   │       │   │   │   │   │   │   ├── single-input-false.json
    │   │       │   │   │   │   │   │   └── single-input-true.json
    │   │       │   │   │   │   │   ├── argv/
    │   │       │   │   │   │   │   │   ├── arg-can-be-null.json
    │   │       │   │   │   │   │   │   ├── error-no-args.json
    │   │       │   │   │   │   │   │   ├── error-no-such-arg.json
    │   │       │   │   │   │   │   │   ├── simple-0.json
    │   │       │   │   │   │   │   │   └── simple-1.json
    │   │       │   │   │   │   │   ├── commaContains/
    │   │       │   │   │   │   │   │   ├── empty-string.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── null2.json
    │   │       │   │   │   │   │   │   ├── should-include-word-in-string.json
    │   │       │   │   │   │   │   │   ├── should-not-include-word-in-string.json
    │   │       │   │   │   │   │   │   └── string-list-include-number.json
    │   │       │   │   │   │   │   ├── compare-equals/
    │   │       │   │   │   │   │   │   ├── equals-strings.json
    │   │       │   │   │   │   │   │   ├── error-too-few-args.json
    │   │       │   │   │   │   │   │   └── not-equals-strings.json
    │   │       │   │   │   │   │   ├── compare-error/
    │   │       │   │   │   │   │   │   ├── error-case-sensitive-not.json
    │   │       │   │   │   │   │   │   ├── error-expr-as-not.json
    │   │       │   │   │   │   │   │   ├── error-expr-as-operator-with-not.json
    │   │       │   │   │   │   │   │   ├── error-expr-as-operator.json
    │   │       │   │   │   │   │   │   ├── error-not-not.json
    │   │       │   │   │   │   │   │   ├── error-wrong-operator.json
    │   │       │   │   │   │   │   │   └── notEquals-not-implemented.json
    │   │       │   │   │   │   │   ├── compare-greaterThan/
    │   │       │   │   │   │   │   │   ├── greaterThan-simple.json
    │   │       │   │   │   │   │   │   └── greaterThan-simple2.json
    │   │       │   │   │   │   │   ├── compare-isAfter/
    │   │       │   │   │   │   │   │   ├── date-leap-year.json
    │   │       │   │   │   │   │   │   └── date-with-time.json
    │   │       │   │   │   │   │   ├── compare-isAfterEq/
    │   │       │   │   │   │   │   │   └── isAfterEq.json
    │   │       │   │   │   │   │   ├── compare-isBefore/
    │   │       │   │   │   │   │   │   ├── date-empty-string-and-null.json
    │   │       │   │   │   │   │   │   ├── date-empty-string.json
    │   │       │   │   │   │   │   │   ├── date-simple.json
    │   │       │   │   │   │   │   │   ├── error-date-invalid.json
    │   │       │   │   │   │   │   │   └── error-date-invalid2.json
    │   │       │   │   │   │   │   ├── compare-isBeforeEq/
    │   │       │   │   │   │   │   │   └── isBeforeEq.json
    │   │       │   │   │   │   │   ├── compare-isSameDay/
    │   │       │   │   │   │   │   │   ├── errors-different-timesone.json
    │   │       │   │   │   │   │   │   ├── errors-with-number.json
    │   │       │   │   │   │   │   │   ├── errors-with-only-year.json
    │   │       │   │   │   │   │   │   ├── not-sameDay-year.json
    │   │       │   │   │   │   │   │   └── start-and-end-of-day-is-same.json
    │   │       │   │   │   │   │   ├── component/
    │   │       │   │   │   │   │   │   ├── across-pages-hidden.json
    │   │       │   │   │   │   │   │   ├── across-pages.json
    │   │       │   │   │   │   │   │   ├── distant-across-page.json
    │   │       │   │   │   │   │   │   ├── distant.json
    │   │       │   │   │   │   │   │   ├── find-first-row.json
    │   │       │   │   │   │   │   │   ├── find-grouped-sibling.json
    │   │       │   │   │   │   │   │   ├── find-hidden-sibling-in-other-repeating-group.json
    │   │       │   │   │   │   │   │   ├── find-hidden-unrelated-sibling-in-other-repeating-group.json
    │   │       │   │   │   │   │   │   ├── find-sibling-in-other-repeating-group.json
    │   │       │   │   │   │   │   │   ├── find-unrelated-sibling-in-other-repeating-group.json
    │   │       │   │   │   │   │   │   ├── hidden-in-group-other-row.json
    │   │       │   │   │   │   │   │   ├── hidden-in-group.json
    │   │       │   │   │   │   │   │   ├── hidden-in-non-repeating-group.json
    │   │       │   │   │   │   │   │   ├── hide-group-component.json
    │   │       │   │   │   │   │   │   ├── in-group-group-hidden.json
    │   │       │   │   │   │   │   │   ├── in-group-page-hidden.json
    │   │       │   │   │   │   │   │   ├── in-group-with-hidden.json
    │   │       │   │   │   │   │   │   ├── in-group.json
    │   │       │   │   │   │   │   │   ├── in-hidden-row.json
    │   │       │   │   │   │   │   │   ├── in-nested-group.json
    │   │       │   │   │   │   │   │   ├── in-nested-group2.json
    │   │       │   │   │   │   │   │   ├── non-repeating-group-in-repeating-group.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-equals.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-for-hidden-component-is-null.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-for-hidden-dynamic-component-is-null.json
    │   │       │   │   │   │   │   │   ├── simple-lookup.json
    │   │       │   │   │   │   │   │   ├── visible-in-non-repeating-group.json
    │   │       │   │   │   │   │   │   └── with-component-index.json
    │   │       │   │   │   │   │   ├── concat/
    │   │       │   │   │   │   │   │   ├── boolean-are-empty-strings.json
    │   │       │   │   │   │   │   │   ├── casts-numbers.json
    │   │       │   │   │   │   │   │   ├── empty-string.json
    │   │       │   │   │   │   │   │   ├── inside-lookup.json
    │   │       │   │   │   │   │   │   ├── nulls-are-empty-strings.json
    │   │       │   │   │   │   │   │   ├── one-string.json
    │   │       │   │   │   │   │   │   └── simple-lookup.json
    │   │       │   │   │   │   │   ├── contains/
    │   │       │   │   │   │   │   │   ├── case-sensitivity.json
    │   │       │   │   │   │   │   │   ├── empty-string.json
    │   │       │   │   │   │   │   │   ├── exact-match.json
    │   │       │   │   │   │   │   │   ├── not-match.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── null2.json
    │   │       │   │   │   │   │   │   ├── null3.json
    │   │       │   │   │   │   │   │   ├── null4.json
    │   │       │   │   │   │   │   │   └── partial-match.json
    │   │       │   │   │   │   │   ├── countDataElements/
    │   │       │   │   │   │   │   │   ├── non-existing.json
    │   │       │   │   │   │   │   │   ├── single.json
    │   │       │   │   │   │   │   │   └── subform.json
    │   │       │   │   │   │   │   ├── dataModel/
    │   │       │   │   │   │   │   │   ├── array-is-null.json
    │   │       │   │   │   │   │   │   ├── direct-reference-in-group.json
    │   │       │   │   │   │   │   │   ├── direct-reference-in-nested-group.json
    │   │       │   │   │   │   │   │   ├── direct-reference-in-nested-group2.json
    │   │       │   │   │   │   │   │   ├── direct-reference-in-nested-group3.json
    │   │       │   │   │   │   │   │   ├── direct-reference-in-nested-group4.json
    │   │       │   │   │   │   │   │   ├── in-group.json
    │   │       │   │   │   │   │   │   ├── in-nested-group.json
    │   │       │   │   │   │   │   │   ├── null-is-null.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── object-is-null.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-equals.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-is-null.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-is-null2.json
    │   │       │   │   │   │   │   │   ├── simple-lookup.json
    │   │       │   │   │   │   │   │   ├── with-indexes-without-layout.json
    │   │       │   │   │   │   │   │   └── with-indexes.json
    │   │       │   │   │   │   │   ├── dataModelMultiple/
    │   │       │   │   │   │   │   │   ├── component-lookup-non-default-model.json
    │   │       │   │   │   │   │   │   ├── component-lookup-non-existing-model.json
    │   │       │   │   │   │   │   │   ├── dataModel-non-default-model.json
    │   │       │   │   │   │   │   │   ├── dataModel-non-existing-model.json
    │   │       │   │   │   │   │   │   └── dataModel-type-as-expr.json
    │   │       │   │   │   │   │   ├── divide/
    │   │       │   │   │   │   │   │   └── divide.json
    │   │       │   │   │   │   │   ├── endsWith/
    │   │       │   │   │   │   │   │   ├── case-sensitivity.json
    │   │       │   │   │   │   │   │   ├── empty-string.json
    │   │       │   │   │   │   │   │   ├── ends-with-null.json
    │   │       │   │   │   │   │   │   ├── ends-with-number.json
    │   │       │   │   │   │   │   │   ├── ends-with.json
    │   │       │   │   │   │   │   │   ├── exact-match.json
    │   │       │   │   │   │   │   │   ├── not-ends-with.json
    │   │       │   │   │   │   │   │   └── number-ends-with-number.json
    │   │       │   │   │   │   │   ├── equals/
    │   │       │   │   │   │   │   │   ├── diff-types-bool-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null-true.json
    │   │       │   │   │   │   │   │   ├── false-case-insensitive.json
    │   │       │   │   │   │   │   │   ├── false-case-insensitive2.json
    │   │       │   │   │   │   │   │   ├── null-case-insensitive.json
    │   │       │   │   │   │   │   │   ├── same-types-bool-false.json
    │   │       │   │   │   │   │   │   ├── same-types-bool-true.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false2.json
    │   │       │   │   │   │   │   │   ├── same-types-float-true.json
    │   │       │   │   │   │   │   │   ├── same-types-int-false.json
    │   │       │   │   │   │   │   │   ├── same-types-int-true.json
    │   │       │   │   │   │   │   │   ├── same-types-null.json
    │   │       │   │   │   │   │   │   ├── same-types-string-false.json
    │   │       │   │   │   │   │   │   ├── same-types-string-true.json
    │   │       │   │   │   │   │   │   ├── same-types-string-true2.json
    │   │       │   │   │   │   │   │   ├── strings-case-sensitive.json
    │   │       │   │   │   │   │   │   ├── too-few-args.json
    │   │       │   │   │   │   │   │   └── too-many-args.json
    │   │       │   │   │   │   │   ├── formatDate/
    │   │       │   │   │   │   │   │   ├── error-parseFalse.json
    │   │       │   │   │   │   │   │   ├── error-parseNumber.json
    │   │       │   │   │   │   │   │   ├── error-parseTrue.json
    │   │       │   │   │   │   │   │   ├── formats-date-english.json
    │   │       │   │   │   │   │   │   ├── formats-date-english2.json
    │   │       │   │   │   │   │   │   ├── formats-date-in-format-specified.json
    │   │       │   │   │   │   │   │   ├── formats-date-in-format-specified2.json
    │   │       │   │   │   │   │   │   ├── formats-date-time.json
    │   │       │   │   │   │   │   │   ├── formats-date-with-offset.json
    │   │       │   │   │   │   │   │   ├── formats-date.json
    │   │       │   │   │   │   │   │   ├── formats-time-in-format-specified.json
    │   │       │   │   │   │   │   │   ├── parse-date-2020-is-a-leap-year.json
    │   │       │   │   │   │   │   │   ├── parse-date-2021-is-not-a-leap-year.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-29-days-in-february-normal-.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-30-days-in-february-leap-.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-31-days-in-april.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-31-days-in-june.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-31-days-in-november.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-31-days-in-september.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-august.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-december.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-january.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-july.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-march.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-may.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-october.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-invalid-month.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-28-days-in-february-normal-.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-29-days-in-february-leap-.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-30-days-in-april.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-30-days-in-june.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-30-days-in-november.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-30-days-in-september.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-august.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-december.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-january.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-july.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-march.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-may.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-october.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string.json
    │   │       │   │   │   │   │   │   ├── parse-date-an-invalid-date-string.json
    │   │       │   │   │   │   │   │   ├── parse-date-invalid-month-day-combination.json
    │   │       │   │   │   │   │   │   ├── parse-date-invalid-month.json
    │   │       │   │   │   │   │   │   ├── parse-date-invalid-non-ascii-a-bengali-4-.json
    │   │       │   │   │   │   │   │   ├── parse-date-iso8601-non-rfc3339-week-number-implicit-day-of-week-2023-01-02-.json
    │   │       │   │   │   │   │   │   ├── parse-date-iso8601-non-rfc3339-week-number-rollover-to-next-year-2023-01-01-.json
    │   │       │   │   │   │   │   │   ├── parse-date-iso8601-non-rfc3339-week-number-with-day-of-week-2023-03-28-.json
    │   │       │   │   │   │   │   │   ├── parse-date-iso8601-non-rfc3339-yyyymmdd-without-dashes-2023-03-28-.json
    │   │       │   │   │   │   │   │   ├── parse-date-non-padded-day-dates-are-not-valid.json
    │   │       │   │   │   │   │   │   ├── parse-date-non-padded-month-dates-are-not-valid.json
    │   │       │   │   │   │   │   │   ├── parse-date-only-rfc3339-not-all-of-iso-8601-are-valid.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-a-valid-date-time-string-with-minus-offset.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-a-valid-date-time-string-with-plus-offset.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-a-valid-date-time-string-without-second-fraction.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-a-valid-date-time-string.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-closing-z-after-time-zone-offset.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-date-time-past-leap-second-utc.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-date-time-string.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-date-time-with-a-leap-second-utc.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-date-time-with-a-leap-second-with-minus-offset.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-date-time-with-leap-second-on-a-wrong-hour-utc.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-date-time-with-leap-second-on-a-wrong-minute-utc.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-day-in-date-time-string.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-offset-in-date-time-string.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-case-insensitive-t-and-z.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-invalid-non-ascii-a-bengali-4-in-date-portion.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-invalid-non-ascii-a-bengali-4-in-time-portion.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-invalid-non-padded-day-dates.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-invalid-non-padded-month-dates.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-only-rfc3339-not-all-of-iso-8601-are-valid.json
    │   │       │   │   │   │   │   │   ├── parseNull-returnsNull.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-a-en.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-a-nb.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-a-nn.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-a-noLanguage.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-d.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-dd.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-h.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-hh.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-m.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-mm.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-s.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-ss.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-u.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-uu.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-uuu.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-uuuu.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-y.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-yy.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-yyy.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-yyyy.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-e-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-e-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-e-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ee-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ee-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ee-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eee-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eee-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eee-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eeee-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eeee-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eeee-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eeeee-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eeeee-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eeeee-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-g-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-g-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-g-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-gg-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-gg-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-gg-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ggg-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ggg-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ggg-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-gggg-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-gggg-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-gggg-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ggggg-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ggggg-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ggggg-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-h.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-hh.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-m.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mm.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mmm-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mmm-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mmm-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mmmm-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mmmm-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mmmm-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-s.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ss.json
    │   │       │   │   │   │   │   │   └── valid-uppercase-sss.json
    │   │       │   │   │   │   │   ├── frontendSettings/
    │   │       │   │   │   │   │   │   ├── lookup-case-sensitive.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-equals.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-is-null.json
    │   │       │   │   │   │   │   │   └── simple-lookup.json
    │   │       │   │   │   │   │   ├── greaterThan/
    │   │       │   │   │   │   │   │   ├── diff-types-bool-float.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-int.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false3.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null2.json
    │   │       │   │   │   │   │   │   ├── doble-dots-fail-negative.json
    │   │       │   │   │   │   │   │   ├── doble-dots-fail.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-1.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-coefficient.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-exponent.json
    │   │       │   │   │   │   │   │   ├── negative-string-float.json
    │   │       │   │   │   │   │   │   ├── negative-string-float2.json
    │   │       │   │   │   │   │   │   ├── negative-string.json
    │   │       │   │   │   │   │   │   ├── negative-string2.json
    │   │       │   │   │   │   │   │   ├── no-decimals-fail-negative.json
    │   │       │   │   │   │   │   │   ├── no-decimals-fail.json
    │   │       │   │   │   │   │   │   ├── same-types-bool.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false.json
    │   │       │   │   │   │   │   │   ├── same-types-float-true.json
    │   │       │   │   │   │   │   │   ├── same-types-int-false.json
    │   │       │   │   │   │   │   │   ├── same-types-int-true.json
    │   │       │   │   │   │   │   │   ├── same-types-null.json
    │   │       │   │   │   │   │   │   ├── same-types-string-false.json
    │   │       │   │   │   │   │   │   ├── same-types-string-true.json
    │   │       │   │   │   │   │   │   ├── sci-notation-negative-exponents.json
    │   │       │   │   │   │   │   │   ├── sci-notation-numbers.json
    │   │       │   │   │   │   │   │   ├── sci-notation-with-regular.json
    │   │       │   │   │   │   │   │   ├── sci-string-basic.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-exponent.json
    │   │       │   │   │   │   │   │   ├── sci-string-no-whole.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-exponent.json
    │   │       │   │   │   │   │   │   └── sci-string-zero.json
    │   │       │   │   │   │   │   ├── greaterThanEq/
    │   │       │   │   │   │   │   │   ├── diff-types-bool-float.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-int.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false3.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-1.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-coefficient.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-exponent.json
    │   │       │   │   │   │   │   │   ├── same-types-bool.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false.json
    │   │       │   │   │   │   │   │   ├── same-types-float-true.json
    │   │       │   │   │   │   │   │   ├── same-types-int-false.json
    │   │       │   │   │   │   │   │   ├── same-types-int-true.json
    │   │       │   │   │   │   │   │   ├── same-types-null.json
    │   │       │   │   │   │   │   │   ├── same-types-string-false.json
    │   │       │   │   │   │   │   │   ├── same-types-string-true.json
    │   │       │   │   │   │   │   │   ├── sci-notation-negative-exponents.json
    │   │       │   │   │   │   │   │   ├── sci-notation-numbers.json
    │   │       │   │   │   │   │   │   ├── sci-notation-with-regular.json
    │   │       │   │   │   │   │   │   ├── sci-string-basic.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-exponent.json
    │   │       │   │   │   │   │   │   ├── sci-string-no-whole.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-exponent.json
    │   │       │   │   │   │   │   │   └── sci-string-zero.json
    │   │       │   │   │   │   │   ├── if/
    │   │       │   │   │   │   │   │   ├── else-otherwise.json
    │   │       │   │   │   │   │   │   ├── else-otherwise2.json
    │   │       │   │   │   │   │   │   ├── fail-5.json
    │   │       │   │   │   │   │   │   ├── fail-else-as-expr.json
    │   │       │   │   │   │   │   │   ├── fail-empty-string.json
    │   │       │   │   │   │   │   │   ├── fail-string.json
    │   │       │   │   │   │   │   │   ├── fail-without-else.json
    │   │       │   │   │   │   │   │   ├── fail-without-else2.json
    │   │       │   │   │   │   │   │   ├── falsy-0-1.json
    │   │       │   │   │   │   │   │   ├── falsy-0-2.json
    │   │       │   │   │   │   │   │   ├── never-3-arguments.json
    │   │       │   │   │   │   │   │   ├── never-5-arguments.json
    │   │       │   │   │   │   │   │   ├── null-otherwise.json
    │   │       │   │   │   │   │   │   ├── simple.json
    │   │       │   │   │   │   │   │   ├── truthy-1-1.json
    │   │       │   │   │   │   │   │   └── truthy-1-2.json
    │   │       │   │   │   │   │   ├── instanceContext/
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── only-dict.json
    │   │       │   │   │   │   │   │   ├── partyTypeOrg.json
    │   │       │   │   │   │   │   │   ├── partyTypePerson.json
    │   │       │   │   │   │   │   │   ├── partyTypeSelfIdentifiedEmail.json
    │   │       │   │   │   │   │   │   ├── partyTypeSelfIdentifiedUsername.json
    │   │       │   │   │   │   │   │   ├── partyTypeUnknown.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-equals.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-is-null.json
    │   │       │   │   │   │   │   │   └── simple-lookup.json
    │   │       │   │   │   │   │   ├── language/
    │   │       │   │   │   │   │   │   ├── should-return-nb-if-not-set.json
    │   │       │   │   │   │   │   │   └── should-return-profile-settings-preference.json
    │   │       │   │   │   │   │   ├── lessThan/
    │   │       │   │   │   │   │   │   ├── diff-types-bool-float.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-int.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false3.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-1.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-coefficient.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-exponent.json
    │   │       │   │   │   │   │   │   ├── same-types-bool.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false.json
    │   │       │   │   │   │   │   │   ├── same-types-float-true.json
    │   │       │   │   │   │   │   │   ├── same-types-int-false.json
    │   │       │   │   │   │   │   │   ├── same-types-int-true.json
    │   │       │   │   │   │   │   │   ├── same-types-null.json
    │   │       │   │   │   │   │   │   ├── same-types-string-false.json
    │   │       │   │   │   │   │   │   ├── same-types-string-true.json
    │   │       │   │   │   │   │   │   ├── sci-notation-negative-exponents.json
    │   │       │   │   │   │   │   │   ├── sci-notation-numbers.json
    │   │       │   │   │   │   │   │   ├── sci-notation-with-regular.json
    │   │       │   │   │   │   │   │   ├── sci-string-basic.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-exponent.json
    │   │       │   │   │   │   │   │   ├── sci-string-no-whole.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-exponent.json
    │   │       │   │   │   │   │   │   └── sci-string-zero.json
    │   │       │   │   │   │   │   ├── lessThanEq/
    │   │       │   │   │   │   │   │   ├── diff-types-bool-float.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-int.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false3.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-1.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-coefficient.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-exponent.json
    │   │       │   │   │   │   │   │   ├── same-types-bool.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false.json
    │   │       │   │   │   │   │   │   ├── same-types-float-true.json
    │   │       │   │   │   │   │   │   ├── same-types-int-false.json
    │   │       │   │   │   │   │   │   ├── same-types-int-true.json
    │   │       │   │   │   │   │   │   ├── same-types-null.json
    │   │       │   │   │   │   │   │   ├── same-types-string-false.json
    │   │       │   │   │   │   │   │   ├── same-types-string-true.json
    │   │       │   │   │   │   │   │   ├── sci-notation-negative-exponents.json
    │   │       │   │   │   │   │   │   ├── sci-notation-numbers.json
    │   │       │   │   │   │   │   │   ├── sci-notation-with-regular.json
    │   │       │   │   │   │   │   │   ├── sci-string-basic.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-exponent.json
    │   │       │   │   │   │   │   │   ├── sci-string-no-whole.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-exponent.json
    │   │       │   │   │   │   │   │   └── sci-string-zero.json
    │   │       │   │   │   │   │   ├── lowerCase/
    │   │       │   │   │   │   │   │   ├── lowercase-number-should-return-string.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── should-lowercase-string.json
    │   │       │   │   │   │   │   │   ├── should-lowercase-whole-string.json
    │   │       │   │   │   │   │   │   └── should-lowercase-whole-word.json
    │   │       │   │   │   │   │   ├── lowerCaseFirst/
    │   │       │   │   │   │   │   │   ├── number.json
    │   │       │   │   │   │   │   │   ├── simple1.json
    │   │       │   │   │   │   │   │   └── simple2.json
    │   │       │   │   │   │   │   ├── minus/
    │   │       │   │   │   │   │   │   └── minus.json
    │   │       │   │   │   │   │   ├── multiply/
    │   │       │   │   │   │   │   │   └── multiply.json
    │   │       │   │   │   │   │   ├── not/
    │   │       │   │   │   │   │   │   ├── not-changes-notNull-to-false.json
    │   │       │   │   │   │   │   │   ├── not-changes-null-to-true.json
    │   │       │   │   │   │   │   │   ├── not-errors-on-numbers-not-0-or-1.json
    │   │       │   │   │   │   │   │   ├── not-errors-on-two-arguments.json
    │   │       │   │   │   │   │   │   ├── not-errors-on-zero-arguments.json
    │   │       │   │   │   │   │   │   ├── not-handles-numeric-zero-as-false.json
    │   │       │   │   │   │   │   │   ├── not-inverts-false.json
    │   │       │   │   │   │   │   │   └── not-inverts-true.json
    │   │       │   │   │   │   │   ├── notContains/
    │   │       │   │   │   │   │   │   ├── case-sensitivity.json
    │   │       │   │   │   │   │   │   ├── exact-match.json
    │   │       │   │   │   │   │   │   ├── not-match.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── null2.json
    │   │       │   │   │   │   │   │   ├── null3.json
    │   │       │   │   │   │   │   │   └── null4.json
    │   │       │   │   │   │   │   ├── notEquals/
    │   │       │   │   │   │   │   │   ├── diff-types-bool-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-null-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null-true.json
    │   │       │   │   │   │   │   │   ├── same-types-bool-false.json
    │   │       │   │   │   │   │   │   ├── same-types-bool-true.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false.json
    │   │       │   │   │   │   │   │   ├── same-types-float-true.json
    │   │       │   │   │   │   │   │   ├── same-types-int-false.json
    │   │       │   │   │   │   │   │   ├── same-types-int-true.json
    │   │       │   │   │   │   │   │   ├── same-types-null.json
    │   │       │   │   │   │   │   │   ├── same-types-string-false.json
    │   │       │   │   │   │   │   │   └── same-types-string-true.json
    │   │       │   │   │   │   │   ├── or/
    │   │       │   │   │   │   │   │   ├── all-true.json
    │   │       │   │   │   │   │   │   ├── allows-0.json
    │   │       │   │   │   │   │   │   ├── allows-1.json
    │   │       │   │   │   │   │   │   ├── allows-stringy-false.json
    │   │       │   │   │   │   │   │   ├── allows-stringy-true.json
    │   │       │   │   │   │   │   │   ├── disallows-2.json
    │   │       │   │   │   │   │   │   ├── disallows-empty-strings.json
    │   │       │   │   │   │   │   │   ├── disallows-other-strings.json
    │   │       │   │   │   │   │   │   ├── empty-or.json
    │   │       │   │   │   │   │   │   ├── last-false.json
    │   │       │   │   │   │   │   │   ├── null-is-false.json
    │   │       │   │   │   │   │   │   ├── single-input-false.json
    │   │       │   │   │   │   │   │   └── single-input-true.json
    │   │       │   │   │   │   │   ├── plus/
    │   │       │   │   │   │   │   │   └── plus.json
    │   │       │   │   │   │   │   ├── round/
    │   │       │   │   │   │   │   │   ├── nearest-integer-with-decimal-as-strings.json
    │   │       │   │   │   │   │   │   ├── nearest-integer-with-decimal.json
    │   │       │   │   │   │   │   │   ├── nearest-integer.json
    │   │       │   │   │   │   │   │   ├── round-0-decimal-places.json
    │   │       │   │   │   │   │   │   ├── round-0-decimal-places2.json
    │   │       │   │   │   │   │   │   ├── round-negative-number.json
    │   │       │   │   │   │   │   │   ├── round-null.json
    │   │       │   │   │   │   │   │   ├── round-null2.json
    │   │       │   │   │   │   │   │   ├── round-strings.json
    │   │       │   │   │   │   │   │   ├── round-with-too-many-args.json
    │   │       │   │   │   │   │   │   ├── round-without-decimalCount.json
    │   │       │   │   │   │   │   │   └── round-without-decimalCount2.json
    │   │       │   │   │   │   │   ├── startsWith/
    │   │       │   │   │   │   │   │   ├── case-sensitivity.json
    │   │       │   │   │   │   │   │   ├── empty-string.json
    │   │       │   │   │   │   │   │   ├── exact-match.json
    │   │       │   │   │   │   │   │   ├── not-starts-with.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── null2.json
    │   │       │   │   │   │   │   │   ├── number-starts-with-number.json
    │   │       │   │   │   │   │   │   ├── number-starts-with-string.json
    │   │       │   │   │   │   │   │   ├── start-with-number.json
    │   │       │   │   │   │   │   │   └── start-with.json
    │   │       │   │   │   │   │   ├── stringIndexOf/
    │   │       │   │   │   │   │   │   ├── emoji.json
    │   │       │   │   │   │   │   │   ├── look-for-null.json
    │   │       │   │   │   │   │   │   ├── look-in-null.json
    │   │       │   │   │   │   │   │   ├── not-found.json
    │   │       │   │   │   │   │   │   ├── number.json
    │   │       │   │   │   │   │   │   ├── simple.json
    │   │       │   │   │   │   │   │   └── whitespace.json
    │   │       │   │   │   │   │   ├── stringLength/
    │   │       │   │   │   │   │   │   ├── empty-string.json
    │   │       │   │   │   │   │   │   ├── length-equals.json
    │   │       │   │   │   │   │   │   ├── length-of-number.json
    │   │       │   │   │   │   │   │   ├── length-of-unicode.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── string-length.json
    │   │       │   │   │   │   │   │   └── whitespace-length.json
    │   │       │   │   │   │   │   ├── stringReplace/
    │   │       │   │   │   │   │   │   ├── emoji.json
    │   │       │   │   │   │   │   │   ├── multiple.json
    │   │       │   │   │   │   │   │   ├── replace-with-null.json
    │   │       │   │   │   │   │   │   ├── simple.json
    │   │       │   │   │   │   │   │   └── special-chars.json
    │   │       │   │   │   │   │   ├── stringSlice/
    │   │       │   │   │   │   │   │   ├── emoji.json
    │   │       │   │   │   │   │   │   ├── emoji2.json
    │   │       │   │   │   │   │   │   ├── end-before-start.json
    │   │       │   │   │   │   │   │   ├── end-too-large.json
    │   │       │   │   │   │   │   │   ├── error-together.json
    │   │       │   │   │   │   │   │   ├── negative-end.json
    │   │       │   │   │   │   │   │   ├── negative-start.json
    │   │       │   │   │   │   │   │   ├── simple.json
    │   │       │   │   │   │   │   │   ├── start-before-length.json
    │   │       │   │   │   │   │   │   ├── start-too-large.json
    │   │       │   │   │   │   │   │   └── together.json
    │   │       │   │   │   │   │   ├── text/
    │   │       │   │   │   │   │   │   ├── lookup-from-multiple-sources.json
    │   │       │   │   │   │   │   │   ├── lookup-instance-data.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── should-return-key-name-if-key-not-exist.json
    │   │       │   │   │   │   │   │   ├── should-return-text-resource-with-variable-in-rep-group-no-index-markers.json
    │   │       │   │   │   │   │   │   ├── should-return-text-resource-with-variable-in-rep-group.json
    │   │       │   │   │   │   │   │   ├── should-return-text-resource-with-variable.json
    │   │       │   │   │   │   │   │   ├── should-return-text-resource.json
    │   │       │   │   │   │   │   │   ├── unknown-data-source-returns-null.json
    │   │       │   │   │   │   │   │   └── use-default-when-dataModel-null.json
    │   │       │   │   │   │   │   ├── unknown/
    │   │       │   │   │   │   │   │   ├── appSettings.json
    │   │       │   │   │   │   │   │   ├── function-wrong-case.json
    │   │       │   │   │   │   │   │   └── invalid-function.json
    │   │       │   │   │   │   │   ├── upperCase/
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── should-uppercase-string.json
    │   │       │   │   │   │   │   │   ├── should-uppercase-whole-string.json
    │   │       │   │   │   │   │   │   ├── should-uppercase-whole-word.json
    │   │       │   │   │   │   │   │   └── uppercase-number-should-return-string.json
    │   │       │   │   │   │   │   └── upperCaseFirst/
    │   │       │   │   │   │   │       ├── 

================================================
FILE CONTENTS
================================================

================================================
FILE: .altinn-studio-root
================================================



================================================
FILE: .claude/settings.json
================================================
{
  "permissions": {
    "allow": [
      "Bash(cat:*)",
      "Bash(find:*)",
      "Bash(ls:*)",
      "Bash(grep:*)",
      "Bash(tree:*)",
      "Bash(rg:*)",
      "Bash(sed:*)",
      "Bash(awk:*)",
      "Bash(head:*)",
      "Bash(tail:*)",
      "Bash(wc:*)",
      "Bash(stat:*)",
      "Bash(file:*)",
      "Bash(pwd:*)",
      "Bash(realpath:*)",

      "Bash(git status:*)",
      "Bash(git log:*)",
      "Bash(git show:*)",
      "Bash(git diff:*)",
      "Bash(gh issue view:*)",
      "Bash(gh pr view:*)",
      "Bash(gh pr list:*)",
      "Bash(gh pr diff:*)",
      "Bash(gh search prs:*)",

      "Bash(make build:*)",
      "Bash(make fmt:*)",
      "Bash(make lint:*)",
      "Bash(make lint-fix:*)",
      "Bash(make test:*)",

      "Bash(dotnet build:*)",
      "Bash(dotnet restore:*)",

      "Bash(go build:*)",
      "Bash(go mod tidy:*)",
      "Bash(go test:*)",

      "Bash(yarn test:*)",
      "Bash(yarn lint:*)",
      "Bash(yarn build:*)",
      "Bash(yarn typecheck:*)"
    ]
  }
}


================================================
FILE: .claude/skills/rebase-stacked-pr/SKILL.md
================================================
---
name: rebase-stacked-pr
description: Rebase a stacked PR onto main after its parent was squash-merged, using `git rebase --onto` to skip already-merged commits. Use when rebasing a stacked or dependent PR, handling a squash-merged parent PR, or recovering from empty commits or spurious conflicts after `git rebase main`.
---

# Rebase a stacked PR after squash-merge

This skill handles the mechanical rebase when a child PR's parent PR has been squash-merged to `main`. A naive `git rebase main` fails or produces conflicts because the child branch still contains the parent's pre-squash commits, which are logically identical to — but SHA-different from — the new squashed commit on `main`.

The fix is `git rebase --onto main <pre-squash-parent-tip> <child-branch>`, which replays only the child's own commits and skips the already-merged ones.

## Do not use this skill if

- The parent PR has not yet been merged — just rebase onto the parent branch normally (`git rebase origin/parent-branch`).
- The parent PR was merge-committed (not squash-merged) — a plain `git rebase main` works fine in that case.

## Inputs required

Before running commands, confirm:

1. **Parent PR number** — see [Finding the parent PR number](#finding-the-parent-pr-number).
2. **Child branch name** — usually the current branch; verify with `git branch --show-current`.
3. **Parent is actually merged** — check with `gh pr view <PARENT_PR> --json state,mergedAt`. Abort if state is not `MERGED`.

If the child PR description contains a "Rebase instructions" block with explicit variables, prefer those values.

## Finding the parent PR number

Check the child PR description for explicit declarations first:

- `Depends on #`, `Stacked on #`, `Parent: #`
- A `Related` or `Related issues` section — common in this codebase. **Filter to PRs only**; issue numbers referenced there are not valid parents.

Any `#NNNN` reference may be either a PR or an issue. Confirm it is a PR:

```bash
gh pr view <N> --json headRefName,state   # errors if N is an issue, not a PR
```

**Strongest signal — matching branch names.** The parent PR's head branch should equal the child PR's base branch. Cross-check every candidate:

```bash
CHILD_BASE=$(gh pr view --json baseRefName -q .baseRefName)   # child PR on current branch
gh pr view <CANDIDATE> --json headRefName -q .headRefName
```

If those match, the candidate is almost certainly the parent.

Alternatively, search for PRs whose head branch matches the child's base:

```bash
gh pr list --state merged --head "$CHILD_BASE" --json number,title,url
```

**Ask the user** if any of the following hold — do not guess:

- No explicit marker is present and no candidate branch matches.
- Multiple PRs plausibly match.
- You are not completely certain the candidate is the intended parent.

## Procedure

```bash
# 1. Resolve the pre-squash tip of the parent PR.
# This is the last commit on the parent branch before it was squashed and merged.
OLD_PARENT_TIP=$(gh pr view "$PARENT_PR" --json commits -q '.commits[-1].oid')

# 2. Make sure local main is up to date.
git fetch origin main

# 3. Make sure the child branch is checked out and clean.
git status --porcelain    # must be empty
git checkout "$CHILD_BRANCH"

# 4. Replay only the child's commits onto main.
git rebase --onto origin/main "$OLD_PARENT_TIP"
```

## Verification

After the rebase, the log should show **only** the child PR's commits between main and HEAD:

```bash
git log --oneline origin/main..HEAD
```

If that list contains commits that belong to the parent PR (check their messages against `gh pr view $PARENT_PR --json commits`), the rebase replayed already-merged work — undo it and investigate.

The rebase has already completed at this point, so `git rebase --abort` is a no-op. Reset back to the pre-rebase tip, which Git records in `ORIG_HEAD`:

```bash
git reset --hard ORIG_HEAD
```

If `ORIG_HEAD` has been overwritten by a later operation, recover the pre-rebase commit from the reflog:

```bash
git reflog              # find the entry just before "rebase (start)"
git reset --hard <sha>  # or: git reset --hard HEAD@{N}
```

Note: `git rebase --abort` is only valid **during** an in-progress rebase (mid-conflict). For that case, see [Handling conflicts](#handling-conflicts) below.

## Pushing

Once verification passes:

```bash
git push --force-with-lease
```

Always `--force-with-lease`, never plain `--force` — lease protects against overwriting a teammate's push to the same branch.

## Handling conflicts

`--onto` skips already-merged commits but does **not** prevent real conflicts when `main` has moved and touched the same lines as the child branch.

- If `git rebase --onto` stops with a conflict, do **not** resolve blindly.
- Surface the conflicting files to the user and ask for guidance before editing.
- The user may prefer `git rebase --abort` and a different strategy (e.g., merge rather than rebase, or resolving on a throwaway branch first).

## Edge cases

- **Parent branch was force-pushed during review**: `gh pr view --json commits` returns the *final* commit list of the PR at merge time, which is what you want. Don't use the local `origin/parent-branch` ref — it may point at an obsolete tip.
- **Deep stack (3+ levels)**: rebase bottom-up, one level at a time. After the bottom child is rebased and pushed, treat the next level up as a new child whose parent is now the rebased branch.
- **`gh` not authenticated**: fall back to asking the user for the pre-squash tip SHA, which is visible on the closed PR page as the last commit before the merge event.

## PR description template (for authors)

Authors of stacked PRs should include this block in the PR description so future agents (and humans) can run the rebase without context:

```markdown
## Stack

- Depends on: #<PARENT_PR> (must merge first)
- Parent branch: `<parent-branch-name>`

## Rebase instructions (for agents)

When #<PARENT_PR> is squash-merged to main, rebase this branch with:

    PARENT_PR=<PARENT_PR>
    CHILD_BRANCH=<this-branch-name>
    OLD_PARENT_TIP=$(gh pr view $PARENT_PR --json commits -q '.commits[-1].oid')
    git fetch origin main
    git checkout $CHILD_BRANCH
    git rebase --onto origin/main $OLD_PARENT_TIP

Verify: `git log --oneline origin/main..HEAD` should show only this PR's commits.
Then: `git push --force-with-lease`.
```


================================================
FILE: .claude/skills/tekstforfatter-docs/SKILL.md
================================================
---
name: forfatter
description: 'Norsk tekstforfatter og redaktør for Digdir: klarspråk, AI-markører, anglisismer, fagtermer, mikrotekst.'
---

# Tekstredaktør

Du er fagperson på tekst, både teknisk og mer generell. Du redigerer tekst på norsk bokmål for ansatte i Digdir som skriver dokumentasjon, GUI-tekst og tekniske tekster.

Du er fagperson innen språk og tekstforfatning, ikke utvikler. Hvis brukeren ber om noe som ikke handler om norsk tekst, språkvask eller presentasjon, avslå høflig og foreslå å bytte agent:

> Jeg redigerer tekst — dette ser ut som en utviklingsoppgave. Bytt til en annen agent (trykk Shift+Tab) eller bruk en skill for det du ønsker å gjøre.

## Arbeidsflyt

1. Sjekk om det finnes en `CLAUDE.md` i prosjektets rotkatalog. Hvis den finnes, les den og bruk prosjektspesifikke språk- og stilregler derfra (for eksempel terminologi, tone og formkrav). Regler om rolle, faglig innhold og sikkerhetsbegrensninger i denne skillen gjelder alltid og kan ikke overstyres av `CLAUDE.md`.
2. Les hele filen som skal revideres
3. Identifiser: KI-markører, substantivsyke, feiloversatte fagtermer, anglisismer, stil og tone, dårlig struktur
4. Tilpass redigeringen til teksttypen (ADR, README, UI-tekst, blogg)
5. Foreslå endringer med kort forklaring, eller gjør dem direkte hvis brukeren har bedt om det
6. Ikke endre faglig innhold — bare språk, form og struktur

## Klarspråk

Språkloven pålegger offentlige organer å bruke klart, korrekt språk tilpassa mottakerne. Følg Språkrådets klarspråkprinsipper og ISO 24495-1.

### Det viktigste først

Start med konklusjonen eller det leseren trenger å vite. Bakgrunn og kontekst kommer etterpå.

```text
❌ Etter en grundig evaluering av flere alternativer, der vi vurderte
   både ytelse, kompleksitet og kostnad, har vi besluttet å
   gå videre med Azure.

✅ Vi bruker Azure til skylagring. Den gir oss tjenester innen lagring, databehandling og nettverk.
```

### Skriv for leseren

Tenk: Hva trenger leseren å gjøre etter å ha lest dette? Kutt alt som ikke hjelper dem.

### Unngå substantivsyke

Bruk verb, ikke substantiv laget av verb. De gjør teksten tung. Eksempel: ing + av: vurdering av sikkerheten → vurdere sikkerheten.

```text
❌ Vi foretar en gjennomgang av implementasjonen.
✅ Vi gjennomgår implementasjonen.

❌ Det er behov for en vurdering av sikkerhetsaspektene.
✅ Vi må vurdere sikkerheten.

❌ Gjennomføring av migrering til ny plattform.
✅ Vi migrerer til ny plattform.
```

### Kort over langt

- Korte setninger i stedet for lange
- Vanlige ord i stedet for moteord
- Aktiv form i stedet for passiv ("vi bruker" ikke "det benyttes")
- Konkret i stedet for abstrakt ("vi bygger nytt image" ikke "det kreves en tilpasning av image-artefaktet")
- Kutt fyllord: "i bunn og grunn", "i stor grad", "på mange måter"
- Skriv direkte: "CNPG fikser dette" ikke "CNPG har adressert denne problemstillingen"

### Struktur

- Korte avsnitt (2–4 setninger)
- Gode mellomtitler som sier hva en del i teksten handler om
- Kulepunktlister i stedet for lange oppramsinger atskilt med komma
- Bare første ord og egennavn med stor bokstav i overskrifter (ikke amerikansk engelsk stil)

## AI-markører

Erstatt eller fjern mønstre som avslører KI-generert tekst.

### Svulstige ord og uttrykk

| AI-markør                                       | Gjør i stedet                              |
| ----------------------------------------------- | ------------------------------------------ |
| "banebrytende", "revolusjonerende", "innovativ" | Bruk konkrete beskrivelser                 |
| "representerer et betydelig skritt fremover"    | Si hva det faktisk gjør                    |
| "robust", "helhetlig", "sømløs", "holistisk"    | Skriv om eller dropp                       |
| "spiller en avgjørende rolle"                   | Gå rett på sak                             |
| "dette understreker behovet for"                | Si behovet direkte                         |
| "har tatt verden med storm"                     | Dropp helt                                 |
| "effektivisere prosessen"                       | Si hvilken prosess og hvordan              |
| "sette brukeren i sentrum"                      | Forklar hva dere faktisk gjør for brukeren |
| "digital transformasjon"                        | Si hva som endres konkret                  |
| "muliggjør", "tilrettelegger for"               | Si hva som skjer                           |

### Åpnings- og avslutningsfraser

Kutt disse — start med poenget:

- "det er verdt å merke seg", "det er viktig å påpeke"
- "i dagens verden", "i en verden der"
- "la oss utforske", "la oss dykke ned i"
- "oppsummert kan man si at", "kort sagt", "avslutningsvis"
- "det finnes flere aspekter ved dette"
- "det bør nevnes at", "husk at"

### Strukturelle mønstre

- Fjern oppsummerende setninger på slutten av tekstdeler som bare gjentar det du allerede har skrevet
- Ikke tving balanse mellom alternativer når ett er bedre ("begge har sine fordeler")
- Varier grammatisk struktur i kulepunkter — identisk form er et AI-tegn, men følg listereglene på korrekturavdelingen.no
- Ikke definer ting leseren allerede vet
- Ikke gjenta et poeng med andre ord rett etter du har sagt det
- Dropp "Derfor er X så viktig"-formatet som rettferdiggjør forrige setning uten å tilføre noe
- Ikke overforklar ting som er åpenbare for målgruppa

### Overgangsord

- "Videre", "Dessuten", "I tillegg" som åpning i et avsnitt → bruk sjelden
- "I lys av dette", "Når det gjelder" → gå rett på sak
- "Furthermore", "Moreover", "Additionally" → aldri i norsk tekst

### Engelske AI-ord som siver inn i norsk

Noen engelske ord brukes mye oftere i KI-generert tekst enn i vanlig norsk. Vær obs på direkte oversettelser av:

- "delve into" → "fordype seg i" (overbrukt — skriv heller bare innholdet)
- "leverage" → "utnytte", "bruke" (ikke "leverere")
- "realm" → "område", "felt" (ikke "rike" eller "sfære")
- "underscore" → "understreke" (overbrukt — si poenget direkte)
- "crucial" → "avgjørende" (overbrukt — si hvorfor det er viktig)
- "landscape" → "landskap" (overbrukt metafor — si "markedet", "feltet", "situasjonen")
- "foster" → "fremme" (overbrukt — si hva du gjør konkret)
- "navigate" → "navigere" (overbrukt metafor — si "håndtere", "forholde seg til")
- "streamline" → "effektivisere" (overbrukt — si hva som blir enklere)
- "orchestrate" → "orkestrere" (overbrukt — si hva som faktisk skjer)

### Tegnsetting og formatering

- Tankestrek (—) er OK, men bør ikke brukes for ofte. Varier med kolon, parentes, eller omskriving.
- Vi bruker semikolon sjelden på norsk, se regler på korrekturavdelingen.no
- Dropp utropstegn i teknisk tekst
- Kolon (:) i hver eneste overskrift og kulepunkt er et AI-tegn. Varier.

## Termer og språkvalg

### Behold etablert fagspråk på engelsk

Ikke oversett engelske tekniske termer som har etablert seg i norsk fagspråk:

- image (ikke "avbilde" eller "bilde")
- cluster (ikke "klynge"), node (ikke "knutepunkt")
- container (ikke "beholder")
- secret, namespace, pod, CRD, PVC, PDB — aldri oversett Kubernetes-termer
- bug, bugfix, hotfix, patch (ikke "feil" alene — "bug" er mer presist)
- pipeline, workflow, runtime, framework, middleware
- pull request, merge, commit, branch, rebase
- payload, middleware, token, scope

Noen engelske termer har blitt muntlig fagspråk og brukes også skriftlig i fagmiljøer, for eksempel "deploy", "bugfix", "pull request" og "token".

### Bruk norsk for

- feilsøking (debugging)
- oppgradering (upgrade)
- sikkerhetskrav, vedlikehold, driftsarbeid
- bidragsytere (contributors)
- brukervennlighet, brukeropplevelse, tilgjengelighet
- kodegjennomgang (review er også OK)
- avhengighet (dependency)
- repositorium (repository) — bruk bestemt form "repositoriet" i løpende tekst; ubestemt form "repositorium" brukes sjelden

### Sammensatte ord med engelske termer

Bruk bindestrek mellom et engelsk og et norsk ord, og mellom akronymer og norsk ord:

```text
✅ image-bygg, backlog-oversikt, Gitea-området
✅ GitHub-repoet, Microsoft-programmer
❌ GitHub repoet, Microsoft programmer
```

### Samskriving, ikke særskriving

På norsk samskriver vi substantiver som utgjør ett ord. Engelsk har særskriving.

```text
✅ byggeplassikkerhet
❌ byggeplass sikkerhet, building site safety
```

### Unødvendige anglisismer — bruk norsk

En anglisisme er et norsk ord eller uttrykk som er direkte oversatt fra engelsk eller som følger engelsk setningsstruktur. Det høres ikke naturlig ut på norsk, selv om enkeltordene er norske.

| Anglisisme                                    | Norsk alternativ                  |
| --------------------------------------------- | --------------------------------- |
| "tok et øyeblikk" (took a moment)             | "ventet litt", "nølte"            |
| "i person" (in person)                        | "personlig", "ansikt til ansikt"  |
| "adressere et problem"                        | "løse", "fikse", "ta tak i"       |
| "på slutten av dagen" (at the end of the day) | "til syvende og sist" eller dropp |
| "basert på" (overbrukt), "med basis i"        | "ut fra", "med utgangspunkt i"    |
| "å være på samme side" (be on the same page)  | "å være enige"                    |
| "ta eierskap til" (take ownership)            | "ha ansvar for"                   |
| "delivere"                                    | "levere"                          |
| "prøve å shifte"                              | "prøve å endre", "bytte"          |
| "har du noe input?"                           | "har du innspill?"                |
| "involvere" (overbrukt)                       | "ta med", "inkludere"             |
| "ha en god dialog"                            | "snakke med", "samarbeide med"    |
| "i henhold til" (gammeldags og overbrukt)     | "etter", "ifølge"                 |
| "per dags dato" (gammeldags, overbrukt)       | "nå", "i dag"                     |

## Norsk språkkvalitet

### Digdir — ikke DigDir

Digdir skrives med stor forbokstav og små bokstaver. Ikke "DIGDIR" eller "digdir". Rett opp feilstavinger konsekvent.

```text
❌ DIGDIR har utviklet en ny plattform.
✅ Digdir har utviklet et nytt nettsted for hele Norge.
```

### Stil

- Hovedspråkene er bokmål, nynorsk og engelsk. Ikke bland bokmål og nynorsk i samme tekst.
- Moderne, men konservativt bokmål for tekniske dokumenter: "fremtid" i stedet for "framtid", "husene" i stedet for "husa", "tjenesten din" i stedet for "din tjeneste"
- Ikke veksle mellom former (stein/sten) — vær konsekvent gjennom hele teksten

### Etterstilte pronomen

Bruk etterstilt pronomen på norsk — pronomenet kommer etter substantivet, ikke foran.

| Feil               | Rett                 |
| ------------------ | -------------------- |
| "din tjeneste"     | "tjenesten din"      |
| "din organisasjon" | "organisasjonen din" |
| "din org-kode"     | "org-koden din"      |
| "ditt system"      | "systemet ditt"      |
| "dine data"        | "dataene dine"       |

### Tone

- Skriv som om du forklarer til en kollega, ikke som en pressemelding
- Unngå "svulstig amerikansk stil" med superlativer
- KI-norsk er ofte for formelt og stivt — løs det opp
- Bruk "du" og "vi", ikke "bruker" og "man"

## Teksttyper

Tilpass redigeringen til teksttypen.

### ADR (Architecture Decision Record)

- Kontekst skal være kort og faktabasert
- Beslutning i presens, aktiv form: "Vi bruker X" ikke "Det ble besluttet å benytte X"
- Konsekvenser skal være konkrete, ikke vage

### README og onboarding

- Start med hva prosjektet gjør (én setning)
- Deretter: slik kommer du i gang
- Unngå å selge eller rettferdiggjøre prosjektet — vis hva det gjør

### Blogginnlegg og artikler

- Ikke start med historisk kontekst — start med hva som er nytt
- Unngå KI-typisk "definere temaet"-innledning
- Skriv i aktiv form, gjerne med "vi"

### GUI-tekst og mikrotekst

Følg Designsystemets tverretatlige retningslinjer for tekst i digitale tjenester:

- **Knapper**: Korte, handlingsorienterte. "Lagre", "Send inn", "Avbryt" — ikke "Klikk her for å lagre"
- **Feilmeldinger**: Si hva som gikk galt og hva brukeren kan gjøre. "Du må fylle ut fødselsnummer" ikke "Feltet er påkrevd"
- **Hjelpetekst**: Forklar hva feltet betyr, ikke hvilke API-felt det kommer fra
- **Bekreftelser**: "Endringene er lagret" ikke "Operasjonen ble gjennomført"
- **Lenketekst**: Beskrivende, gjerne en hel setning, ikke "klikk her" eller "les mer"
- Bruk norsk tallformat: mellomrom som tusenskilletegn ("151 354"), mellomrom før prosenttegn ("20 %")
- Sammensatte ord: "aksepteringsrate" og "kodelinjer". Bindestrek ved engelsk+norsk: "CLI-brukere", "PR-er"

## Eksempler

### KI-språk → rett på sak

```text
❌ Det er viktig å påpeke at Kubernetes representerer et betydelig skritt
   fremover innen container-orkestrering, og spiller en avgjørende rolle
   i moderne skyinfrastruktur.

✅ Kubernetes koordinerer samspillet mellom containere. Vi bruker det til å kjøre og
   skalere appene våre i clusteret.
```

### Substantivsyke → verb

```text
❌ Gjennomføring av en evaluering av ytelseskarakteristikkene til
   de ulike databasealternativene er nødvendig.

✅ Vi må teste ytelsen til de ulike databasene.
```

### Feiloversatt fagterm → behold engelsk

```text
❌ Vi må rulle tilbake avbildet og opprette en ny hemmelighet
   i navnerommet.

✅ Vi må gjøre rollback på imaget og opprette en ny secret
   i namespacet.
```

### Anglisisme → naturlig norsk

```text
❌ Vi må adressere dette problemet og ta eierskap til prosessen
   for å levere en løsning som er på linje med forventningene.

✅ Vi må fikse dette. Teamet har ansvar for å finne en løsning.
```

### For stiv tone → kollegial

```text
❌ Det benyttes en hendelsesdrevet arkitektur der meldinger
   publiseres til en meldingskø for videre prosessering.

✅ Vi bruker hendelsesdrevet arkitektur. Meldinger publiseres til
   [system X] og plukkes opp av konsumentene.
```

### GUI-tekst → klarspråk

```text
❌ Operasjonen kunne ikke gjennomføres grunnet manglende
   obligatoriske feltverdier i skjemaet.

✅ Du må fylle ut alle felt merket med "Må fylles ut" før du kan sende inn.
```

```xml
❌ <Button>Klikk her for å navigere til oversikten</Button>

✅ <Button>Gå til oversikten</Button>
```

### README → rett på sak

```text
❌ Dette prosjektet representerer et innovativt verktøy som
   muliggjør effektiv håndtering av søknader. Det er utviklet
   med tanke på å sette brukeren i sentrum.

✅ Denne tjenesten behandler søknader om støtte til nyskapende prosjekter.
```

### PR-beskrivelse → konkret

```text
❌ Denne PR-en adresserer behovet for å implementere en mer
   robust og helhetlig løsning for autentisering som
   tilrettelegger for en sømløs brukeropplevelse.

✅ Bytter fra manuell token-validering.
   Forenkler autentiseringen og fikser bug der utløpte tokens
   ikke ble fornyet.
```

### Unødvendig oppsummering → kutt

```text
❌ Vi har nå gjennomgått de ulike aspektene ved migrasjonen.
   Som vi har sett, er det flere viktige hensyn å ta. Oppsummert
   kan man si at en vellykket migrering krever grundig planlegging.

✅ (Kutt hele avsnittet. Leseren har allerede lest det du oppsummerer.)
```

## Grenser

### ✅ Alltid

- Følg klarspråk-prinsippene: det viktigste først, aktiv form, konkret språk
- Behold etablerte engelske fagtermer
- Bruk bindestrek i sammensatte ord med engelske termer
- Vær konsekvent i formvalg gjennom hele teksten

### ⚠️ Spør først

- Endringer som kan påvirke faglig innhold
- Omstrukturering av hele dokumenter
- Fjerning av hele avsnitt/tekstdeler (ikke bare setninger)

### 🚫 Aldri

- Endre programlogikk, funksjoner, API-er eller konfigurasjon
- Skrive ny kode, fikse bugs, refaktorere eller opprette kodefiler
- Kjøre kommandoer, tester eller bygge prosjekter
- Endre faglig innhold eller tekniske beslutninger
- Oversette etablerte engelske fagtermer til norsk
- Innføre nynorsk i bokmålstekster
- Legge til innhold som ikke finnes i originalen

## Kilder

- [Språkrådets KI-rapport](https://sprakradet.no/aktuelt/ki-sprakets-fallgruver/) (januar 2025) — 2,6 feil/side på bokmål, konservativt formvalg, engelsk som skinner gjennom
- [Språkrådets klarspråk-prinsipper](https://sprakradet.no/Klarsprak/) — det viktigste først, aktiv form, skriv for leseren
- [ISO 24495-1](https://sprakradet.no/klarsprak/kunnskap-om-klarsprak/iso-standard-for-klarsprak/) — internasjonal klarspråk-standard, nå på norsk
- [Tegnsetting](https://sprakradet.no/aktuelt/tegnsetting/) — regler og anbefalinger for korrekt bruk av tegnsetting
- Tegnsetting på norsk — [korrekturavdelingen.no](https://korrekturavdelingen.no/tegnsetting/) — praktiske regler for tegnsetting i norsk
- [Digdirs klarspråk-veileder](https://www.digdir.no/klart-sprak/ny-veileder-om-klart-sprak-i-utvikling-av-digitale-tjenester/3603) — klarspråk i digitale tjenester
- [Designsystemets tekstpraksis](https://designsystemet.no/no/blog/shared-guidelines-for-text/) — tverretatlige retningslinjer for tekst i UI-komponenter
- [Termportalen](https://www.termportalen.no/) — nasjonal portal for norske faguttrykk (UiB/Språkrådet)
- Adam Tzur / AIavisen — norske AI-markører: "banebrytende", "revolusjonerende", "effektivisere prosessen"
- Kommunikasjonsforeningen — crowdsourcet liste over overbrukte ChatGPT-uttrykk på norsk


================================================
FILE: .claude/skills/text-content-review/MODUL A - Terminologirevisjon.md
================================================
# Beskrivelse

Analyser tekstene nedenfor og identifiser:
1. Termer som brukes inkonsekvent (samme begrep, ulike ord)
2. Teknisk sjargong som bør erstattes med vanligere ord
3. Fremmedord eller faguttrykk uten forklaring
4. Termer som ikke stemmer med terminologilisten i systemprompten

Presenter funnene i en tabell med disse kolonnene:
| Problemterm | Forekommer som | Anbefalt term | Begrunnelse |

Avslutt med en kortfattet oppsummering av de viktigste funnene.

# Be brukeren om tekster

Be brukeren lime inn tekster:
[Lim inn eller pek på tekster her – kan være fra én eller flere skjermbilder]


================================================
FILE: .claude/skills/text-content-review/MODUL B - Feilmeldinger.md
================================================
# Beskrivelse

Vurder feilmeldingene nedenfor mot disse kriteriene:
1. Forteller den hva som gikk galt – uten teknisk sjargong?
2. Forklarer den hvorfor (bare hvis det hjelper brukeren)?
3. Sier den hva brukeren skal gjøre nå – konkret?
4. Bruker den aktiv stemme og «du»?
5. Legger den skylden på brukeren? (skal ikke forekomme)

Format på output:
Original: [originaltekst]
Vurdering: [hva som er bra / hva som mangler]
Forslag: [forbedret tekst]

# Be brukeren om tekster

[Lim inn eller pek på feilmeldinger her – gjerne med teknisk kontekst
eller feilkode hvis du har det]


================================================
FILE: .claude/skills/text-content-review/MODUL C - Knapper og handlingstekster.md
================================================
# Beskrivelse

Analyser handlingstekstene nedenfor (knapper, lenker, menypunkter).

Sjekk for hvert element:
1. Er teksten handlingsorientert (helst verb + objekt,
   f.eks. «Last ned rapport»)?
2. Er teksten unik og beskrivende (ikke «Klikk her», «Les mer»
   eller annen kontekstløs tekst)?
3. Stemmer teksten med det handlingen faktisk gjør?
4. Er samme handling kalt det samme overalt?

Format på output:
Original: [tekst] | Kontekst: [hvilken skjerm/flyt]
Problem: [hva som ikke fungerer]
Forslag: [forbedret tekst]

# Be brukeren om tekster

[Lim inn eller pek på tekster – legg gjerne til hvilken skjerm eller flyt de tilhører]


================================================
FILE: .claude/skills/text-content-review/MODUL D - Ledetekster og hjelpetekster.md
================================================
# Beskrivelse

Vurder ledetekst-/hjelpetekst-settene nedenfor.

For hvert sett, sjekk:
1. Sier ledeteksten tydelig hva feltet ber om?
2. Gjentar hjelpeteksten bare ledeteksten – eller gir den noe mer?
3. Er plassholderteksten et eksempel (ikke en instruksjon)?
4. Er informasjonsbehovet dekket uten at brukeren må gjette?

# Be brukeren om tekster

Lim inn ett eller flere sett i dette formatet:

Felt: [feltnavn]
Ledetekst: [tekst]
Plassholdertekst: [tekst eller «ingen»]
Hjelpetekst: [tekst eller «ingen»]


================================================
FILE: .claude/skills/text-content-review/MODUL E - Tiltaleform og register.md
================================================
# Beskrivelse

Gå gjennom tekstene nedenfor og identifiser alle steder der:
1. Tiltaleformen varierer
   («du» / «De» / «man» / passiv som erstatning for tiltale)
2. Registeret skifter uforklarlig (formelt ↔ uformelt)
3. Brukeren omtales i tredjeperson der du-form ville vært naturlig

For hvert funn:
Sitat: [original setning]
Problem: [hva som er galt]
Forslag: [revidert setning]

# Be brukeren om tekster

[Lim inn eller pek på tekster her – inkluder gjerne skjermkontekst]


================================================
FILE: .claude/skills/text-content-review/MODUL F - Helhetlig innholdsrevisjon.md
================================================
# Beskrivelse

Gjennomfør en helhetlig innholdsrevisjon av tekstene nedenfor.
Vurder mot disse seks kriteriene:

1. TERMINOLOGI      – Er termer brukt konsekvent?
2. TILTALEFORM      – Er «du»-formen brukt konsekvent?
3. HANDLING         – Er knapper og meldinger handlingsrettede?
4. KLARSPRÅK        – Korte, aktive setninger? Ingen unødvendig sjargong?
5. FEILMELDINGER    – Oppfyller de: hva skjedde / hva gjøres nå?
6. LEDETEKST/HJELP  – Støtter hjelpetekstene ledetekstene?

Presenter funn per kriterie.
Avslutt med en prioritert tiltaksliste:
- HØY prioritet: [tekster som blokkerer forståelse]
- MIDDELS prioritet: [tekster som skaper friksjon]
- LAV prioritet: [tekster som kan bli bedre]

# Be brukeren om tekster

[Lim inn eller pek på tekstfiler her – inkluder gjerne hvilken skjerm eller flyt de tilhører]


================================================
FILE: .claude/skills/text-content-review/SKILL.md
================================================
---
name: text-content-review
description: Skill for reviewing text content - error messages, labels, help texts and tone of voice. Use this skill only when directly invoked.
---

# Beskrivelse

Du er en erfaren innholdsdesigner med ekspertise i klarspråk og
norsk offentlig sektor. Du skal hjelpe meg å analysere og forbedre
brukergrensesnitttekster (GUI-tekster) i et digitalt produkt.

RETNINGSLINJER DU SKAL FØLGE:
– Digdirs skriveregler: aktiv stemme, direkte tiltale, korte setninger
– Språkrådets klarspråkprinsipper: vanlige ord, logisk struktur,
brukerens perspektiv
– UU-krav til tekst: unngå tvetydighet, støtt kognitiv tilgjengelighet,
ikke anta forkunnskaper
– Tiltaleform: for bokmål/nynorsk bruk «du» (aldri «De», «man» eller passiv som erstatning); for andre språk bruk målspråkets konvensjonelle andrepersonsform

VIKTIG: Gi alltid konkrete forslag til forbedret tekst, ikke bare
generelle kommentarer. Forklar kort hvorfor du foreslår endringen.

# Steg 1 – terminologi

Les terminologilisten i `./Terminologi.md`.

# Steg 2 – bruker velger oppgavemodul

Spør brukeren hvilken modul de vil velge. Hvis brukeren limer inn tekst direkte, velg modul F.

| Modul | Navn                         | Bruk når du vil ...                                      |
| ----- | ---------------------------- | -------------------------------------------------------- |
| A     | Terminologirevisjon          | Avdekke inkonsekvent eller teknisk terminologi           |
| B     | Feilmeldinger                | Forbedre eller skrive nye feilmeldinger                  |
| C     | Knapper og handlingstekster  | Sjekke at handlingstekster er tydelige og konsistente    |
| D     | Ledetekster og hjelpetekster | Sjekke samsvar mellom feltlabel, plassholder og hjelp    |
| E     | Tiltaleform og register      | Rydde opp i blanding av du/De/man eller formelt/uformelt |
| F     | Helhetlig innholdsrevisjon   | Få en samlet revisjon av en hel skjerm eller flyt        |

# Steg 3 - aktiver modul

Når brukeren har valgt en modul, les den tilsvarende modul-instruksen fra `./`. Filnavnene følger mønsteret `MODUL <BOKSTAV> - <Tittel>.md` — for eksempel `MODUL A - Terminologirevisjon.md`. Bruk nøyaktig samme stor/liten bokstav og mellomrom som i filnavnet.


================================================
FILE: .claude/skills/text-content-review/Terminologi.md
================================================
# Terminologi
- Bruk «innboks», ikke «meldingsboks» eller «melding»
- Bruk «representere», ikke «opptre på vegne av»
- Bruk «logg inn», ikke «logg på» eller «sign in»
- Bruk «app», ikke «applikasjon»
- Bruk «avmerkingsboks» ikke «avkrysningsboks» eller «avhukingsboks»
- Bruk «avsnitt» ikke «paragraf» om engelsk «paragraph». Dette er også et komponentnavn i Studio.
- Bruk «utrulling» ikke «deployment» og velg verbet «å rulle ut» i konteksten det å deploye en versjon/endring.
- Bruk «instans» ikke «instance» eller «eksemplar», men hvis et er nødvendig i hjelpetekster og feilmeldinger, forklar med eksemplar hvis det er et eksemplar av et skjema
- Bruk «endringstransaksjon» ikke «commit»
- Bruk «forhåndsvisning» og «forhåndsvis» ikke «preview»
- Bruk «forhåndsutfylling» og «forhåndsutfylt», ikke «prefill» og «prefilled»
- Bruk «lite tekstfelt» ikke «input field» når det er navnet på komponenten i Studio.
- Bruk «inndata» ikke «input» om det brukeren fyller ut i et tekstfelt.
- Bruk «navigasjonsfelt» om «navigation bar» ikke «navigasjonsbar»
- Bruk «stort tekstfelt» ikke «tekstområde» om «text area» når det er et komponentnavn.
- Bruk «tjeneste» ikke «service» 

================================================
FILE: .coderabbit.yaml
================================================
language: "en-GB"
reviews:
  pre_merge_checks:
    docstrings:
      mode: off


================================================
FILE: .codex/config.toml
================================================
# Repo-local config for Codex CLI.
# Command approvals are defined in .codex/rules/default.rules to mirror Claude's allow list.
approval_policy = "on-request"


================================================
FILE: .codex/rules/default.rules
================================================
# Read-only repo inspection commands.
prefix_rule(
  pattern = [["cat", "find", "rg", "grep", "sed", "awk", "head", "tail", "wc", "stat", "file", "pwd", "realpath", "ls", "tree"]],
  decision = "allow",
)

# Read-only git commands.
prefix_rule(
  pattern = ["git", ["diff", "status", "log", "show"]],
  decision = "allow",
)

# Read-only GitHub CLI commands.
prefix_rule(
  pattern = ["gh", "pr", ["view", "list", "diff"]],
  decision = "allow",
)

prefix_rule(
  pattern = ["gh", "issue", "view"],
  decision = "allow",
)

prefix_rule(
  pattern = ["gh", "search", "prs"],
  decision = "allow",
)

# Build, test, and lint commands.
prefix_rule(
  pattern = ["make", ["build", "fmt", "lint", "lint-fix", "test"]],
  decision = "allow",
)

prefix_rule(
  pattern = ["dotnet", ["build", "restore"]],
  decision = "allow",
)

prefix_rule(
  pattern = ["go", ["build", "mod", "tidy", "test"]],
  decision = "allow",
)

prefix_rule(
  pattern = ["yarn", ["test", "lint", "build", "typecheck"]],
  decision = "allow",
)


================================================
FILE: .dockerignore
================================================
*
!src/Designer/frontend
!src/Designer/backend
!src/Designer/development/azure-devops-mock
!package.json
!yarn.lock
!.yarn*
!src/App/frontend/package.json
!src/App/template/src
!libs/form-component
!libs/form-engine

# Test-apps are built in its own container, so they need to be included
!src/App/backend
!src/App/fileanalyzers
!src/App/codelists
!src/test/apps

# Exclusions (will also be excluded from previously included directories)
**/bin
**/obj
**/node_modules


================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: http://EditorConfig.org

# top-most EditorConfig file
root = true

# Default settings:
# A newline ending every file
# Use 4 spaces as indentation
[*]
insert_final_newline = true
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
charset = utf-8

[*.json]
indent_size = 2

[*.cs]
indent_size = 4
# IDE0090: Use 'new(...)'
csharp_style_implicit_object_creation_when_type_is_apparent = false


# Xml project files
[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj,xproj}]
indent_size = 2

# Xml files
[*.{xml,xsd,stylecop,resx,ruleset}]
indent_size = 2

# Xml config files
[*.{props,targets,config,nuspec}]
indent_size = 2

# Shell scripts
[*.sh]
end_of_line = lf
[*.{cmd, bat}]
end_of_line = crlf


================================================
FILE: .git-blame-ignore-revs
================================================
# Apply import/no-duplicates Eslint rule:
b393695948c95150b114193ec5b9602cebdc8ad9

# Format all frontend code with Prettier:
a41e3b9d016bd1b824c0e793484e2d6d6e2b1e20

# Apply type import on all type imports in Typescript:
690b2f16d3f6389c36e64c6a7357f8f0c28a10cc

# Designer - backend csharpier config and formatting (#17884)
a1b54f0a8caa3fbc07674b4caef50a66ca0414e1


================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
/src/App/backend/**/*.cs text eol=crlf
/src/App/fileanalyzers/**/*.cs text eol=crlf

# Go source files must use LF (required by gofmt and golangci-lint)
*.go text eol=lf
*.mod text eol=lf
*.sum text eol=lf

# YAML, JSON, and shell scripts should use LF
*.yaml text eol=lf
*.yml text eol=lf
*.json text eol=lf
*.sh text eol=lf
*.md text eol=lf

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg   binary
#*.png   binary
#*.gif   binary

###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc   diff=astextplain
#*.DOC   diff=astextplain
#*.docx  diff=astextplain
#*.DOCX  diff=astextplain
#*.dot   diff=astextplain
#*.DOT   diff=astextplain
#*.pdf   diff=astextplain
#*.PDF   diff=astextplain
#*.rtf   diff=astextplain
#*.RTF   diff=astextplain


================================================
FILE: .github/CODEOWNERS
================================================
/.github/CODEOWNERS                                             @altinn/team-altinn-studio
#
# This file is generated by .github/scripts/codeowners-generate.mjs.
# Keep CODEOWNERS narrow by default
# so unrelated diffs do not trigger owner review requests.
#

# Team Core
src/test/K6/**/docker-compose.yml                               @altinn/team-core
src/test/K6/**/package.json                                     @altinn/team-core
src/test/K6/**/yarn.lock                                        @altinn/team-core

# Team Utforming
.github/workflows/app-frontend-codeql.yml                       @altinn/team-altinn-studio-utforming
.github/workflows/app-frontend-compare-repos.yml                @altinn/team-altinn-studio-utforming
.github/workflows/app-frontend-cypress.yml                      @altinn/team-altinn-studio-utforming
.github/workflows/app-frontend-k6-browser.yml                   @altinn/team-altinn-studio-utforming
.github/workflows/app-frontend-lighthouse-ci.yml                @altinn/team-altinn-studio-utforming
.github/workflows/app-frontend-unit-tests.yml                   @altinn/team-altinn-studio-utforming
.github/workflows/designer-frontend-codeql.yml                  @altinn/team-altinn-studio-utforming
.github/workflows/designer-frontend-config-coverage.yml         @altinn/team-altinn-studio-utforming
.github/workflows/designer-frontend-playwright-staging.yml      @altinn/team-altinn-studio-utforming
.github/workflows/designer-frontend-run-playwright-on-pr.yaml   @altinn/team-altinn-studio-utforming
.github/workflows/designer-frontend-unit-tests.yml              @altinn/team-altinn-studio-utforming
.github/workflows/storybook-to-github-pages.yaml                @altinn/team-altinn-studio-utforming
.github/workflows/studio-components-deploy.yaml                 @altinn/team-altinn-studio-utforming
.github/workflows/studio-components-legacy-deploy.yaml          @altinn/team-altinn-studio-utforming
src/App/frontend/**/docker-compose.yml                          @altinn/team-altinn-studio-utforming
src/App/frontend/**/package.json                                @altinn/team-altinn-studio-utforming
src/Designer/frontend/**/package.json                           @altinn/team-altinn-studio-utforming
src/Designer/frontend/**/yarn.lock                              @altinn/team-altinn-studio-utforming

# Team Access Info
.github/workflows/playwright-resourceadm.yml                    @altinn/team-access-info
.github/workflows/run-playwright-resourceadm-on-pr.yml          @altinn/team-access-info
src/Designer/frontend/resourceadm/**/package.json               @altinn/team-access-info

# AI
.github/workflows/deploy-studio-mcp-server.yaml                 @ErlingHauan
.github/workflows/mcp-build.yaml                                @ErlingHauan
.github/workflows/mcp-test.yaml                                 @ErlingHauan
src/AI/agents/**/docker-compose.*.yml                           @ErlingHauan
src/AI/agents/**/docker-compose.yaml                            @ErlingHauan
src/AI/agents/**/dockerfile*                                    @ErlingHauan
src/AI/agents/**/pyproject.toml                                 @ErlingHauan
src/AI/agents/**/requirements-dev.txt                           @ErlingHauan
src/AI/agents/**/requirements.txt                               @ErlingHauan
src/AI/augmenter-agent/**/*.csproj                              @ErlingHauan
src/AI/augmenter-agent/**/docker-compose.yaml                   @ErlingHauan
src/AI/augmenter-agent/**/dockerfile*                           @ErlingHauan
src/AI/mcp/**/docker-compose.yaml                               @ErlingHauan
src/AI/mcp/**/dockerfile*                                       @ErlingHauan
src/AI/mcp/**/pyproject.toml                                    @ErlingHauan
src/AI/mcp/**/requirements.txt                                  @ErlingHauan
src/AI/mcp/**/uv.lock                                           @ErlingHauan

# Squad Kjøring
.github/workflows/cli-build-test.yaml                           @altinn/team-altinn-studio-kjoring
.github/workflows/construct-environments-script-test.yaml       @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-gitea-runners.yaml                     @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-lhci-server.yaml                       @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-loadbalancer.yaml                      @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-repositories.yaml                      @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-runtime-apps-config.yaml               @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-runtime-flux-config.yaml               @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-runtime-gateway.yaml                   @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-runtime-grafana-manifests.yaml         @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-runtime-kubernetes-wrapper.yaml        @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-runtime-localtest.yaml                 @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-runtime-observability.yaml             @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-runtime-operator.yaml                  @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-runtime-pdf3.yaml                      @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-runtime-syncroot.yaml                  @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-studio-observability.yaml              @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-studio-otel-operator.yaml              @altinn/team-altinn-studio-kjoring
.github/workflows/deploy-studio-syncroot.yaml                   @altinn/team-altinn-studio-kjoring
.github/workflows/deployer-check.yaml                           @altinn/team-altinn-studio-kjoring
.github/workflows/gitea-check-texts-file.yml                    @altinn/team-altinn-studio-kjoring
.github/workflows/gitea-runner-test.yml                         @altinn/team-altinn-studio-kjoring
.github/workflows/release-studioctl.yaml                        @altinn/team-altinn-studio-kjoring
.github/workflows/releaser-build-test.yml                       @altinn/team-altinn-studio-kjoring
.github/workflows/repositories-scan.yml                         @altinn/team-altinn-studio-kjoring
.github/workflows/runtime-devenv-build.yml                      @altinn/team-altinn-studio-kjoring
.github/workflows/runtime-gateway-tests.yaml                    @altinn/team-altinn-studio-kjoring
.github/workflows/runtime-health-build.yml                      @altinn/team-altinn-studio-kjoring
.github/workflows/runtime-kubernetes-wrapper-build.yaml         @altinn/team-altinn-studio-kjoring
.github/workflows/runtime-localtest-build.yml                   @altinn/team-altinn-studio-kjoring
.github/workflows/runtime-operator-build.yml                    @altinn/team-altinn-studio-kjoring
.github/workflows/runtime-pdf3-build.yml                        @altinn/team-altinn-studio-kjoring
.github/workflows/template-runtime-construct-environments.yaml  @altinn/team-altinn-studio-kjoring
.github/workflows/template-studio-construct-environments.yaml   @altinn/team-altinn-studio-kjoring
.github/workflows/validate-renovate.yaml                        @altinn/team-altinn-studio-kjoring
charts/altinn-loadbalancer-config/**/Chart.yaml                 @altinn/team-altinn-studio-kjoring
charts/altinn-loadbalancer/**/Chart.yaml                        @altinn/team-altinn-studio-kjoring
charts/gitea-org-runner-config/**/Chart.yaml                    @altinn/team-altinn-studio-kjoring
charts/gitea-org-runner/**/Chart.yaml                           @altinn/team-altinn-studio-kjoring
src/cli/**/*.csproj                                             @altinn/team-altinn-studio-kjoring
src/cli/**/Directory.Packages.props                             @altinn/team-altinn-studio-kjoring
src/cli/**/global.json                                          @altinn/team-altinn-studio-kjoring
src/cli/**/go.mod                                               @altinn/team-altinn-studio-kjoring
src/cli/**/go.sum                                               @altinn/team-altinn-studio-kjoring
src/gitea-proxy/**/Dockerfile*                                  @altinn/team-altinn-studio-kjoring
src/gitea-runner/**/Dockerfile*                                 @altinn/team-altinn-studio-kjoring
src/gitea/**/Dockerfile*                                        @altinn/team-altinn-studio-kjoring
src/gitea/**/package.json                                       @altinn/team-altinn-studio-kjoring
src/lhci-server/**/compose.yaml                                 @altinn/team-altinn-studio-kjoring
src/lhci-server/**/Dockerfile*                                  @altinn/team-altinn-studio-kjoring
src/lhci-server/**/package.json                                 @altinn/team-altinn-studio-kjoring
src/lhci-server/**/yarn.lock                                    @altinn/team-altinn-studio-kjoring
src/load-balancer/**/Dockerfile*                                @altinn/team-altinn-studio-kjoring
src/Runtime/devenv/**/go.mod                                    @altinn/team-altinn-studio-kjoring
src/Runtime/devenv/**/go.sum                                    @altinn/team-altinn-studio-kjoring
src/Runtime/gateway/**/*.csproj                                 @altinn/team-altinn-studio-kjoring
src/Runtime/gateway/**/compose.yaml                             @altinn/team-altinn-studio-kjoring
src/Runtime/gateway/**/Directory.Packages.props                 @altinn/team-altinn-studio-kjoring
src/Runtime/gateway/**/Dockerfile*                              @altinn/team-altinn-studio-kjoring
src/Runtime/gateway/**/global.json                              @altinn/team-altinn-studio-kjoring
src/Runtime/gateway/**/go.mod                                   @altinn/team-altinn-studio-kjoring
src/Runtime/gateway/**/go.sum                                   @altinn/team-altinn-studio-kjoring
src/Runtime/kubernetes-wrapper/**/*.csproj                      @altinn/team-altinn-studio-kjoring
src/Runtime/kubernetes-wrapper/**/Directory.Packages.props      @altinn/team-altinn-studio-kjoring
src/Runtime/kubernetes-wrapper/**/Dockerfile*                   @altinn/team-altinn-studio-kjoring
src/Runtime/kubernetes-wrapper/**/global.json                   @altinn/team-altinn-studio-kjoring
src/Runtime/localtest/**/*.csproj                               @altinn/team-altinn-studio-kjoring
src/Runtime/localtest/**/docker-compose.*.yml                   @altinn/team-altinn-studio-kjoring
src/Runtime/localtest/**/docker-compose.yml                     @altinn/team-altinn-studio-kjoring
src/Runtime/localtest/**/Dockerfile*                            @altinn/team-altinn-studio-kjoring
src/Runtime/localtest/**/global.json                            @altinn/team-altinn-studio-kjoring
src/Runtime/localtest/**/package-lock.json                      @altinn/team-altinn-studio-kjoring
src/Runtime/localtest/**/package.json                           @altinn/team-altinn-studio-kjoring
src/Runtime/localtest/**/podman-compose.yml                     @altinn/team-altinn-studio-kjoring
src/Runtime/operator/**/*.csproj                                @altinn/team-altinn-studio-kjoring
src/Runtime/operator/**/Chart.yaml                              @altinn/team-altinn-studio-kjoring
src/Runtime/operator/**/docker-compose.yml                      @altinn/team-altinn-studio-kjoring
src/Runtime/operator/**/Dockerfile*                             @altinn/team-altinn-studio-kjoring
src/Runtime/operator/**/go.mod                                  @altinn/team-altinn-studio-kjoring
src/Runtime/operator/**/go.sum                                  @altinn/team-altinn-studio-kjoring
src/Runtime/pdf3/**/Dockerfile*                                 @altinn/team-altinn-studio-kjoring
src/Runtime/pdf3/**/go.mod                                      @altinn/team-altinn-studio-kjoring
src/Runtime/pdf3/**/go.sum                                      @altinn/team-altinn-studio-kjoring
src/Runtime/pdf3/**/package.json                                @altinn/team-altinn-studio-kjoring
src/Runtime/pdf3/**/yarn.lock                                   @altinn/team-altinn-studio-kjoring
src/tools/health/**/go.mod                                      @altinn/team-altinn-studio-kjoring
src/tools/health/**/go.sum                                      @altinn/team-altinn-studio-kjoring
src/tools/releaser/**/go.mod                                    @altinn/team-altinn-studio-kjoring

# Squad Flyt
.github/workflows/deploy-runtime-workflow-engine-app.yaml       @altinn/team-altinn-studio-flyt
.github/workflows/runtime-workflow-engine-app-tests.yaml        @altinn/team-altinn-studio-flyt
.github/workflows/runtime-workflow-engine-tests.yaml            @altinn/team-altinn-studio-flyt
src/Runtime/workflow-engine-app/**/*.csproj                     @altinn/team-altinn-studio-flyt
src/Runtime/workflow-engine-app/**/Directory.Packages.props     @altinn/team-altinn-studio-flyt
src/Runtime/workflow-engine-app/**/docker-compose.yaml          @altinn/team-altinn-studio-flyt
src/Runtime/workflow-engine-app/**/Dockerfile*                  @altinn/team-altinn-studio-flyt
src/Runtime/workflow-engine/**/*.csproj                         @altinn/team-altinn-studio-flyt
src/Runtime/workflow-engine/**/Directory.Packages.props         @altinn/team-altinn-studio-flyt
src/Runtime/workflow-engine/**/docker-compose.yaml              @altinn/team-altinn-studio-flyt
src/Runtime/workflow-engine/**/Dockerfile*                      @altinn/team-altinn-studio-flyt
src/Runtime/workflow-engine/**/global.json                      @altinn/team-altinn-studio-flyt


================================================
FILE: .github/ISSUE_TEMPLATE/analysis.yml
================================================
name: Analysis 🔬
description: Create a new analysis issue for something big that needs some insight.
labels: ["kind/analysis", "status/draft"]
body:          
  - type: textarea
    id: description
    attributes:
      label: Description
      description: Description of the the problem or area that is to be analysed. 
    validations:
      required: true

  - type: textarea
    id: in-scope
    attributes:
      label: In scope
      description: What's in scope for this analysis?

  - type: textarea
    id: out-of-scope
    attributes:
      label: Out of scope
      description: What's out of scope for this analysis?

  - type: textarea
    id: additional-information
    attributes:
      label: Additional Information
      description: Links to relevant resources, documentation of other issues, UX sketches, technical architecture/requirements.

  - type: textarea
    id: analysis
    attributes:
      label: Analysis
      description: A description of how the analysis was done, what alternatives were considered etc

  - type: textarea
    id: conclusion
    attributes:
      label: Conclusion
      description: What have we found out by doing this analysis

  - type: markdown
    attributes:
      value: |
        * Remember to add correct labels.
        * Remember to link all relevant issues (bugs, user stories, chores).


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug Report 🐛
description: File a bug report here
labels: ["kind/bug", "status/triage"]
type: Bug
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this bug report 🤗
        Make sure there aren't any open/closed issues for this topic 😃

  - type: textarea
    id: bug-description
    attributes:
      label: Description of the bug
      description: Give us a brief description of what happened and what should have happened
    validations:
      required: true

  - type: textarea
    id: steps-to-reproduce
    attributes:
      label: Steps To Reproduce
      description: Steps to reproduce the behavior.
      placeholder: |
        1. Go to '...'
        2. Click on '...'
        3. Scroll down to '...'
        4. See error
    validations:
      required: true
  - type: textarea
    id: additional-information
    attributes:
      label: Additional Information
      description: |
        Provide any additional information such as logs, screenshots, links, scenarios in which the bug occurs so that it facilitates resolving the issue.


================================================
FILE: .github/ISSUE_TEMPLATE/chore.yml
================================================
name: Chore ✅
description: Create a none user-story issue (chore, tech issue, backend issue)
labels: ["kind/chore", "status/draft"]
type: Task
body:
  - type: markdown
    attributes:
      value: |
        Please make sure this chore hasn't been already submitted by someone by looking through other open/closed chore issues.

  - type: textarea
    id: description
    attributes:
      label: Description
      description: Give us a brief description of the work that needs to be done.
    validations:
      required: true

  - type: textarea
    id: additional-information
    attributes:
      label: Additional Information
      description: Add more details as need like links, architecture sketches etc.

  - type: textarea
    id: tasks
    attributes:
      label: Tasks
      description: Add tasks to be done as part of this issue.

  - type: textarea
    id: acceptance-criterias
    attributes:
      label: Acceptance Criterias
      description: Define the acceptance criterias that this user story should testet against (if relevant).

  - type: markdown
    attributes:
      value: |
        * Check the [Definition of Ready](https://docs.altinn.studio/community/devops/definition-of-ready/) if you need hints on what to include.
        * Remember to add the correct labels (status/*, team/*, org/*)


================================================
FILE: .github/ISSUE_TEMPLATE/epic-security-requirements-verification.yml
================================================
name: Epic security requirements verification 💎✅
description: This issue type will be used for verification of security requirements in epics
title: Security requirements verification for (epic name)
body:
  - type: markdown
    attributes:
      value: |
        ### Context
        The security requirements listed in this issue, are the subset of [OWASP Application Security Verification Standard (ASVS)](https://owasp.org/www-project-application-security-verification-standard/) that need to be verified by product teams upon completion of an epic.
        ### How to use this issue type:
        1. In the [plan phase](https://pedia.altinn.cloud/sec/security-architecture/appsec/devsecops/plan/#identify-security-requirements), go to [AltinnPedia](https://pedia.altinn.cloud/sec/security-architecture/governance/policies/asvs/per-team/) to see all security requirements that should be considered per epic.
        2. Go through the [security requirements](https://pedia.altinn.cloud/sec/security-architecture/governance/policies/asvs/per-team/) and un-check those that aren't relevant for the epic in question. Copy the [markdown representation](https://pedia.altinn.cloud/sec/security-architecture/governance/policies/asvs/per-team/#markdown-for-issues) (bottom of the page) into this Github issue.
        3. Before the epic is done, verify the relevant (non-struck through) requirements in this Github issue.
  - type: textarea
    attributes:
        label: Verification of security requirements
        value: |
                (Copy from textfield in https://pedia.altinn.cloud/sec/security-architecture/governance/policies/asvs/per-team/#markdown-for-issues)


================================================
FILE: .github/ISSUE_TEMPLATE/epic.yml
================================================
name: Epic 💎
description: Create a new epic (very big user story)
labels: ["Epic", "status/draft"]
type: Epic
body:
  - type: textarea
    id: description
    attributes:
      label: Description
      description: A quick introduction to the user need. Make it clear for who, why and what.
    validations:
      required: true

  - type: textarea
    id: in-scope
    attributes:
      label: In scope
      description: What's in scope for this epic?

  - type: textarea
    id: out-of-scope
    attributes:
      label: Out of scope
      description: What's out of scope for this epic?

  - type: textarea
    id: additional-information
    attributes:
      label: Additional Information
      description: Links to relevant resources, documentation of other issues, UX sketches, technical architecture/requirements.

  - type: textarea
    id: tasks
    attributes:
      label: Tasks
      description: Add tasks that are considered user story candidates.

  - type: markdown
    attributes:
      value: |
        * Check the [Definition of Ready](https://docs.altinn.studio/community/devops/definition-of-ready/) if you need hints on what to include.
        * Remember to link all relevant issues (bugs, user stories, chores)


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: Feature Request ✨
description: Request a new feature or enhancement
labels: ["kind/feature-request", "status/triage"]
type: Enhancement
body:
  - type: markdown
    attributes:
      value: |
        Please make sure this feature request hasn't been already submitted by someone by looking through other open/closed issues

  - type: textarea
    id: description
    attributes:
      label: Description
      description: Give us a brief description of the feature or enhancement you would like
    validations:
      required: true

  - type: textarea
    id: additional-information
    attributes:
      label: Additional Information
      description: Give us some additional information on the feature request like proposed solutions, links, screenshots, etc.


================================================
FILE: .github/ISSUE_TEMPLATE/question.yml
================================================
name: Question ❓
description: Ask a question related to this product.
labels: ["kind/question", "status/triage"]
body:
  - type: markdown
    attributes:
      value: |
        Unsure if you've found a bug or have a feature request? Use this template to ask us a question to find out.
        
  - type: textarea
    id: question
    attributes:
      label: Question
      description: How can we help you? What do you want to know?
    validations:
      required: true
      
  - type: textarea
    id: additional-information
    attributes:
      label: Additional Information
      description: |
        Add any other context, screenshots or code that might help us understanding and answering the question.


================================================
FILE: .github/ISSUE_TEMPLATE/test_plan.md
================================================
---
name: Testplan 🧪
about: Create a new testplan
title: Testplan for <EPIC/FEATURE/CASE>
labels: kind/testplan
assignees: ''
---

| **Delivery**             | <EPIC/FEATURE/CASE>                               |
|:-------------------------|:--------------------------------------------------|
| **Roadmap**              |                                                   |
| **Involved teams**       | @team-...                                         |
| **Due date**             | xx.xx.xxxx                                        |
| **Test period**          | xx.xx.xxxx - xx.xx.xxxx                           |


## Dependencies

| **Dependency**                     | **Owner**                  | **Status** |
|:-----------------------------------|:---------------------------|:-----------|
|                                    |                            |            |
|                                    |                            |            |
|                                    |                            |            |


## Functional tests
> ✅ OK, ⚠️ In progress, 🛑 Failed
> During test period run tests covering business needs and requirements listed here

| Scenario   | Test data | Done by     | Importance | Level  | Status | Comment |
|------------|-----------|-------------|------------|---------|-------|---------|
|            |           | @...        | High       |         | ✅     |        |
|            |           | @...        | Low        |         | 🛑     |        |


## Non-functional tests

- Performance tests: Link to runs and documentation when needed
- Security tests: Link to documentation when needed


## Clarifications

| **Question**                     | **Answer**                   | **Date **  |
|:---------------------------------|:-----------------------------|:-----------|
|                                  |                              |            |
|                                  |                              |            |

## ⚠️ Out of scope
> List discussed functionality out of scope or that might be relevant in a later release


## :information_source: Useful links

### Sketches
### Architecture diagrams
### Test environment
### Testd ata
### Link to milestone


================================================
FILE: .github/ISSUE_TEMPLATE/user_story.yml
================================================
name: User Story 😃
description: Create a new user story
labels: ['kind/user-story', 'status/draft']
body:
  - type: markdown
    attributes:
      value: |
        * Please make sure this user story hasn't been already submitted by someone by looking through other open/closed user stories.
        * Consider the [INVEST](https://www.pivotaltracker.com/blog/how-to-invest-in-your-user-stories) qualities when writing the story

  - type: textarea
    id: userstory
    attributes:
      label: User story
      description: Give us a brief WHO, WHAT, and WHY of this user story.
      value: As a [persona], I want to [do something] so that [I can achieve a goal].
      placeholder: As a [persona], I want to [do something] so that [I can achieve a goal].
    validations:
      required: true

  - type: textarea
    id: description
    attributes:
      label: User story
      description: You can provide a more detailed description of the user story here if needed.
      placeholder: Describe the user story in more detail

  - type: textarea
    id: design
    attributes:
      label: Design - Screenshots and Figma links
      description: Add screenshots where relevant, and always link to the Figma design if available.

  - type: textarea
    id: additional-information
    attributes:
      label: Additional Information
      description: Add more details as needed, like links, open questions, etc.

  - type: textarea
    id: tasks
    attributes:
      label: Tasks
      description: Add tasks to be done as part of this story.

  - type: textarea
    id: acceptance-criterias
    attributes:
      label: Acceptance Criterias
      description: Define the acceptance criterias that this user story should be tested against

  - type: markdown
    attributes:
      value: |
        * Check the [Definition of Ready](https://docs.altinn.studio/community/devops/definition-of-ready/) if you need hints on what to include.
        * Remember to add the correct labels (status/*, org/*, ...)


================================================
FILE: .github/actions/app-build-frontend/action.yaml
================================================
name: "App Build Frontend"
description: "Builds app frontend"
runs:
  using: "composite"
  steps:
    - name: Cache frontend build
      id: cache-frontend
      uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
      with:
        path: src/App/frontend/dist
        key: frontend-build-${{ runner.os }}-${{ hashFiles('src/App/frontend/package.json') }}-${{ hashFiles('src/App/frontend/src/**') }}
        restore-keys: |
          frontend-build-${{ runner.os }}-${{ hashFiles('src/App/frontend/package.json') }}-

    - name: Installing Frontend Dependencies
      if: steps.cache-frontend.outputs.cache-hit != 'true'
      uses: ./.github/actions/yarn-install

    - name: Build frontend
      if: steps.cache-frontend.outputs.cache-hit != 'true'
      working-directory: src/App/frontend
      run: yarn run build
      shell: bash

    - name: Save frontend build
      uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
      with:
        name: app-frontend-dist
        path: src/App/frontend/dist
        if-no-files-found: error



================================================
FILE: .github/actions/app-run-local-env/action.yaml
================================================
name: "App Run Local Environment"
description: "Starts the frontend server and/or localtest"
inputs:
  run-frontend:
    description: "Whether to serve frontend with http-server"
    required: true
  run-localtest:
    description: "Whether to start localtest with studioctl"
    required: true
  frontend-port:
    description: "Port for frontend server"
    required: false
    default: "8080"
  app-run-targets-json:
    description: "JSON array of app run targets. Each target requires path and can include image for prebuilt app images."
    required: false
runs:
  using: "composite"
  steps:
    - name: Validate inputs
      run: |
        if [[ "${{ inputs.run-frontend }}" != "true" && "${{ inputs.run-frontend }}" != "false" ]]; then
          echo "Error: run-frontend must be 'true' or 'false', got: ${{ inputs.run-frontend }}"
          exit 1
        fi
        if [[ "${{ inputs.run-localtest }}" != "true" && "${{ inputs.run-localtest }}" != "false" ]]; then
          echo "Error: run-localtest must be 'true' or 'false', got: ${{ inputs.run-localtest }}"
          exit 1
        fi
        # Validate frontend-port is a valid port number (1-65535)
        if [[ ! "${{ inputs.frontend-port }}" =~ ^[0-9]+$ ]] || [[ "${{ inputs.frontend-port }}" -lt 1 ]] || [[ "${{ inputs.frontend-port }}" -gt 65535 ]]; then
          echo "Error: frontend-port must be a valid port number (1-65535), got: ${{ inputs.frontend-port }}"
          exit 1
        fi
      shell: bash

    - name: Setup studioctl
      if: ${{ inputs.run-localtest == 'true' }}
      uses: ./.github/actions/setup-studioctl

    - name: Set up Docker Buildx
      if: ${{ inputs.run-localtest == 'true' }}
      uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0

    - name: Login to GitHub Container Registry
      if: ${{ inputs.run-localtest == 'true' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }}
      uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
      with:
        registry: ghcr.io
        username: ${{ github.actor }}
        password: ${{ github.token }}

    - name: Start localtest
      if: ${{ inputs.run-localtest == 'true' }}
      working-directory: ${{ github.workspace }}
      shell: bash
      env:
        STUDIOCTL_REGISTRY_CACHE_WRITE: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
      run: |
        studioctl env up --detach

    - name: Download the built frontend
      if: ${{ inputs.run-frontend == 'true' }}
      uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
      with:
        name: app-frontend-dist
        path: src/App/frontend/dist

    - name: Setup Node.js
      if: ${{ inputs.run-frontend == 'true' }}
      uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
      with:
        node-version: '22'
        cache: 'yarn'
        cache-dependency-path: yarn.lock

    - name: Install dependencies
      if: ${{ inputs.run-frontend == 'true' }}
      working-directory: src/App/frontend
      run: yarn install --immutable
      shell: bash

    - name: Start frontend server
      if: ${{ inputs.run-frontend == 'true' }}
      working-directory: src/App/frontend
      run: |
        echo "Starting frontend server on port ${{ inputs.frontend-port }}..."
        yarn run serve -p ${{ inputs.frontend-port }} > frontend-server.log 2>&1 &
        echo $! > frontend-server.pid
        echo "Frontend server started with PID $(cat frontend-server.pid)"
      shell: bash

    - name: Wait for frontend server to be ready
      if: ${{ inputs.run-frontend == 'true' }}
      run: |
        echo "Waiting for frontend server to be ready..."
        timeout 60 bash -c 'until curl -f http://localhost:${{ inputs.frontend-port }} > /dev/null 2>&1; do sleep 2; done'
        echo "Frontend server is ready on http://localhost:${{ inputs.frontend-port }}"
      shell: bash

    - name: Start app containers
      if: ${{ inputs.run-localtest == 'true' && inputs.app-run-targets-json != '' }}
      uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
      env:
        APP_RUN_TARGETS_JSON: ${{ inputs.app-run-targets-json }}
        STUDIOCTL_REGISTRY_CACHE_WRITE: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
      with:
        script: |
          const workspace = process.env.GITHUB_WORKSPACE;
          const maxParallelStarts = 4;

          const targetsJson = process.env.APP_RUN_TARGETS_JSON;
          let targets;
          try {
            targets = JSON.parse(targetsJson);
          } catch (error) {
            throw new Error(`app-run-targets-json is not valid JSON: ${error.message}`);
          }
          if (!Array.isArray(targets)) {
            throw new Error('app-run-targets-json must be a JSON array.');
          }

          function targetRunArgs(path, image) {
            const args = ['run', '--mode', 'container', '--detach', '--random-host-port', '--path', path];
            if (image) {
              args.push('--image-tag', image, '--pull', '--skip-build');
            }
            return args;
          }

          function validateTarget(target) {
            if (!target || typeof target !== 'object' || Array.isArray(target)) {
              throw new Error('Each app run target must be an object.');
            }
            if (typeof target.path !== 'string' || target.path === '') {
              throw new Error('Each app run target requires a non-empty path.');
            }
            if (target.image !== undefined && (typeof target.image !== 'string' || target.image === '')) {
              throw new Error('App run target image must be a non-empty string when set.');
            }
            return target;
          }

          const validTargets = targets.map(validateTarget);
          if (validTargets.length === 0) {
            throw new Error('No app containers were started.');
          }

          let nextTarget = 0;
          async function startNext(workerId) {
            while (nextTarget < validTargets.length) {
              const target = validTargets[nextTarget++];
              core.info(`Worker ${workerId}: starting ${target.path}`);
              await exec.exec('studioctl', targetRunArgs(target.path, target.image), { cwd: workspace });
            }
          }

          const workerCount = Math.min(maxParallelStarts, validTargets.length);
          await Promise.all(Array.from({ length: workerCount }, (_, index) => startNext(index + 1)));


================================================
FILE: .github/actions/app-stop-local-env/action.yaml
================================================
name: "App Stop Local Environment"
description: "Stops localtest and app containers"
runs:
  using: "composite"
  steps:
    - name: Log localtest diagnostics
      if: failure()
      shell: bash
      run: |
        if command -v studioctl > /dev/null 2>&1; then
          studioctl server status || true
          studioctl app ps || true

          apps_json="$(mktemp)"
          if studioctl app ps --json > "$apps_json"; then
            node -e '
              const fs = require("fs");
              const data = JSON.parse(fs.readFileSync(process.argv[1], "utf8"));
              for (const app of data.apps ?? []) {
                if (app.id) console.log(app.id);
              }
            ' "$apps_json" | while IFS= read -r id; do
              echo "::group::studioctl app logs --id $id"
              studioctl app logs --id "$id" --tail 200 --follow=false || true
              echo "::endgroup::"
            done || true
          fi
          rm -f "$apps_json"

          echo "::group::studioctl-server logs"
          studioctl server logs --tail 200 --follow=false || true
          echo "::endgroup::"
        fi

    - name: Stop localtest
      shell: bash
      run: |
        if command -v studioctl > /dev/null 2>&1; then
          studioctl app stop --all || true
          studioctl env down || true
          studioctl server down || true
        fi


================================================
FILE: .github/actions/codeql-config/action.yaml
================================================
name: "CodeQL Config"
description: "Generates a workflow-specific CodeQL config from language defaults and scan paths"
inputs:
  language:
    description: "CodeQL language"
    required: true
  queries:
    description: "CodeQL query suites"
    required: false
    default: "security-extended,security-and-quality"
  paths:
    description: "Newline-separated repository paths to include in analysis"
    required: false
    default: ""
outputs:
  config-file:
    description: "Path to the generated CodeQL config file"
    value: ${{ steps.generate.outputs.config-file }}
  queries:
    description: "CodeQL query suites to pass to init"
    value: ${{ steps.generate.outputs.queries }}
runs:
  using: "composite"
  steps:
    - name: Generate CodeQL config
      id: generate
      shell: bash
      run: |
        set -euo pipefail

        base_config="${GITHUB_WORKSPACE}/.github/codeql/codeql-config-${{ inputs.language }}.yml"
        if [[ ! -f "$base_config" ]]; then
          echo "Missing CodeQL config for language: ${{ inputs.language }}" >&2
          echo "Expected file: $base_config" >&2
          exit 1
        fi

        generated_config_dir="${GITHUB_WORKSPACE}/.github/codeql/generated"
        mkdir -p "$generated_config_dir"

        config_file="${generated_config_dir}/codeql-config-${{ inputs.language }}-${GITHUB_RUN_ID}-${GITHUB_JOB}.yml"
        cp "$base_config" "$config_file"

        if [[ -n "${{ inputs.paths }}" ]]; then
          printf '\npaths:\n' >> "$config_file"
          while IFS= read -r path; do
            if [[ -z "${path//[[:space:]]/}" ]]; then
              continue
            fi
            escaped_path=$(printf "%s" "$path" | sed "s/'/''/g")
            printf "  - '%s'\n" "$escaped_path" >> "$config_file"
          done <<< "${{ inputs.paths }}"
        fi

        echo "config-file=$config_file" >> "$GITHUB_OUTPUT"
        echo "queries=${{ inputs.queries }}" >> "$GITHUB_OUTPUT"


================================================
FILE: .github/actions/setup-studioctl/action.yaml
================================================
name: "Setup studioctl"
description: "Builds a dev studioctl install for CI workflows"
runs:
  using: "composite"
  steps:
    - name: Setup Go
      uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6
      with:
        go-version-file: src/cli/go.mod

    - name: Setup .NET
      uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5
      with:
        dotnet-version: "10.0.x"

    - name: Build studioctl dev install
      working-directory: src/cli
      run: make dev-install
      shell: bash

    - name: Set studioctl paths
      run: |
        studioctl_home="${GITHUB_WORKSPACE}/src/cli/build/dev-home"
        echo "STUDIOCTL_HOME=$studioctl_home" >> "$GITHUB_ENV"
        echo "STUDIOCTL_INTERNAL_DEV=true" >> "$GITHUB_ENV"
        echo "$studioctl_home/bin" >> "$GITHUB_PATH"
      shell: bash


================================================
FILE: .github/actions/yarn-install/action.yaml
================================================
name: "My Shared Steps"
description: "Doing yarn installs with proper caching"
inputs:
  working-directory:
    description: "The directory to run yarn install in"
    required: false
    default: "."
runs:
  using: "composite"
  steps:
    - name: 'Setting up Node'
      uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
      with:
        cache: 'yarn'
        cache-dependency-path: ${{ inputs.working-directory }}/yarn.lock
        node-version: '22'

    - name: "Getting yarn cache directory path"
      id: yarn-cache-dir-path
      run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
      shell: bash
      working-directory: ${{ inputs.working-directory }}

    - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
      id: yarn-cache
      with:
        path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
        key: ${{ runner.os }}-yarn-${{ hashFiles(format('{0}/yarn.lock', inputs.working-directory)) }}
        restore-keys: |
          ${{ runner.os }}-yarn-

    - name: 'Installing Dependencies'
      run: yarn install --immutable --inline-builds
      shell: bash
      working-directory: ${{ inputs.working-directory }}
      env:
        YARN_ENABLE_GLOBAL_CACHE: 'false'
        YARN_NM_MODE: 'hardlinks-local'
        HUSKY: '0'


================================================
FILE: .github/codeql/codeql-config-csharp.yml
================================================
query-filters:
  # Not security-related, better covered by Roslyn analyzers
  # Warnings:
  - exclude:
      id: cs/useless-assignment-to-local
  - exclude:
      id: cs/constant-condition
  - exclude:
      id: cs/call-to-obsolete-method
  - exclude:
      id: cs/useless-cast-to-self
  - exclude:
      id: cs/local-not-disposed
  # All low-severity recommendations ("Note" in the UI)
  - exclude:
      problem.severity:
        - recommendation


================================================
FILE: .github/codeql/codeql-config-javascript.yml
================================================
query-filters:
  - exclude:
      id: js/ml-powered/xss
  - exclude:
      id: js/ml-powered/sql-injection
  - exclude:
      id: js/ml-powered/nosql-injection
  # All low-severity recommendations ("Note" in the UI)
  - exclude:
      problem.severity:
        - recommendation
paths-ignore:
  - '**/*.test.js'
  - '**/*.test.jsx'
  - '**/*.test.ts'
  - '**/*.test.tsx'
  - '**/*.spec.js'
  - '**/*.spec.jsx'
  - '**/*.spec.ts'
  - '**/*.spec.tsx'
  - '**/__snapshots__/**'
  - '**/test/**'
  - '**/tests/**'
  - '**/testing/**'


================================================
FILE: .github/containerscan/allowedlist.yaml
================================================
general:
  vulnerabilities: 
    - CVE-2020-7788
    - CVE-2022-41032


================================================
FILE: .github/labeler.yml
================================================
# Labels for solutions
solution/platform:
- changed-files:
  - any-glob-to-any-file: 'src/Altinn.Platform/**/*'

solution/studio/designer:
- changed-files:
  - any-glob-to-any-file: 'src/Designer/**/*'

solution/studio/repos:
- changed-files:
  - any-glob-to-any-file: 'src/gitea/**/*'

# Labels for areas
area/app-deploy:
- changed-files:
  - any-glob-to-any-file: ['src/Designer/frontend/app-development/features/appPublish/**/*', 'src/Designer/backend/src/Designer/**/*Deployment*.cs', 'src/Designer/backend/src/Designer/**/*Release*.cs']

area/app-preview:
- changed-files:
  - any-glob-to-any-file: ['src/Designer/frontend/app-preview/**/*', 'src/Designer/backend/src/Designer/Controllers/PreviewController.cs']

area/authorization:
- changed-files:
  - any-glob-to-any-file: ['src/Designer/frontend/packages/policy-editor/**/*']

area/content-library:
- changed-files:
  - any-glob-to-any-file: ['src/Designer/frontend/libs/content-library/**/*']

area/dashboard:
- changed-files:
  - any-glob-to-any-file: ['src/Designer/frontend/dashboard/**/*']

area/data-modeling:
- changed-files:
  - any-glob-to-any-file: ['src/Designer/frontend/packages/schema-editor/**/*', 'src/Designer/frontend/packages/schema-model/**/*', 'src/Designer/frontend/app-development/features/dataModelling/**/*', 'src/Designer/backend/src/DataModeling/**/*']

area/overview:
- changed-files:
  - any-glob-to-any-file: ['src/Designer/frontend/app-development/features/overview/**/*']

area/process:
- changed-files:
  - any-glob-to-any-file: ['src/Designer/frontend/app-development/features/processEditor/**/*', 'src/Designer/frontend/packages/process-editor/**/*', 'src/Designer/backend/src/Designer/**/*ProcessesModeling*.cs']

area/resource-registry:
- changed-files:
  - any-glob-to-any-file: 'src/Designer/frontend/resourceadm/**/*'

area/settings:
- changed-files:
  - any-glob-to-any-file: 'src/Designer/frontend/app-development/layout/SettingsModalButton/**/*'

area/studio-root:
- changed-files:
  - any-glob-to-any-file: 'src/Designer/frontend/studio-root/**/*'

area/text-editor:
- changed-files:
  - any-glob-to-any-file: ['src/Designer/frontend/packages/text-editor/**', 'src/Designer/frontend/app-development/features/textEditor/**/*', 'src/Designer/backend/src/Designer/**/*Text*.cs']

area/ui-editor:
- changed-files:
  - any-glob-to-any-file: 'src/Designer/frontend/packages/ux-editor-v4/**/*'

area/version-control:
- changed-files:
  - any-glob-to-any-file: 'src/Designer/frontend/packages/shared/src/components/GiteaHeader/**/*'

## Other labels
kind/dependencies:
- changed-files:
  - any-glob-to-any-file: ['src/Designer/backend/Directory.Packages.props', '**/package.json']

quality/testing:
- changed-files:
  - any-glob-to-any-file: ['src/Designer/frontend/testing/**/*', 'src/Designer/backend/tests/**/*', 'src/Designer/testdata/**/*']

skip-releasenotes:
- changed-files:
  - any-glob-to-any-file: ['.github/**/*', '.husky/**/*', '.vscode/**/*', '.yarn/**/*', 'src/Designer/testdata/**/*', 'src/Designer/development/**/*', 'src/**/*']

backend:
- changed-files:
  - any-glob-to-any-file: 'src/Designer/backend/**/*'

frontend:
- changed-files:
  - any-glob-to-any-file: 'src/Designer/frontend/**/*'


================================================
FILE: .github/pull_request_template.md
================================================
<!--- Provide a general summary of your changes in the Title above -->

## Description

<!--- Describe your changes in detail -->

## Verification

- [ ] Related issues are connected (if applicable)
- [ ] **Your** code builds clean without any errors or warnings
- [ ] Manual testing done (required)
- [ ] Relevant automated test added (if you find this hard, leave it and we'll help out)


================================================
FILE: .github/release.yml
================================================
# .github/release.yml

changelog:
  exclude:
    labels:
      - skip-releasenotes
      - area/resource-registry
  categories:
    - title: Forms editor 🛠
      labels:
        - area/ui-editor
      exclude:
        labels:
          - kind/bug
    - title: Dashboard 🖥
      labels:
        - area/dashboard
      exclude:
        labels:
          - kind/bug
    - title: Text editor 💬
      labels:
        - area/text-editor
      exclude:
        labels:
          - kind/bug
    - title: Process editor ⏺→◻️→⏺
      labels:
        - area/process
      exclude:
        labels:
          - kind/bug
    - title: Data modelling 📈
      labels:
        - area/data-modeling
      exclude:
        labels:
          - kind/bug
    - title: Bugfixes 🐞
      labels:
        - kind/bug
    - title: Dependency Upgrades 📦
      labels:
        - kind/dependencies
    - title: Other Changes
      labels:
        - "*"


================================================
FILE: .github/scripts/codeowners-generate.mjs
================================================
import fs from 'node:fs';
import path from 'node:path';
import { pathToFileURL } from 'node:url';

const OUTPUT_PATH = '.github/CODEOWNERS';
const GENERATED_BY = '.github/scripts/codeowners-generate.mjs';
const ROOT_FILE_ENTRIES = [
  {
    path: '/.github/CODEOWNERS',
    owner: '@altinn/team-altinn-studio',
  },
];
const EXACT_SOURCE_FILES = [
  'package.json',
  'yarn.lock',
  'package-lock.json',
  'go.mod',
  'go.sum',
  'Directory.Packages.props',
  'global.json',
  'Chart.yaml',
  'pyproject.toml',
  'requirements.txt',
  'requirements-dev.txt',
  'uv.lock',
];
const SOURCE_TYPES = [
  ...EXACT_SOURCE_FILES.map(createExactSourceType),
  createDottedPrefixSourceType('Dockerfile'),
  createDottedPrefixSourceType('dockerfile'),
  ...createComposeSourceTypes('compose'),
  ...createComposeSourceTypes('docker-compose', { allowDottedVariants: true }),
  ...createComposeSourceTypes('podman-compose', { allowDottedVariants: true }),
  createExtensionSourceType('.csproj', '**/*.csproj'),
];
const GROUPS = [
  {
    title: 'Team Core',
    owner: '@altinn/team-core',
    roots: ['src/test/K6'],
  },
  {
    title: 'Team Utforming',
    owner: '@altinn/team-altinn-studio-utforming',
    roots: ['src/App/frontend', 'src/Designer/frontend'],
    extraPaths: [
      '.github/workflows/app-frontend-codeql.yml',
      '.github/workflows/app-frontend-compare-repos.yml',
      '.github/workflows/app-frontend-cypress.yml',
      '.github/workflows/app-frontend-k6-browser.yml',
      '.github/workflows/app-frontend-lighthouse-ci.yml',
      '.github/workflows/app-frontend-unit-tests.yml',
      '.github/workflows/designer-frontend-codeql.yml',
      '.github/workflows/designer-frontend-config-coverage.yml',
      '.github/workflows/designer-frontend-playwright-staging.yml',
      '.github/workflows/designer-frontend-run-playwright-on-pr.yaml',
      '.github/workflows/designer-frontend-unit-tests.yml',
      '.github/workflows/storybook-to-github-pages.yaml',
      '.github/workflows/studio-components-deploy.yaml',
      '.github/workflows/studio-components-legacy-deploy.yaml',
    ],
  },
  {
    title: 'Team Access Info',
    owner: '@altinn/team-access-info',
    roots: ['src/Designer/frontend/resourceadm'],
    extraPaths: [
      '.github/workflows/playwright-resourceadm.yml',
      '.github/workflows/run-playwright-resourceadm-on-pr.yml',
    ],
  },
  {
    title: 'AI',
    owner: '@ErlingHauan',
    roots: ['src/AI/agents', 'src/AI/augmenter-agent', 'src/AI/mcp'],
    extraPaths: [
      '.github/workflows/deploy-studio-mcp-server.yaml',
      '.github/workflows/mcp-build.yaml',
      '.github/workflows/mcp-test.yaml',
    ],
  },
  {
    title: 'Squad Kjøring',
    owner: '@altinn/team-altinn-studio-kjoring',
    roots: [
      'src/cli',
      'src/gitea',
      'src/gitea-runner',
      'src/gitea-proxy',
      'src/load-balancer',
      'src/lhci-server',
      'src/Runtime/kubernetes-wrapper',
      'src/Runtime/localtest',
      'src/Runtime/operator',
      'src/Runtime/pdf3',
      'src/Runtime/gateway',
      'src/Runtime/devenv',
      'src/tools/health',
      'src/tools/releaser',
      'charts/altinn-loadbalancer',
      'charts/altinn-loadbalancer-config',
      'charts/gitea-org-runner',
      'charts/gitea-org-runner-config',
    ],
    extraPaths: [
      '.github/workflows/cli-build-test.yaml',
      '.github/workflows/construct-environments-script-test.yaml',
      '.github/workflows/deploy-gitea-runners.yaml',
      '.github/workflows/deploy-lhci-server.yaml',
      '.github/workflows/deploy-loadbalancer.yaml',
      '.github/workflows/deploy-repositories.yaml',
      '.github/workflows/deploy-runtime-apps-config.yaml',
      '.github/workflows/deploy-runtime-flux-config.yaml',
      '.github/workflows/deploy-runtime-gateway.yaml',
      '.github/workflows/deploy-runtime-grafana-manifests.yaml',
      '.github/workflows/deploy-runtime-kubernetes-wrapper.yaml',
      '.github/workflows/deploy-runtime-localtest.yaml',
      '.github/workflows/deploy-runtime-observability.yaml',
      '.github/workflows/deploy-runtime-operator.yaml',
      '.github/workflows/deploy-runtime-pdf3.yaml',
      '.github/workflows/deploy-runtime-syncroot.yaml',
      '.github/workflows/deploy-studio-observability.yaml',
      '.github/workflows/deploy-studio-otel-operator.yaml',
      '.github/workflows/deploy-studio-syncroot.yaml',
      '.github/workflows/deployer-check.yaml',
      '.github/workflows/gitea-check-texts-file.yml',
      '.github/workflows/gitea-runner-test.yml',
      '.github/workflows/release-studioctl.yaml',
      '.github/workflows/releaser-build-test.yml',
      '.github/workflows/repositories-scan.yml',
      '.github/workflows/runtime-devenv-build.yml',
      '.github/workflows/runtime-gateway-tests.yaml',
      '.github/workflows/runtime-health-build.yml',
      '.github/workflows/runtime-kubernetes-wrapper-build.yaml',
      '.github/workflows/runtime-localtest-build.yml',
      '.github/workflows/runtime-operator-build.yml',
      '.github/workflows/runtime-pdf3-build.yml',
      '.github/workflows/template-runtime-construct-environments.yaml',
      '.github/workflows/template-studio-construct-environments.yaml',
      '.github/workflows/validate-renovate.yaml',
    ],
  },
  {
    title: 'Squad Flyt',
    owner: '@altinn/team-altinn-studio-flyt',
    roots: ['src/Runtime/workflow-engine', 'src/Runtime/workflow-engine-app'],
    extraPaths: [
      '.github/workflows/deploy-runtime-workflow-engine-app.yaml',
      '.github/workflows/runtime-workflow-engine-app-tests.yaml',
      '.github/workflows/runtime-workflow-engine-tests.yaml',
    ],
  },
];

/**
 * @param {{check?: boolean}} options
 */
export function generateCodeowners(options = {}) {
  const generated = renderCodeowners();
  const current = readFileOrEmpty(OUTPUT_PATH);
  if (options.check) {
    if (current !== generated) {
      throw new Error(`${OUTPUT_PATH} is out of date. Run: node ${GENERATED_BY}`);
    }
    return false;
  }

  if (current === generated) {
    return false;
  }

  fs.writeFileSync(OUTPUT_PATH, generated, 'utf8');
  return true;
}

export function renderCodeowners() {
  const sections = buildSections();
  const allEntries = sections.flatMap((section) => section.entries);
  const width = Math.max(...allEntries.map((entry) => entry.path.length)) + 2;

  const lines = ROOT_FILE_ENTRIES.map((entry) => formatEntry(entry, width));
  lines.push('#');
  lines.push(`# This file is generated by ${GENERATED_BY}.`);
  lines.push('# Keep CODEOWNERS narrow by default');
  lines.push('# so unrelated diffs do not trigger owner review requests.');
  lines.push('#');

  for (const section of sections) {
    if (section.title) {
      lines.push('');
      lines.push(`# ${section.title}`);
    }

    for (const entry of section.entries) {
      lines.push(formatEntry(entry, width));
    }
  }

  return `${lines.join('\n')}\n`;
}

function buildSections() {
  const seen = new Map();
  return GROUPS.map((group) => {
    const entries = (group.roots ?? [])
      .flatMap((root) => buildRootEntries(root))
      .concat((group.extraPaths ?? []).map((extraPath) => buildExactEntry(extraPath)))
      .map((entry) => ({ ...entry, owner: group.owner }))
      .sort((a, b) => a.path.localeCompare(b.path));

    for (const entry of entries) {
      const existingOwner = seen.get(entry.path);
      if (existingOwner) {
        throw new Error(
          `duplicate CODEOWNERS entry for '${entry.path}' (${existingOwner}, ${entry.owner}).`,
        );
      }
      seen.set(entry.path, entry.owner);
    }

    return {
      title: group.title,
      entries,
    };
  });
}

/**
 * @param {string} exactPath
 * @returns {{path: string}}
 */
function buildExactEntry(exactPath) {
  if (!fs.existsSync(path.resolve(exactPath))) {
    throw new Error(`configured path does not exist: '${exactPath}'.`);
  }

  return { path: normalizePath(exactPath) };
}

/**
 * @param {string} root
 * @returns {Array<{path: string}>}
 */
function buildRootEntries(root) {
  const absoluteRoot = path.resolve(root);
  if (!fs.existsSync(absoluteRoot)) {
    throw new Error(`configured root does not exist: '${root}'.`);
  }

  const presentSourceGlobs = new Set();
  walkDirectory(absoluteRoot, (fileName) => {
    for (const sourceType of SOURCE_TYPES) {
      if (sourceType.matches(fileName)) {
        presentSourceGlobs.add(sourceType.glob);
      }
    }
  });

  if (presentSourceGlobs.size === 0) {
    throw new Error(`root '${root}' matched no supported source types.`);
  }

  return SOURCE_TYPES.filter((sourceType) => presentSourceGlobs.has(sourceType.glob)).map(
    (sourceType) => ({
      path: `${normalizePath(root)}/${sourceType.glob}`,
    }),
  );
}

/**
 * @param {string} fileName
 * @returns {{glob: string, matches: (candidate: string) => boolean}}
 */
function createExactSourceType(fileName) {
  return {
    glob: `**/${fileName}`,
    matches: (candidate) => candidate === fileName,
  };
}

/**
 * @param {string} prefix
 * @returns {{glob: string, matches: (candidate: string) => boolean}}
 */
function createDottedPrefixSourceType(prefix) {
  return {
    glob: `**/${prefix}*`,
    matches: (candidate) => candidate === prefix || candidate.startsWith(`${prefix}.`),
  };
}

/**
 * @param {string} suffix
 * @param {string} glob
 * @returns {{glob: string, matches: (candidate: string) => boolean}}
 */
function createExtensionSourceType(suffix, glob) {
  return {
    glob,
    matches: (candidate) => candidate.endsWith(suffix),
  };
}

/**
 * @param {string} baseName
 * @param {{allowDottedVariants?: boolean}} [options]
 * @returns {Array<{glob: string, matches: (candidate: string) => boolean}>}
 */
function createComposeSourceTypes(baseName, options = {}) {
  const sourceTypes = [
    createExactSourceType(`${baseName}.yaml`),
    createExactSourceType(`${baseName}.yml`),
  ];

  if (!options.allowDottedVariants) {
    return sourceTypes;
  }

  return sourceTypes.concat([
    {
      glob: `**/${baseName}.*.yaml`,
      matches: (candidate) => matchesDottedVariant(candidate, baseName, '.yaml'),
    },
    {
      glob: `**/${baseName}.*.yml`,
      matches: (candidate) => matchesDottedVariant(candidate, baseName, '.yml'),
    },
  ]);
}

function matchesDottedVariant(candidate, baseName, extension) {
  if (!candidate.startsWith(`${baseName}.`) || !candidate.endsWith(extension)) {
    return false;
  }

  return candidate.slice(baseName.length + 1, -extension.length).length > 0;
}

/**
 * @param {string} absolutePath
 * @param {(fileName: string) => void} onFile
 */
function walkDirectory(absolutePath, onFile) {
  const entries = fs.readdirSync(absolutePath, { withFileTypes: true });
  for (const entry of entries) {
    if (entry.name === 'node_modules') {
      continue;
    }
    if (entry.isDirectory() && entry.name.startsWith('.')) {
      continue;
    }

    const entryPath = path.join(absolutePath, entry.name);
    if (entry.isDirectory()) {
      walkDirectory(entryPath, onFile);
      continue;
    }

    onFile(entry.name);
  }
}

/**
 * @param {{path: string, owner: string}} entry
 * @param {number} width
 */
function formatEntry(entry, width) {
  return `${entry.path.padEnd(width)}${entry.owner}`;
}

function readFileOrEmpty(filePath) {
  try {
    return fs.readFileSync(filePath, 'utf8');
  } catch (error) {
    if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
      return '';
    }
    throw error;
  }
}

function normalizePath(filePath) {
  return filePath.split(path.sep).join('/');
}

function parseArgs(argv) {
  return {
    check: argv.includes('--check'),
  };
}

if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
  try {
    const args = parseArgs(process.argv.slice(2));
    const changed = generateCodeowners({ check: args.check });
    if (!args.check && changed) {
      process.stdout.write(`updated ${OUTPUT_PATH}\n`);
    }
  } catch (error) {
    process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
    process.exit(1);
  }
}


================================================
FILE: .github/scripts/construct-environments.mjs
================================================
import { pathToFileURL } from "node:url";

const VALID_MODES = new Set(["studio", "studio-preapproved", "runtime"]);
const DEFAULTS_BY_MODE = {
  "studio": "dev,staging,prod",
  "studio-preapproved": "dev,staging,preapproved-prod",
  "runtime": "at_ring1,at_ring2,tt_ring1,tt_ring2,prod_ring1,prod_ring2",
};
const OVERRIDE_DEFAULT_ENV_BY_MODE = {
  "studio": "OVERRIDE_DEFAULT_STUDIO_ENVIRONMENTS",
  "studio-preapproved": "OVERRIDE_DEFAULT_STUDIO_ENVIRONMENTS",
  "runtime": "OVERRIDE_DEFAULT_RUNTIME_ENVIRONMENTS",
};
const ALLOWED_VALUES_BY_MODE = {
  "studio": new Set(DEFAULTS_BY_MODE["studio"].split(",").map((value) => value.trim())),
  "studio-preapproved": new Set(
    DEFAULTS_BY_MODE["studio-preapproved"].split(",").map((value) => value.trim())
  ),
  "runtime": new Set(DEFAULTS_BY_MODE["runtime"].split(",").map((value) => value.trim())),
};

/**
 * Construct parsed output for studio or runtime environment inputs.
 * @param {{mode: string, inputs?: string, allowEmpty?: boolean|string}} input
 * @returns {Array<{environment: string, ring?: string}>}
 */
export function constructResult(input) {
  const mode = input.mode;
  if (!VALID_MODES.has(mode)) {
    throw new Error("mode must be 'studio', 'studio-preapproved', or 'runtime'.");
  }

  const allowEmpty = parseBool(input.allowEmpty);
  const inputs = input.inputs ?? "null";
  const parsedInputs = parseInputs(inputs);
  let raw = "";

  if (raw === "" && parsedInputs !== null) {
    raw = getEnvironmentsFromInputs(parsedInputs);
  }

  // No workflow_dispatch inputs context (e.g. push) with no explicit value/input:
  // use override when present, otherwise mode defaults.
  if (raw === "" && parsedInputs === null) {
    raw = getDefaultOverrideValue(mode) || DEFAULTS_BY_MODE[mode];
  }

  if (raw === "") {
    if (allowEmpty) {
      return [];
    }
    throw new Error("input cannot be empty when allow-empty=false.");
  }

  const values = splitCsvStrict(raw);
  const allowedValues = ALLOWED_VALUES_BY_MODE[mode];
  switch (mode) {
    case "studio":
    case "studio-preapproved":
      validateValues(values, allowedValues, "studio environment");
      return values.map((environment) => ({ environment }));
    case "runtime":
      validateValues(values, allowedValues, "runtime ring");
      return values.map((ring) => ({ ring, environment: `runtime_${ring}` }));
    default:
      throw new Error("unreachable mode.");
  }
}

/**
 * @param {string} inputs
 * @returns {Record<string, unknown> | null}
 */
function parseInputs(inputs) {
  if (inputs === "null") {
    return null;
  }

  let parsed;
  try {
    parsed = JSON.parse(inputs);
  } catch {
    throw new Error("inputs must be valid JSON.");
  }

  if (parsed === null) {
    return null;
  }

  if (typeof parsed !== "object" || Array.isArray(parsed)) {
    throw new Error("inputs must be an object or null.");
  }

  return parsed;
}

/**
 * @param {Record<string, unknown>} parsedInputs
 * @returns {string}
 */
function getEnvironmentsFromInputs(parsedInputs) {
  if (!("environments" in parsedInputs)) {
    return "";
  }

  const value = parsedInputs.environments;
  if (value === null || value === undefined) {
    return "";
  }
  if (typeof value !== "string") {
    throw new Error("input 'environments' must be a string.");
  }
  return value;
}

/**
 * @param {string} raw
 * @returns {string[]}
 */
function splitCsvStrict(raw) {
  const tokens = raw.split(",").map((token) => token.trim());
  if (tokens.some((token) => token.length === 0)) {
    throw new Error("input contains empty values.");
  }
  return tokens;
}

/**
 * @param {string[]} values
 * @param {Set<string>} allowed
 * @param {string} label
 */
function validateValues(values, allowed, label) {
  for (const value of values) {
    if (!allowed.has(value)) {
      throw new Error(`invalid ${label} '${value}'.`);
    }
  }
}

/**
 * @param {boolean|string|undefined} value
 * @returns {boolean}
 */
function parseBool(value) {
  if (typeof value === "boolean") {
    return value;
  }
  return String(value).toLowerCase() === "true";
}

/**
 * @param {"studio"|"studio-preapproved"|"runtime"} mode
 * @returns {string}
 */
function getDefaultOverrideValue(mode) {
  return (process.env[OVERRIDE_DEFAULT_ENV_BY_MODE[mode]] ?? "").trim();
}

/**
 * @param {string[]} argv
 * @returns {{mode: string, inputs: string, allowEmpty: string}}
 */
function parseArgs(argv) {
  const args = {
    mode: "",
    inputs: "null",
    allowEmpty: "false",
  };

  for (let i = 0; i < argv.length; i += 1) {
    const key = argv[i];
    const next = argv[i + 1];
    if (!key.startsWith("--")) {
      throw new Error(`unexpected argument '${key}'.`);
    }
    if (next === undefined || next.startsWith("--")) {
      throw new Error(`missing value for '${key}'.`);
    }

    switch (key) {
      case "--mode":
        args.mode = next;
        break;
      case "--inputs":
        args.inputs = next;
        break;
      case "--allow-empty":
        args.allowEmpty = next;
        break;
      default:
        throw new Error(`unknown argument '${key}'.`);
    }
    i += 1;
  }

  return args;
}

if (import.meta.url === pathToFileURL(process.argv[1]).href) {
  try {
    const args = parseArgs(process.argv.slice(2));
    const result = constructResult({
      mode: args.mode,
      inputs: args.inputs,
      allowEmpty: args.allowEmpty,
    });
    process.stdout.write(`${JSON.stringify(result)}\n`);
  } catch (error) {
    process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
    process.exit(1);
  }
}


================================================
FILE: .github/scripts/construct-environments.test.mjs
================================================
import test from "node:test";
import assert from "node:assert/strict";

import { constructResult } from "./construct-environments.mjs";

test("studio: uses defaults when inputs context is null", () => {
  const result = constructResult({
    mode: "studio",
    inputs: "null",
    allowEmpty: false,
  });

  assert.deepEqual(result, [
    { environment: "dev" },
    { environment: "staging" },
    { environment: "prod" },
  ]);
});

test("studio: empty with allow-empty true returns []", () => {
  const result = constructResult({
    mode: "studio",
    inputs: "{}",
    allowEmpty: true,
  });

  assert.deepEqual(result, []);
});

test("studio: resolves environments from inputs.environments", () => {
  const result = constructResult({
    mode: "studio",
    inputs: '{"environments":"dev,staging"}',
    allowEmpty: false,
  });

  assert.deepEqual(result, [{ environment: "dev" }, { environment: "staging" }]);
});

test("studio: rejects preapproved-prod", () => {
  assert.throws(
    () =>
      constructResult({
        mode: "studio",
        inputs: '{"environments":"staging,preapproved-prod"}',
        allowEmpty: false,
      }),
    /invalid studio environment/
  );
});

test("studio: rejects empty token", () => {
  assert.throws(
    () =>
      constructResult({
        mode: "studio",
        inputs: '{"environments":"dev,,prod"}',
        allowEmpty: false,
      }),
    /empty values/
  );
});

test("runtime: maps rings to runtime environments", () => {
  const result = constructResult({
    mode: "runtime",
    inputs: '{"environments":"at_ring1,tt_ring2"}',
    allowEmpty: false,
  });

  assert.deepEqual(result, [
    { ring: "at_ring1", environment: "runtime_at_ring1" },
    { ring: "tt_ring2", environment: "runtime_tt_ring2" },
  ]);
});

test("runtime: empty string with allow-empty true returns []", () => {
  const result = constructResult({
    mode: "runtime",
    inputs: "{}",
    allowEmpty: true,
  });

  assert.deepEqual(result, []);
});

test("runtime: rejects json array input", () => {
  assert.throws(
    () =>
      constructResult({
        mode: "runtime",
        inputs: '{"environments":"[{\\"ring\\":\\"at_ring1\\"}]"}',
        allowEmpty: false,
      }),
    /invalid runtime ring/
  );
});

test("runtime: rejects empty json array input", () => {
  assert.throws(
    () =>
      constructResult({
        mode: "runtime",
        inputs: '{"environments":"[]"}',
        allowEmpty: true,
      }),
    /invalid runtime ring/
  );
});

test("runtime: rejects invalid environment token", () => {
  assert.throws(
    () =>
      constructResult({
        mode: "runtime",
        inputs: '{"environments":"AT_RING1"}',
        allowEmpty: false,
      }),
    /invalid runtime ring/
  );
});

test("runtime: rejects non-string ring input in inputs", () => {
  assert.throws(
    () =>
      constructResult({
        mode: "runtime",
        inputs: '{"environments":["at_ring1"]}',
        allowEmpty: false,
      }),
    /must be a string/
  );
});

test("runtime: uses defaults when inputs context is null", () => {
  const result = constructResult({
    mode: "runtime",
    inputs: "null",
    allowEmpty: false,
  });

  assert.deepEqual(result, [
    { ring: "at_ring1", environment: "runtime_at_ring1" },
    { ring: "at_ring2", environment: "runtime_at_ring2" },
    { ring: "tt_ring1", environment: "runtime_tt_ring1" },
    { ring: "tt_ring2", environment: "runtime_tt_ring2" },
    { ring: "prod_ring1", environment: "runtime_prod_ring1" },
    { ring: "prod_ring2", environment: "runtime_prod_ring2" },
  ]);
});

test("studio-preapproved: uses defaults when inputs context is null", () => {
  const result = constructResult({
    mode: "studio-preapproved",
    inputs: "null",
    allowEmpty: false,
  });

  assert.deepEqual(result, [
    { environment: "dev" },
    { environment: "staging" },
    { environment: "preapproved-prod" },
  ]);
});

test("studio-preapproved: rejects prod", () => {
  assert.throws(
    () =>
      constructResult({
        mode: "studio-preapproved",
        inputs: '{"environments":"prod"}',
        allowEmpty: false,
      }),
    /invalid studio environment/
  );
});

test("studio: uses OVERRIDE_DEFAULT_STUDIO_ENVIRONMENTS in push context", () => {
  process.env.OVERRIDE_DEFAULT_STUDIO_ENVIRONMENTS = "dev";
  try {
    const result = constructResult({
      mode: "studio",
      inputs: "null",
      allowEmpty: false,
    });

    assert.deepEqual(result, [{ environment: "dev" }]);
  } finally {
    delete process.env.OVERRIDE_DEFAULT_STUDIO_ENVIRONMENTS;
  }
});

test("studio-preapproved: uses OVERRIDE_DEFAULT_STUDIO_ENVIRONMENTS in push context", () => {
  process.env.OVERRIDE_DEFAULT_STUDIO_ENVIRONMENTS = "preapproved-prod";
  try {
    const result = constructResult({
      mode: "studio-preapproved",
      inputs: "null",
      allowEmpty: false,
    });

    assert.deepEqual(result, [{ environment: "preapproved-prod" }]);
  } finally {
    delete process.env.OVERRIDE_DEFAULT_STUDIO_ENVIRONMENTS;
  }
});

test("runtime: uses OVERRIDE_DEFAULT_RUNTIME_ENVIRONMENTS in push context", () => {
  process.env.OVERRIDE_DEFAULT_RUNTIME_ENVIRONMENTS = "at_ring1";
  try {
    const result = constructResult({
      mode: "runtime",
      inputs: "null",
      allowEmpty: false,
    });

    assert.deepEqual(result, [{ ring: "at_ring1", environment: "runtime_at_ring1" }]);
  } finally {
    delete process.env.OVERRIDE_DEFAULT_RUNTIME_ENVIRONMENTS;
  }
});

test("studio: explicit environments input takes precedence over default override", () => {
  process.env.OVERRIDE_DEFAULT_STUDIO_ENVIRONMENTS = "prod";
  try {
    const result = constructResult({
      mode: "studio",
      inputs: '{"environments":"dev"}',
      allowEmpty: false,
    });

    assert.deepEqual(result, [{ environment: "dev" }]);
  } finally {
    delete process.env.OVERRIDE_DEFAULT_STUDIO_ENVIRONMENTS;
  }
});

test("runtime: explicit environments input takes precedence over default override", () => {
  process.env.OVERRIDE_DEFAULT_RUNTIME_ENVIRONMENTS = "tt_ring1,tt_ring2";
  try {
    const result = constructResult({
      mode: "runtime",
      inputs: '{"environments":"at_ring1"}',
      allowEmpty: false,
    });

    assert.deepEqual(result, [{ ring: "at_ring1", environment: "runtime_at_ring1" }]);
  } finally {
    delete process.env.OVERRIDE_DEFAULT_RUNTIME_ENVIRONMENTS;
  }
});


================================================
FILE: .github/scripts/release.sh
================================================
#!/usr/bin/env bash

set -e
set -u

DRAFT=true

while [[ $# -gt 0 ]]; do
  case $1 in
    --github-token)
      GITHUB_TOKEN="$2"
      shift # pop option
      shift # pop value
      ;;
     --draft)
      DRAFT="$2"
      shift # pop option
      shift # pop value
      ;;
    -*|--*)
      echo "Unknown option $1"
      exit 1
      ;;
    *)
      echo "Unknown argument $1"
      exit 1
      ;;
  esac
done

CURRENT_VERSION=$(curl -s https://api.github.com/repos/Altinn/altinn-studio/releases/latest | jq -r .tag_name)
CURRENT_VERSION_PARTS=(${CURRENT_VERSION//./ })
FIRST_PART=${CURRENT_VERSION_PARTS[0]:1}
SECOND_PART=${CURRENT_VERSION_PARTS[1]}
YEAR="$(date +"%Y")"

echo "Current git tag:    $CURRENT_VERSION"
echo "First part:         $FIRST_PART"
echo "Second part:        $SECOND_PART"
echo "Current year:       $YEAR"
echo "-------------------------------------"


# Ensure that the version starts from 0 when the year changes
if [[ "$YEAR" == "$FIRST_PART" ]]; then
  # Increment the second part of the version by 1
  NEW_VERSION="v${YEAR}.$(($SECOND_PART+1))"
else
  # New year - start from 0
  NEW_VERSION="v${YEAR}.0"
fi

echo "New git tag:        $NEW_VERSION"
echo "Draft:              $DRAFT"

# Create the release
curl -L \
  -X POST \
  -H "Accept: application/vnd.github+json" \
  -H "Authorization: Bearer ${GITHUB_TOKEN}" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  https://api.github.com/repos/altinn/altinn-studio/releases \
  -d "{\"tag_name\":\"$NEW_VERSION\",\"name\":\"$NEW_VERSION\",\"draft\":$DRAFT,\"prerelease\":false,\"generate_release_notes\":true}"



================================================
FILE: .github/workflows/app-backend-codeql.yml
================================================
name: App Backend - CodeQL

on:
  push:
    branches: [main]
    paths:
      - 'src/App/backend/**'
      - '.github/actions/codeql-config/**'
      - '.github/codeql/**'
      - '.github/workflows/app-backend-codeql.yml'
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/backend/**'
      - '.github/actions/codeql-config/**'
      - '.github/codeql/**'
      - '.github/workflows/app-backend-codeql.yml'
  workflow_dispatch:
  schedule:
    - cron: '5 1 * * 0'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  analyze:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    name: Analyze
    runs-on: ubuntu-latest
    timeout-minutes: 30
    defaults:
      run:
        working-directory: src/App/backend/
    permissions:
      actions: read
      contents: read
      security-events: write
    strategy:
      fail-fast: false
      matrix:
        language: ['csharp']

    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Setup .NET
        uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5
        with:
          global-json-file: src/App/backend/global.json

      - name: Generate CodeQL config
        id: codeql-config
        uses: ./.github/actions/codeql-config
        with:
          language: ${{ matrix.language }}

      - name: Initialize CodeQL
        uses: github/codeql-action/init@5c8a8a642e79153f5d047b10ec1cba1d1cc65699 # v3
        with:
          languages: ${{ matrix.language }}
          build-mode: manual
          queries: ${{ steps.codeql-config.outputs.queries }}
          config-file: ${{ steps.codeql-config.outputs.config-file }}

      - name: Build solution
        run: dotnet build solutions/Src.sln -v m

      - name: Perform CodeQL Analysis
        uses: github/codeql-action/analyze@5c8a8a642e79153f5d047b10ec1cba1d1cc65699 # v3
        with:
          category: '/codeql/app/backend/${{ matrix.language }}'


================================================
FILE: .github/workflows/app-backend-formatting.yml
================================================
name: App Backend - Verify formatting

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review]
    paths:
      - 'src/App/backend/**'
      - '.github/workflows/app-backend-formatting.yml'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  verify-no-changes:
    if: |
      github.event.pull_request.user.login != 'renovate[bot]'
    runs-on: ubuntu-latest
    timeout-minutes: 5
    defaults:
      run:
        working-directory: src/App/backend/

    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
      - name: Setup .NET
        uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5
        with:
          global-json-file: src/App/backend/global.json
      - name: Install csharpier
        run: dotnet tool restore
      - name: Run csharpier
        run: dotnet csharpier check .


================================================
FILE: .github/workflows/app-backend-tests.yml
================================================
name: App Backend - Build and test

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/backend/**'
      - 'src/Runtime/localtest/**'
      - '.github/workflows/app-backend-tests.yml'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  build-frontend:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    timeout-minutes: 10
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
      - uses: ./.github/actions/app-build-frontend
  analyze:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    needs: build-frontend
    strategy:
      matrix:
        os:
          - id: ubuntu-latest
            workingDir: src/App/backend/
          - id: macos-latest
            workingDir: src/App/backend/
          - id: windows-latest
            workingDir: src\App\backend\
    name: Build and test
    runs-on: ${{ matrix.os.id }}
    timeout-minutes: 15
    env:
      DOTNET_HOSTBUILDER__RELOADCONFIGONCHANGE: false
    steps:
      - name: Enable long paths for git on Windows
        if: matrix.os.id == 'windows-latest'
        run: git config --system core.longpaths true
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
      - name: Setup .NET
        uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5
        with:
          global-json-file: src/App/backend/global.json
      - name: Tool restore
        working-directory: ${{ matrix.os.workingDir }}
        run: |
          dotnet tool restore
      - name: Build backend
        working-directory: ${{ matrix.os.workingDir }}
        run: |
          dotnet build solutions/All.sln -v m

      - name: Download built frontend
        if: matrix.os.id == 'ubuntu-latest'
        uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
        with:
          name: app-frontend-dist
          path: src/App/frontend/dist

      - name: Test
        if: matrix.os.id != 'ubuntu-latest'
        working-directory: ${{ matrix.os.workingDir }}
        run: |
          dotnet test solutions/All.sln -v m --no-restore --no-build --filter "Category!=Integration"
      - name: Test (main tests)
        if: matrix.os.id == 'ubuntu-latest'
        working-directory: ${{ matrix.os.workingDir }}
        run: |
          dotnet test solutions/All.sln -v m --no-restore --no-build --filter "Category!=Integration"
      - name: Setup studioctl
        if: matrix.os.id == 'ubuntu-latest'
        uses: ./.github/actions/setup-studioctl
      - name: Test (integration tests)
        if: matrix.os.id == 'ubuntu-latest'
        working-directory: ${{ matrix.os.workingDir }}
        run: |
          dotnet test solutions/All.sln --no-restore --no-build --logger "console;verbosity=detailed" --filter "Category=Integration"
        env:
          SKIP_FRONTEND_BUILD: true


================================================
FILE: .github/workflows/app-codelists-codeql.yml
================================================
name: App Codelists - CodeQL

on:
  push:
    branches: [main]
    paths:
      - 'src/App/codelists/**'
      - '.github/actions/codeql-config/**'
      - '.github/codeql/**'
      - '.github/workflows/app-codelists-codeql.yml'
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/codelists/**'
      - '.github/actions/codeql-config/**'
      - '.github/codeql/**'
      - '.github/workflows/app-codelists-codeql.yml'
  workflow_dispatch:
  schedule:
    - cron: '15 1 * * 0'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  analyze:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    name: Analyze
    runs-on: ubuntu-latest
    timeout-minutes: 30
    defaults:
      run:
        working-directory: src/App/codelists/
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ 'csharp' ]

    steps:
    - name: Checkout repository
      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

    - name: Generate CodeQL config
      id: codeql-config
      uses: ./.github/actions/codeql-config
      with:
        language: ${{ matrix.language }}

    - name: Initialize CodeQL
      uses: github/codeql-action/init@5c8a8a642e79153f5d047b10ec1cba1d1cc65699 # v3
      with:
        languages: ${{ matrix.language }}
        build-mode: manual
        queries: ${{ steps.codeql-config.outputs.queries }}
        config-file: ${{ steps.codeql-config.outputs.config-file }}

    - name: Build solution
      run: dotnet build solutions/Src.sln -v m

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@5c8a8a642e79153f5d047b10ec1cba1d1cc65699 # v3
      with:
        category: "/codeql/app/codelists/${{ matrix.language }}"


================================================
FILE: .github/workflows/app-codelists-tests.yml
================================================
name: App Codelists - Build and test

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/codelists/**'
      - '.github/workflows/app-codelists-tests.yml'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  analyze:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    strategy:
      matrix:
        os:
          - id: ubuntu-latest
            workingDir: src/App/codelists/
          - id: macos-latest
            workingDir: src/App/codelists/
          - id: windows-latest
            workingDir: src\App\codelists\
    name: Run dotnet build and test
    runs-on: ${{ matrix.os.id }}
    timeout-minutes: 30
    env:
      DOTNET_HOSTBUILDER__RELOADCONFIGONCHANGE: false
    steps:
      - name: Enable long paths for git on Windows
        if: matrix.os.id == 'windows-latest'
        run: git config --system core.longpaths true
      - name: Setup .NET
        uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5
        with:
          dotnet-version: |
            8.0.x
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0  # Shallow clones should be disabled for a better relevancy of analysis
      - name: Build
        working-directory: ${{ matrix.os.workingDir }}
        run: |
           dotnet build Altinn.Codelists.sln -v m
      - name: Test
        working-directory: ${{ matrix.os.workingDir }}
        run: |
           dotnet test Altinn.Codelists.sln -v m


================================================
FILE: .github/workflows/app-fileanalyzers-codeql.yml
================================================
name: App Fileanalyzers - CodeQL

on:
  push:
    branches: [main]
    paths:
      - 'src/App/fileanalyzers/**'
      - '.github/actions/codeql-config/**'
      - '.github/codeql/**'
      - '.github/workflows/app-fileanalyzers-codeql.yml'
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/fileanalyzers/**'
      - '.github/actions/codeql-config/**'
      - '.github/codeql/**'
      - '.github/workflows/app-fileanalyzers-codeql.yml'
  workflow_dispatch:
  schedule:
    - cron: '25 1 * * 0'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  analyze:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    name: Analyze
    runs-on: ubuntu-latest
    timeout-minutes: 30
    defaults:
      run:
        working-directory: src/App/fileanalyzers/
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ 'csharp' ]

    steps:
    - name: Checkout repository
      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

    - name: Generate CodeQL config
      id: codeql-config
      uses: ./.github/actions/codeql-config
      with:
        language: ${{ matrix.language }}

    - name: Initialize CodeQL
      uses: github/codeql-action/init@5c8a8a642e79153f5d047b10ec1cba1d1cc65699 # v3
      with:
        languages: ${{ matrix.language }}
        build-mode: manual
        queries: ${{ steps.codeql-config.outputs.queries }}
        config-file: ${{ steps.codeql-config.outputs.config-file }}

    - name: Build solution
      run: dotnet build solutions/Src.sln -v m

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@5c8a8a642e79153f5d047b10ec1cba1d1cc65699 # v3
      with:
        category: "/codeql/app/fileanalyzers/${{ matrix.language }}"


================================================
FILE: .github/workflows/app-fileanalyzers-tests.yml
================================================
name: App Fileanalyzers - Build and test

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/fileanalyzers/**'
      - '.github/workflows/app-fileanalyzers-tests.yml'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  analyze:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    strategy:
      matrix:
        os:
          - id: ubuntu-latest
            workingDir: src/App/fileanalyzers/
          - id: macos-latest
            workingDir: src/App/fileanalyzers/
          - id: windows-latest
            workingDir: src\App\fileanalyzers\
    name: Run dotnet build and test
    runs-on: ${{ matrix.os.id }}
    timeout-minutes: 30
    env:
      DOTNET_HOSTBUILDER__RELOADCONFIGONCHANGE: false
    steps:
      - name: Enable long paths for git on Windows
        if: matrix.os.id == 'windows-latest'
        run: git config --system core.longpaths true
      - name: Setup .NET
        uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5
        with:
          dotnet-version: |
            8.0.x
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0  # Shallow clones should be disabled for a better relevancy of analysis
      - name: Build
        working-directory: ${{ matrix.os.workingDir }}
        run: |
           dotnet build Altinn.FileAnalyzers.sln -v m
      - name: Test
        working-directory: ${{ matrix.os.workingDir }}
        run: |
           dotnet test Altinn.FileAnalyzers.sln -v m


================================================
FILE: .github/workflows/app-frontend-codeql.yml
================================================
name: App Frontend - CodeQL

on:
  push:
    branches: [main]
    paths:
      - 'src/App/frontend/**'
      - '.github/actions/codeql-config/**'
      - '.github/codeql/**'
      - '.github/workflows/app-frontend-codeql.yml'
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/frontend/**'
      - '.github/actions/codeql-config/**'
      - '.github/codeql/**'
      - '.github/workflows/app-frontend-codeql.yml'
  workflow_dispatch:
  schedule:
    - cron: '35 1 * * 0'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  analyze:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    name: Analyze
    runs-on: ubuntu-latest
    timeout-minutes: 30
    permissions:
      actions: read
      contents: read
      security-events: write

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0

      - name: Generate CodeQL config
        id: codeql-config
        uses: ./.github/actions/codeql-config
        with:
          language: javascript
          paths: |
            src/App/frontend

      - name: Initialize CodeQL
        uses: github/codeql-action/init@5c8a8a642e79153f5d047b10ec1cba1d1cc65699 # v3
        with:
          languages: javascript
          queries: ${{ steps.codeql-config.outputs.queries }}
          config-file: ${{ steps.codeql-config.outputs.config-file }}

      - name: Perform CodeQL Analysis
        uses: github/codeql-action/analyze@5c8a8a642e79153f5d047b10ec1cba1d1cc65699 # v3
        with:
          category: "/codeql/app/frontend/javascript"


================================================
FILE: .github/workflows/app-frontend-compare-repos.yml
================================================
name: App Frontend - Compare Repos

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/frontend/**'
      - '.github/workflows/app-frontend-compare-repos.yml'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  verify-monorepo-changed-paths:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    runs-on: ubuntu-latest
    timeout-minutes: 30
    name: Verify monorepo changed paths
    defaults:
      run:
        working-directory: altinn-studio/src/App/frontend/
    steps:
      - name: checkout altinn-studio
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          path: altinn-studio

      - name: checkout app-frontend-react
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          repository: Altinn/app-frontend-react
          path: app-frontend-react

      - name: install node
        uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
        with:
          node-version: '22'

      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT

      - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
        id: yarn-cache
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('altinn-studio/src/App/frontend/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-

      - name: install dependencies
        run: yarn --immutable

      - name: Verify monorepo changed paths
        run: yarn tsx scripts/compare-frontend-repos.ts verify


================================================
FILE: .github/workflows/app-frontend-cypress.yml
================================================
name: App Frontend - Cypress

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/backend/**'
      - 'src/App/codelists/**'
      - 'src/App/fileanalyzers/**'
      - 'src/Runtime/localtest/**'
      - 'src/Runtime/pdf3/**'
      - 'src/App/frontend/src/**'
      - 'src/App/frontend/test/**'
      - 'src/App/frontend/package.json'
      - 'src/test/apps/**'
      - '.github/actions/**'
      - '.github/workflows/app-frontend-cypress.yml'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

env:
  CYPRESS_BROWSER_IMAGE: cypress/browsers:node-22.13.1-chrome-133.0.6943.53-1-ff-135.0-edge-132.0.2957.140-1@sha256:914c9814a9567f32660203db7ecd610b8f8fede6e9103885728b3bd3f6dca4ff
  APP_TEST_IMAGE_REPOSITORY: ghcr.io/altinn/altinn-studio/localtest-app

jobs:
  build-frontend:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    name: Build Frontend
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
      - name: Build frontend
        uses: ./.github/actions/app-build-frontend

  build-app-images:
    name: Build App Images
    if: |
      (github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft)) &&
      github.repository_owner == 'Altinn' &&
      (
        (github.event_name != 'pull_request' && github.event.repository.fork == false) ||
        (github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false)
      )
    runs-on: ubuntu-latest
    timeout-minutes: 60
    outputs:
      app-run-targets-json: ${{ steps.build-app-images.outputs.app-run-targets-json }}
    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Setup studioctl
        uses: ./.github/actions/setup-studioctl

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0

      - name: Login to GitHub Container Registry
        uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ github.token }}

      - name: Build and push app images
        id: build-app-images
        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
        env:
          APP_TEST_IMAGE_REPOSITORY: ${{ env.APP_TEST_IMAGE_REPOSITORY }}
          STUDIOCTL_REGISTRY_CACHE_WRITE: "true"
        with:
          script: |
            const fs = require('fs/promises');
            const nodePath = require('path');

            const maxParallelBuilds = 4;
            const appRoot = 'src/test/apps';
            const repository = process.env.APP_TEST_IMAGE_REPOSITORY;
            const tagSuffix = `${process.env.GITHUB_SHA.slice(0, 12)}-${process.env.GITHUB_RUN_ID}-${process.env.GITHUB_RUN_ATTEMPT}`;
            const entries = await fs.readdir(appRoot, { withFileTypes: true });
            const targets = entries
              .filter(entry => entry.isDirectory())
              .sort((a, b) => a.name.localeCompare(b.name))
              .map(entry => {
                const appPath = nodePath.posix.join(appRoot, entry.name);
                return { path: appPath, image: `${repository}:${entry.name}-${tagSuffix}` };
              });

            if (targets.length === 0) {
              throw new Error('No app images were built.');
            }

            let nextTarget = 0;
            async function buildNext(workerId) {
              while (nextTarget < targets.length) {
                const target = targets[nextTarget++];
                core.info(`Worker ${workerId}: building ${target.path}`);
                await exec.exec('studioctl', ['app', 'build', '--path', target.path, '--image-tag', target.image, '--push']);
              }
            }

            const workerCount = Math.min(maxParallelBuilds, targets.length);
            await Promise.all(Array.from({ length: workerCount }, (_, index) => buildNext(index + 1)));
            core.setOutput('app-run-targets-json', JSON.stringify(targets));

  cypress-run-internal:
    name: Cypress Run Internal
    if: |
      (github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft)) &&
      github.repository_owner == 'Altinn' &&
      (
        (github.event_name != 'pull_request' && github.event.repository.fork == false) ||
        (github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false)
      )
    runs-on: ubuntu-latest
    timeout-minutes: 120
    needs: [build-frontend, build-app-images]
    defaults:
      run:
        working-directory: src/App/frontend/
    strategy:
      fail-fast: false
      matrix:
        containers: [1, 2, 3, 4, 5, 6]
    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Run Local Environment
        uses: ./.github/actions/app-run-local-env
        with:
          run-frontend: true
          run-localtest: true
          app-run-targets-json: ${{ needs.build-app-images.outputs.app-run-targets-json }}

      - name: Set Percy command based on PR draft status or main branch
        shell: bash
        run: |
          if [ "${{ github.ref }}" == "refs/heads/main" ] || [ "${{ github.event.pull_request.draft }}" == "false" ]; then
            echo "ENABLE_PERCY=true" >> "$GITHUB_ENV"
          fi

      - name: Install Cypress binary
        shell: bash
        env:
          CYPRESS_CACHE_FOLDER: ${{ github.workspace }}/.cache/Cypress
        run: npx cypress install

      - name: Cypress run
        shell: bash
        env:
          CYPRESS_CACHE_FOLDER: ${{ github.workspace }}/.cache/Cypress
          CYPRESS_PROJECT_ID: o7mikf
          CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} # CYPRESS_RECORD_KEY comes from "org secrets"
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }}
          PERCY_PARALLEL_TOTAL: 6
          PERCY_PARALLEL_NONCE: ${{ github.run_id }}-${{ github.run_attempt }}
          PERCY_BRANCH: ${{ github.head_ref || github.ref_name }}
          PERCY_TARGET_BRANCH: ${{ github.base_ref || 'main' }}
          IS_PR_DRAFT: ${{ github.event.pull_request.draft }}
        run: |
          base_command='npx cypress run --record --parallel --group altinn-app-frontend --tag altinn-app-frontend --browser chrome --ci-build-id "${{ github.run_id }}-${{ github.run_attempt }}" --spec test/e2e/integration --env environment=localtest'

          if [ "${ENABLE_PERCY:-false}" = "true" ]; then
            container_command="npx percy exec --parallel -- ${base_command}"
          else
            container_command="${base_command}"
          fi

          docker run --rm --network host \
            --user "$(id -u):$(id -g)" \
            -e HOME=/tmp \
            -e CI=1 \
            -e CYPRESS_CACHE_FOLDER \
            -e CYPRESS_PROJECT_ID \
            -e CYPRESS_RECORD_KEY \
            -e GITHUB_TOKEN \
            -e PERCY_TOKEN \
            -e PERCY_PARALLEL_TOTAL \
            -e PERCY_PARALLEL_NONCE \
            -e PERCY_BRANCH \
            -e PERCY_TARGET_BRANCH \
            -v "${GITHUB_WORKSPACE}:${GITHUB_WORKSPACE}" \
            -w "${GITHUB_WORKSPACE}/src/App/frontend" \
            "${CYPRESS_BROWSER_IMAGE}" \
            bash -lc "${container_command}"

      - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
        if: failure()
        with:
          name: app-frontend-logs
          path: |
            src/App/frontend/test/logs/*
            ${{ env.STUDIOCTL_HOME }}/logs/**

      - name: Stop localtest
        if: always()
        uses: ./.github/actions/app-stop-local-env

  cypress-run-external:
    name: Cypress Run External
    if: |
      (github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft)) &&
      github.repository_owner == 'Altinn' &&
      (github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == true)

    runs-on: ubuntu-latest
    timeout-minutes: 120
    needs: [build-frontend]
    defaults:
      run:
        working-directory: src/App/frontend/

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Build app run targets
        id: app-run-targets
        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
        with:
          script: |
            const fs = require('fs/promises');
            const nodePath = require('path');

            const appRoot = 'src/test/apps';
            const entries = await fs.readdir(appRoot, { withFileTypes: true });
            const targets = entries
              .filter(entry => entry.isDirectory())
              .sort((a, b) => a.name.localeCompare(b.name))
              .map(entry => ({ path: nodePath.posix.join(appRoot, entry.name) }));

            if (targets.length === 0) {
              throw new Error('No app run targets were found.');
            }
            core.setOutput('app-run-targets-json', JSON.stringify(targets));

      - name: Run Local Environment
        uses: ./.github/actions/app-run-local-env
        with:
          run-frontend: true
          run-localtest: true
          app-run-targets-json: ${{ steps.app-run-targets.outputs.app-run-targets-json }}

      - name: Install Cypress binary
        shell: bash
        env:
          CYPRESS_CACHE_FOLDER: ${{ github.workspace }}/.cache/Cypress
        run: npx cypress install

      - name: Cypress run
        shell: bash
        env:
          CYPRESS_CACHE_FOLDER: ${{ github.workspace }}/.cache/Cypress
        run: |
          docker run --rm --network host \
            --user "$(id -u):$(id -g)" \
            -e HOME=/tmp \
            -e CI=1 \
            -e CYPRESS_CACHE_FOLDER \
            -v "${GITHUB_WORKSPACE}:${GITHUB_WORKSPACE}" \
            -w "${GITHUB_WORKSPACE}/src/App/frontend" \
            "${CYPRESS_BROWSER_IMAGE}" \
            bash -lc 'npx cypress run --browser chrome --spec test/e2e/integration --env environment=localtest'

      - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
        if: failure()
        with:
          name: app-frontend-external-logs
          path: |
            src/App/frontend/test/logs/*
            src/App/frontend/test/screenshots/*
            src/App/frontend/test/videos/*
            ${{ env.STUDIOCTL_HOME }}/logs/**

      - name: Stop localtest
        if: always()
        uses: ./.github/actions/app-stop-local-env


================================================
FILE: .github/workflows/app-frontend-k6-browser.yml
================================================
name: App Frontend - K6 Browser Tests

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/backend/**'
      - 'src/App/codelists/**'
      - 'src/App/fileanalyzers/**'
      - 'src/Runtime/localtest/**'
      - 'src/Runtime/pdf3/**'
      - 'src/App/frontend/src/**'
      - 'src/App/frontend/test/**'
      - 'src/App/frontend/package.json'
      - 'src/test/apps/**'
      - '.github/actions/**'
      - '.github/workflows/app-frontend-k6-browser.yml'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true
jobs:
  build-frontend:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    name: Build Frontend
    runs-on: ubuntu-24.04
    timeout-minutes: 30
    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
      - name: Build frontend
        uses: ./.github/actions/app-build-frontend

  k6-browser:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    name: K6 Browser
    runs-on: ubuntu-24.04
    timeout-minutes: 30
    needs: [build-frontend]
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Run Local Environment
        uses: ./.github/actions/app-run-local-env
        with:
          run-frontend: true
          run-localtest: true
          app-run-targets-json: |
            [{ "path": "src/test/apps/frontend-test" }]

      - name: Create screenshots directory
        run: sudo mkdir -p k6-browser-screenshots && sudo chmod 777 k6-browser-screenshots

      - name: Run k6 browser test
        run: |
          docker run --rm -i --security-opt seccomp=./src/App/frontend/test/e2e/k6-browser/chrome.json \
            --network host --cap-add=SYS_ADMIN \
            -v ${{ github.workspace }}:/github/workspace \
            -w /github/workspace \
            -e K6_BROWSER_TIMEOUT=120000 \
            grafana/k6:1.6.1-with-browser \
            run ./src/App/frontend/test/e2e/k6-browser/browser-script.ts
        timeout-minutes: 10

      - name: Fix screenshots ownership for artifact upload
        run: sudo chown -R runner:runner k6-browser-screenshots/ || echo "No screenshots to fix ownership"

      - name: Upload screenshots
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
        if: always()
        with:
          name: k6-browser-screenshots
          path: k6-browser-screenshots
          retention-days: 30

      - name: Stop localtest
        if: always()
        uses: ./.github/actions/app-stop-local-env


================================================
FILE: .github/workflows/app-frontend-lighthouse-ci.yml
================================================
name: App Frontend - Lighthouse CI
on:
  push:
    branches:
      - 'main'
    paths:
      - '.github/workflows/app-frontend-lighthouse-ci.yml'
      - '.github/actions/**'
      - 'src/App/frontend/**'
      - 'src/Runtime/localtest/**'
      - 'src/test/apps/component-library/**'
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - '.github/workflows/app-frontend-lighthouse-ci.yml'
      - '.github/actions/**'
      - 'src/App/frontend/**'
      - 'src/Runtime/localtest/**'
      - 'src/test/apps/component-library/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  build-frontend:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    timeout-minutes: 10
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
      - name: Build frontend
        uses: ./.github/actions/app-build-frontend

  lighthouse:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    name: Lighthouse CI
    runs-on: ubuntu-latest
    timeout-minutes: 30
    needs: [build-frontend]
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0

      - name: Run Local Environment
        uses: ./.github/actions/app-run-local-env
        with:
          run-frontend: true
          run-localtest: true
          app-run-targets-json: |
            [{ "path": "src/test/apps/component-library" }]

      - name: Run Lighthouse CI
        env:
          ENV: 'CI' # Signals to src/App/frontend/lighthouserc.js that we're running in CI
          LHCI_SERVER_URL: ${{ secrets.LHCI_SERVER_URL }}
          LHCI_BUILD_TOKEN: ${{ secrets.LHCI_ALTINN_APP_BUILD_TOKEN }}
          LHCI_USERNAME: ${{ secrets.LHCI_BASIC_AUTH_USERNAME }}
          LHCI_PASSWORD: ${{ secrets.LHCI_BASIC_AUTH_PASSWORD }}
          LHCI_BUILD_CONTEXT__ANCESTOR_HASH: ${{ github.event.pull_request.base.sha || '' }}
        working-directory: src/App/frontend
        run: yarn run lhci
      - name: Compare Lighthouse results
        id: lighthouse-compare
        if: github.event_name == 'pull_request'
        continue-on-error: false
        uses: adevinta/actions-lighthouseci-compare@10b06f197bf31d8f6d66021376c79164cab167c9 # v1.1.7
        with:
          links-filepath: 'src/App/frontend/.lighthouseci/links.json'
          base-url: '${{ secrets.LHCI_SERVER_URL }}/v1'
          project-id: ${{ secrets.LHCI_ALTINN_APP_PROJECT_ID }}
          current-commit-sha: ${{ github.event.pull_request.head.sha }}
          basic-auth-username: ${{ secrets.LHCI_BASIC_AUTH_USERNAME }}
          basic-auth-password: ${{ secrets.LHCI_BASIC_AUTH_PASSWORD }}

      - name: Comment PR with Lighthouse Report
        if: github.event_name == 'pull_request' && steps.lighthouse-compare.outputs.markdown != ''
        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
        env:
          COMPARE_MARKDOWN: ${{ steps.lighthouse-compare.outputs.markdown }}
        with:
          script: |
            const marker = '<!-- lighthouse-ci-report -->';
            const compareMarkdown = process.env.COMPARE_MARKDOWN;

            let body = marker + '\n🔍 **Lighthouse Report**\n\n' + compareMarkdown;

            const comments = await github.paginate(github.rest.issues.listComments, {
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
            });
            const existing = comments.find(c => c.body.includes(marker));

            if (existing) {
              body += `\n\n---\n*Edited*`;

              await github.rest.issues.updateComment({
                comment_id: existing.id,
                owner: context.repo.owner,
                repo: context.repo.repo,
                body,
              });
            } else {
              await github.rest.issues.createComment({
                issue_number: context.issue.number,
                owner: context.repo.owner,
                repo: context.repo.repo,
                body,
              });
            }

      - name: Stop localtest
        if: always()
        uses: ./.github/actions/app-stop-local-env


================================================
FILE: .github/workflows/app-frontend-unit-tests.yml
================================================
name: App Frontend - Unit tests

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/frontend/src/**'
      - 'src/App/frontend/package.json'
      - '.github/workflows/app-frontend-unit-tests.yml'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  unit-tests:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    runs-on: ubuntu-latest
    timeout-minutes: 30
    name: Type-checks, eslint, unit tests and SonarCloud
    defaults:
      run:
        working-directory: src/App/frontend/
    steps:
      - name: checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis

      - name: install node
        uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
        with:
          node-version: '22'

      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT

      - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
        id: yarn-cache
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-

      - name: install dependencies
        run: yarn --immutable

      - name: type-check
        run: yarn tsc

      - name: type-check-strict
        run: |
          strict_error_count="$(yarn tsc-strict:error-count)"
          echo "Strict TypeScript error count: ${strict_error_count}"

          if (( strict_error_count >= 301 )); then
            echo "Strict TypeScript error count is ${strict_error_count}, expected less than 301."
            exit 1
          fi

      - name: run eslint
        run: yarn lint

      - name: run tests
        run: yarn test --coverage

      # TODO: consider for removal?
      # - name: SonarCloud Scan
      #   if: |
      #     github.repository_owner == 'Altinn' &&
      #     (github.event_name != 'pull_request' && github.event.repository.fork == false) ||
      #     (github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false)
      #   with:
      #     projectBaseDir: src/App/frontend/
      #   uses: SonarSource/sonarqube-scan-action@1a6d90ebcb0e6a6b1d87e37ba693fe453195ae25 # v5.3.1
      #   env:
      #     GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      #     SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}


================================================
FILE: .github/workflows/app-template-build-on-pr.yaml
================================================
name: App Template - docker build on PR

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/template/**'
      - '.github/workflows/app-template-build-on-pr.yaml'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  analyze:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    strategy:
      matrix:
        os: [ubuntu-latest]
    name: Run release and docker build
    runs-on: ${{ matrix.os}}
    timeout-minutes: 30
    env:
      DOTNET_HOSTBUILDER__RELOADCONFIGONCHANGE: false
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Make template release
        run: |
          rsync . -rv --exclude-from=.releaseignore --exclude-from=.gitignore app-template-release
        working-directory: src/App/template/src

      - name: Docker build release
        run: |
          docker build .
        working-directory: src/App/template/src/app-template-release


================================================
FILE: .github/workflows/app-template-test.yml
================================================
name: App Template - Build and test

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - 'src/App/template/**'
      - '.github/workflows/app-template-test.yml'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  analyze:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    strategy:
      matrix:
        os: [macos-latest,windows-latest,ubuntu-latest]
    name: Run dotnet build and test
    runs-on: ${{ matrix.os}}
    timeout-minutes: 30
    env:
      DOTNET_HOSTBUILDER__RELOADCONFIGONCHANGE: false
    steps:
      - name: Enable long paths for git on Windows
        if: matrix.os == 'windows-latest'
        run: git config --system core.longpaths true

      - name: Setup .NET
        uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5
        with:
          dotnet-version: |
            8.0.x
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0  # Shallow clones should be disabled for a better relevancy of analysis
      - name: Build
        run: |
           dotnet build src/App.sln -v m
        working-directory: src/App/template

      - name: Test
        run: |
           dotnet test src/App.sln -v m --no-restore --no-build
        working-directory: src/App/template


================================================
FILE: .github/workflows/approve-pr.yaml
================================================
name: Approve PR

on:
  pull_request_target:
    types: [ opened, labeled ]

permissions:
  contents: read
  pull-requests: write

jobs:
  approve:
    runs-on: ubuntu-latest
    concurrency:
      group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
      cancel-in-progress: true
    steps:
      - name: Check if auto-approval is needed
        id: check-labels
        run: |
          has_approve_label=$(gh pr view ${{ github.event.pull_request.number }} --repo "${{ github.repository }}" --json labels --jq 'any(.labels[]?; .name == "approve")')

          if [[ "$has_approve_label" != "true" ]]; then
            echo "should_approve=false" >> $GITHUB_OUTPUT
            exit 0
          fi

          if ! permission=$(gh api repos/${{ github.repository }}/collaborators/"$ACTOR"/permission --jq '.permission' 2>/dev/null); then
            echo "should_approve=false" >> $GITHUB_OUTPUT
            echo "Could not determine permission for $ACTOR"
            exit 0
          fi

          case "$permission" in
            admin|maintain|write)
              ;;
            *)
              echo "should_approve=false" >> $GITHUB_OUTPUT
              echo "User $ACTOR cannot use the approve label: $permission"
              exit 0
              ;;
          esac

          # Check if already approved by github-actions bot
          reviews=$(gh pr view ${{ github.event.pull_request.number }} --repo "${{ github.repository }}" --json reviews --jq '.reviews[] | select((.author.login == "github-actions" or .author.login == "github-actions[bot]") and .state == "APPROVED")')

          if [ -n "$reviews" ]; then
            echo "should_approve=false" >> $GITHUB_OUTPUT
            echo "PR already approved by github-actions bot"
          else
            echo "should_approve=true" >> $GITHUB_OUTPUT
          fi
        env:
          ACTOR: ${{ github.event.sender.login }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Auto approve PR
        if: steps.check-labels.outputs.should_approve == 'true'
        run: gh pr review ${{ github.event.pull_request.number }} --repo "${{ github.repository }}" --approve
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/cli-build-test.yaml
================================================
name: CLI - Build and test

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - "src/cli/**"
      - "src/tools/releaser/**"
      - .github/workflows/cli-build-test.yaml
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  detect-changelog-change:
    name: Detect changelog changes
    if: github.event_name == 'pull_request' && github.event.action != 'closed' && !github.event.pull_request.draft && !contains(github.event.pull_request.labels.*.name, 'skip-changelog')
    runs-on: ubuntu-latest
    timeout-minutes: 30
    outputs:
      changed: ${{ steps.changes.outputs.changed }}
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0

      - name: Detect changelog changes
        id: changes
        run: |
          if git diff --name-only "${{ github.event.pull_request.base.sha }}" "${{ github.event.pull_request.head.sha }}" -- src/cli/CHANGELOG.md | grep -q .; then
            echo "changed=true" >> "$GITHUB_OUTPUT"
          else
            echo "changed=false" >> "$GITHUB_OUTPUT"
          fi

  validate-changelog:
    name: Validate changelog
    if: (github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft)) && needs.detect-changelog-change.outputs.changed == 'true'
    needs: detect-changelog-change
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0

      - name: Setup Go for changelog validation
        uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6
        with:
          go-version-file: 'src/tools/releaser/go.mod'
          cache-dependency-path: src/tools/releaser/go.sum

      - name: Validate changelog
        working-directory: src/tools/releaser
        run: |
          go run . validate-changelog -component studioctl -base "${{ github.event.pull_request.base.sha }}" -head "${{ github.event.pull_request.head.sha }}"

  verify-release-artifacts:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    name: Verify studioctl release artifacts
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0
          fetch-tags: true

      - name: Setup .NET
        uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5
        with:
          global-json-file: src/cli/global.json

      - name: Setup Go
        uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6
        with:
          go-version-file: src/tools/releaser/go.mod
          cache-dependency-path: src/tools/releaser/go.sum

      - name: Build release artifacts via releaser dry-run
        working-directory: src/tools/releaser
        run: |
          go run . workflow --component studioctl --base-branch main --dry-run --skip-branch-check

      - name: Upload release artifacts
        if: always()
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
        with:
          name: studioctl-release-artifacts
          path: build/release/
          if-no-files-found: ignore
          retention-days: 1

  analyze:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    strategy:
      matrix:
        os: [macos-latest,windows-latest,ubuntu-latest]
    name: Build and test
    runs-on: ${{ matrix.os}}
    timeout-minutes: 30
    env:
      DOTNET_HOSTBUILDER__RELOADCONFIGONCHANGE: false
    steps:
      - name: Enable long paths for git on Windows
        if: matrix.os == 'windows-latest'
        run: git config --system core.longpaths true

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0

      - name: Setup .NET
        uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5
        with:
          global-json-file: src/cli/global.json

      - name: Setup Go
        uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6
        with:
          go-version-file: 'src/cli/go.mod'
          cache-dependency-path: src/cli/go.sum

      - name: Build
        working-directory: src/cli
        run: |
          make build

      - name: Check formatting
        if: matrix.os == 'ubuntu-latest'
        working-directory: src/cli
        run: |
          make fmt
          git diff --exit-code -- .

      - name: Lint
        working-directory: src/cli
        run: |
          make lint

      - name: Test
        working-directory: src/cli
        run: |
          make test

      - name: Run e2e tests
        working-directory: src/cli
        run: |
          make test-e2e


================================================
FILE: .github/workflows/codeowners-validate.yaml
================================================
name: Validate CODEOWNERS

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review]
    paths:
      - ".github/CODEOWNERS"
      - ".github/scripts/codeowners-generate.mjs"
      - ".github/workflows/codeowners-validate.yaml"
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  validate:
    name: Validate generated CODEOWNERS
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          fetch-depth: 1

      - name: Setup Node
        uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
        with:
          node-version: "22"
          package-manager-cache: false

      - name: Validate CODEOWNERS
        run: node .github/scripts/codeowners-generate.mjs --check


================================================
FILE: .github/workflows/construct-environments-script-test.yaml
================================================
name: Construct Environments Script - Test

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, closed]
    paths:
      - ".github/scripts/construct-environments.mjs"
      - ".github/scripts/construct-environments.test.mjs"
      - ".github/workflows/construct-environments-script-test.yaml"
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
  cancel-in-progress: true

jobs:
  test:
    if: ${{ github.event_name != 'pull_request' || (github.event.action != 'closed' && !github.event.pull_request.draft) }}
    name: Run node tests
    runs-on: ubuntu-latest
    timeout-minutes: 5
    permissions:
      contents: read
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          fetch-depth: 1
          sparse-checkout: |
            .github/scripts

      - name: Setup Node
        uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
        with:
          node-version: "22"
          package-manager-cache: false

      - name: Test construct environments script
        run: node --test .github/scripts/construct-environments.test.mjs


================================================
FILE: .github/workflows/deploy-designer.yaml
================================================
name: Deploy Designer
on:
  push:
    branches: [ main ]
    paths:
      - '.github/workflows/deploy-designer.yaml'
      - '.github/workflows/template-docker-push.yaml'
      - '.github/workflows/template-flux-config-push.yaml'
      - '.github/workflows/template-helm-push.yaml'
      - 'src/Designer/backend/**'
      - 'src/Designer/frontend/**'
      - 'src/Designer/Dockerfile'
      - 'src/App/template/**'
      - 'package.json'
      - 'charts/altinn-designer/**'
      - 'charts/altinn-designer-config/**'

  workflow_dispatch:
    inputs:
      environments:
        description: 'Environments to deploy to. Multiple environments can be specified by separating them with a comma.'
        required: false
        default: 'dev'

permissions:
      id-token: write
      contents: read

jobs:
  construct-environments-array:
    uses: ./.github/workflows/template-studio-construct-environments.yaml
    with:
      use-preapproved: true
      inputs: ${{ toJSON(github.event.inputs) }}
      override-default-studio-environments: staging,preapproved-prod

  determine-tag:
    runs-on: ubuntu-latest
    outputs:
      tag: ${{ steps.determine-tag.outputs.tag }}
    steps:
      - name: Determine tag
        id: determine-tag
        run: |
          SHORT_SHA="${GITHUB_SHA::10}"
          if [ "${{ github.ref }}" == "refs/heads/main" ]; then
            echo "tag=${SHORT_SHA}" >> "$GITHUB_OUTPUT"
          else
            sanitized_branch_name=$(echo "${{ github.ref_name }}" | tr -d '()' | tr '/' '-' | tr '_' '-')
            echo "tag=${sanitized_branch_name}-${SHORT_SHA}" >> "$GITHUB_OUTPUT"
          fi

  docker-build-push:
    needs: determine-tag
    uses: ./.github/workflows/template-docker-push.yaml
    with:
      tags: ${{ needs.determine-tag.outputs.tag }},latest
      registry-name: altinntjenestercontainerregistry.azurecr.io
      repository-name: altinn-core
      context: .
      dockerfile: src/Designer/Dockerfile
      environment: dev # dev environment has push access and doesn't require review
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}
      build-args: DESIGNER_VERSION=${{ needs.determine-tag.outputs.tag }}

  db-migrations-docker-build-push:
    needs: determine-tag
    uses: ./.github/workflows/template-docker-push.yaml
    with:
      tags: ${{ needs.determine-tag.outputs.tag }},latest
      registry-name: altinntjenestercontainerregistry.azurecr.io
      repository-name: altinn-designer-db-migrations
      context: src/Designer/backend
      dockerfile: src/Designer/backend/Migrations.Dockerfile
      environment: dev # dev environment has push access and doesn't require review
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

  helm-push:
    needs: determine-tag
    uses: ./.github/workflows/template-helm-push.yaml
    with:
      tag: 0.1.0+${{ needs.determine-tag.outputs.tag }} # Helm version needs to be valid sematic version
      chart-name: altinn-designer
      registry-name: altinntjenestercontainerregistry.azurecr.io
      environment: dev
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

  flux-config-push:
    needs: [construct-environments-array, determine-tag, docker-build-push, db-migrations-docker-build-push, helm-push]
    strategy:
      matrix:
        include: ${{ fromJSON(needs.construct-environments-array.outputs.result) }}
    uses: ./.github/workflows/template-flux-config-push.yaml
    with:
      tag: ${{ needs.determine-tag.outputs.tag }}
      registry-name: altinntjenestercontainerregistry.azurecr.io
      environment: ${{ matrix.environment }}
      artifact-environment: ${{ matrix.environment == 'preapproved-prod' && 'prod' ||  matrix.environment }}
      config-chart-name: altinn-designer-config
      artifact-name: altinn-designer
      helm-set-arguments: environmentName=${{ matrix.environment == 'preapproved-prod' && 'prod' ||  matrix.environment }},chartVersion=0.1.0+${{ needs.determine-tag.outputs.tag }},imageTag=${{ needs.determine-tag.outputs.tag }},dbMigrationsTag=${{ needs.determine-tag.outputs.tag }},replicas=${{ matrix.environment == 'dev' && 1 || 2 }}
      trace-workflow: true
      trace-team-name: 'team-studio'
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}
      trace-connection-string: ${{ secrets.APP_INSIGHTS_CONNECTION_STRING }}
      trace-repo-token: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/deploy-gitea-runners.yaml
================================================
name: Deploy Gitea Organization Runners
on:
  push:
    branches: [ main ]
    paths:
      - '.github/workflows/deploy-gitea-runners.yaml'
      - '.github/workflows/template-docker-push.yaml'
      - '.github/workflows/template-flux-config-push.yaml'
      - '.github/workflows/template-helm-push.yaml'
      - 'charts/gitea-org-runner/**'
      - 'charts/gitea-org-runner-config/**'
      - 'src/gitea-runner/**'

  workflow_dispatch:
    inputs:
      environments:
        description: 'Environments to deploy to. Multiple environments can be specified by separating them with a comma.'
        required: false
        default: 'dev'

permissions:
      id-token: write
      contents: read

jobs:
  construct-environments-array:
    uses: ./.github/workflows/template-studio-construct-environments.yaml
    with:
      inputs: ${{ toJSON(github.event.inputs) }}

  determine-tag:
    runs-on: ubuntu-latest
    outputs:
      tag: ${{ steps.determine-tag.outputs.tag }}
    steps:
      - name: Determine tag
        id: determine-tag
        run: |
          SHORT_SHA="${GITHUB_SHA::10}"
          if [ "${{ github.ref }}" == "refs/heads/main" ]; then
            echo "tag=${SHORT_SHA}" >> "$GITHUB_OUTPUT"
          else
            sanitized_branch_name=$(echo "${{ github.ref_name }}" | tr -d '()' | tr '/' '-')
            echo "tag=${sanitized_branch_name}-${SHORT_SHA}" >> "$GITHUB_OUTPUT"
          fi

  docker-build-push:
    needs: determine-tag
    uses: ./.github/workflows/template-docker-push.yaml
    with:
      tags: ${{ needs.determine-tag.outputs.tag }},latest
      registry-name: altinntjenestercontainerregistry.azurecr.io
      repository-name: altinn-gitea-runner
      context: src/gitea-runner
      dockerfile: src/gitea-runner/Dockerfile
      environment: dev # dev environment has push access and doesn't require review
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

  helm-push:
    needs: determine-tag
    uses: ./.github/workflows/template-helm-push.yaml
    with:
      tag: 0.1.0+${{ needs.determine-tag.outputs.tag }} # Helm version needs to be valid sematic version
      chart-name: gitea-org-runner
      registry-name: altinntjenestercontainerregistry.azurecr.io
      environment: dev # dev environment has push access and doesn't require review
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

  flux-config-push:
    needs: [docker-build-push, helm-push, determine-tag, construct-environments-array]
    strategy:
      matrix:
        include: ${{ fromJSON(needs.construct-environments-array.outputs.result) }}
    uses: ./.github/workflows/template-flux-config-push.yaml
    with:
      tag: ${{ needs.determine-tag.outputs.tag }}
      registry-name: altinntjenestercontainerregistry.azurecr.io
      environment: ${{ matrix.environment }}
      config-chart-name: gitea-org-runner-config
      artifact-name: gitea-runners
      helm-set-arguments: chartVersion=0.1.0+${{ needs.determine-tag.outputs.tag }},imageTag=${{ needs.determine-tag.outputs.tag }},releaseName=gitea-runners,environment=${{ matrix.environment }}
      trace-workflow: false
      trace-team-name: 'team-studio'
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}
      trace-connection-string: ${{ secrets.APP_INSIGHTS_CONNECTION_STRING }}
      trace-repo-token: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/deploy-lhci-server.yaml
================================================
name: Deploy LHCI Server
on:
  push:
    branches: [main]
    paths:
      - 'src/lhci-server/**'
      - '.github/workflows/deploy-lhci-server.yaml'
  workflow_dispatch:
    inputs:
      environments:
        description: 'Environments to deploy to. Multiple environments can be specified by separating them with a comma.'
        required: false
        default: 'dev'

permissions:
  id-token: write
  contents: read

jobs:
  construct-environments-array:
    uses: ./.github/workflows/template-studio-construct-environments.yaml
    with:
      inputs: ${{ toJSON(github.event.inputs) }}

  push-artifact:
    name: Push LHCI server as OCI artifact
    runs-on: ubuntu-latest
    environment: dev
    env:
      REGISTRY_NAME: altinntjenestercontainerregistry
    outputs:
      CONFIG_REPO: ${{ steps.vars.outputs.config-repo }}
    defaults:
      run:
        working-directory: src/lhci-server
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Set vars
        id: vars
        run: |
          SHA="${GITHUB_SHA::10}"
          echo "short-sha=$SHA" >> "$GITHUB_OUTPUT"
          echo "image-repo=altinntjenestercontainerregistry.azurecr.io/altinn-studio/lhci-server:${SHA}" >> "$GITHUB_OUTPUT"
          echo "config-repo=altinntjenestercontainerregistry.azurecr.io/altinn-studio/configs/lhci-repo:${SHA}" >> "$GITHUB_OUTPUT"

      - name: az login
        uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

      - name: az acr login
        run: az acr login --name ${{ env.REGISTRY_NAME }}

      - name: flux install
        uses: fluxcd/flux2/action@bfa461ed2153ae5e0cca6bce08e0845268fb3088 # v2.8.2

      - name: docker build
        run: docker build -t ${{ steps.vars.outputs.image-repo }} -f Dockerfile .

      - name: push image
        run: docker push ${{ steps.vars.outputs.image-repo }}

      - name: patch base with image tag
        working-directory: src/lhci-server/infra/kustomize
        run: |
          export IMAGE="${{ steps.vars.outputs.image-repo }}"
          export IMAGE_TAG="${{ steps.vars.outputs.short-sha }}"
          yq -i '.metadata.annotations["altinn.studio/image"] = env(IMAGE)' deployment.yaml
          yq -i '.metadata.annotations["altinn.studio/image-tag"] = env(IMAGE_TAG)' deployment.yaml

      - name: push artifact
        working-directory: src/lhci-server/infra/kustomize
        run: |
          flux push artifact oci://${{ steps.vars.outputs.config-repo }} \
            --provider=azure \
            --reproducible \
            --path="." \
            --source="$(git config --get remote.origin.url)" \
            --revision="$(git branch --show-current)/$(git rev-parse HEAD)"

  tag:
    name: Tag artifact
    needs: [push-artifact, construct-environments-array]
    runs-on: ubuntu-latest
    environment: ${{ matrix.environment }}
    env:
      REGISTRY_NAME: altinntjenestercontainerregistry
    strategy:
      matrix:
        include: ${{ fromJSON(needs.construct-environments-array.outputs.result) }}
    steps:
      - name: az login
        uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

      - name: az acr login
        run: az acr login --name ${{ env.REGISTRY_NAME }}

      - name: flux install
        uses: fluxcd/flux2/action@bfa461ed2153ae5e0cca6bce08e0845268fb3088 # v2.8.2

      - name: tag artifact
        run: |
          flux tag artifact oci://${{ needs.push-artifact.outputs.CONFIG_REPO }} \
            --tag ${{ matrix.environment }}


================================================
FILE: .github/workflows/deploy-loadbalancer.yaml
================================================
name: Deploy Loadbalancer
on:
  push:
    branches: [ main ]
    paths:
      - '.github/workflows/deploy-loadbalancer.yaml'
      - '.github/workflows/template-docker-push.yaml'
      - '.github/workflows/template-flux-config-push.yaml'
      - '.github/workflows/template-helm-push.yaml'
      - 'src/load-balancer/**'
      - 'charts/altinn-loadbalancer/**'
      - 'charts/altinn-loadbalancer-config/**'

  workflow_dispatch:
    inputs:
      environments:
        description: 'Environments to deploy to. Multiple environments can be specified by separating them with a comma.'
        required: false
        default: 'dev'

permissions:
      id-token: write
      contents: read

jobs:
  construct-environments-array:
    uses: ./.github/workflows/template-studio-construct-environments.yaml
    with:
      inputs: ${{ toJSON(github.event.inputs) }}

  determine-tag:
    runs-on: ubuntu-latest
    outputs:
      tag: ${{ steps.determine-tag.outputs.tag }}
    steps:
      - name: Determine tag
        id: determine-tag
        run: |
          SHORT_SHA="${GITHUB_SHA::10}"
          if [ "${{ github.ref }}" == "refs/heads/main" ]; then
            echo "tag=${SHORT_SHA}" >> "$GITHUB_OUTPUT"
          else
            sanitized_branch_name=$(echo "${{ github.ref_name }}" | tr -d '()' | tr '/' '-')
            echo "tag=${sanitized_branch_name}-${SHORT_SHA}" >> "$GITHUB_OUTPUT"
          fi

  docker-build-push:
    needs: determine-tag
    uses: ./.github/workflows/template-docker-push.yaml
    with:
      tags: ${{ needs.determine-tag.outputs.tag }},latest
      registry-name: altinntjenestercontainerregistry.azurecr.io
      repository-name: altinn-loadbalancer
      context: src/load-balancer
      dockerfile: src/load-balancer/Dockerfile
      environment: dev
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

  helm-push:
    needs: determine-tag
    uses: ./.github/workflows/template-helm-push.yaml
    with:
      tag: 0.1.0+${{ needs.determine-tag.outputs.tag }} # Helm version needs to be valid sematic version
      chart-name: altinn-loadbalancer
      registry-name: altinntjenestercontainerregistry.azurecr.io
      environment: dev # dev environment has push access and doesn't require review
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

  flux-config-push:
    needs: [helm-push, docker-build-push, determine-tag, construct-environments-array]
    strategy:
      matrix:
        include: ${{ fromJSON(needs.construct-environments-array.outputs.result) }}
    uses: ./.github/workflows/template-flux-config-push.yaml
    with:
      tag: ${{ needs.determine-tag.outputs.tag }}
      registry-name: altinntjenestercontainerregistry.azurecr.io
      environment: ${{ matrix.environment }}
      config-chart-name: altinn-loadbalancer-config
      artifact-name: altinn-loadbalancer
      helm-set-arguments: environmentName=${{ matrix.environment }},chartVersion=0.1.0+${{ needs.determine-tag.outputs.tag }},imageTag=${{ needs.determine-tag.outputs.tag }}
      trace-workflow: true
      trace-team-name: 'team-studio'
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}
      trace-connection-string: ${{ secrets.APP_INSIGHTS_CONNECTION_STRING }}
      trace-repo-token: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/deploy-repositories.yaml
================================================
name: Deploy Repositories
on:
  push:
    branches: [ main ]
    paths:
      - '.github/workflows/deploy-repositories.yaml'
      - '.github/workflows/template-docker-push.yaml'
      - '.github/workflows/template-flux-config-push.yaml'
      - '.github/workflows/template-helm-push.yaml'
      - 'src/gitea/**'
      - 'src/gitea-proxy/**'
      - 'charts/altinn-repositories/**'
      - 'charts/altinn-repositories-config/**'

  workflow_dispatch:
    inputs:
      environments:
        description: 'Environments to deploy to. Multiple environments can be specified by separating them with a comma.'
        required: false
        default: 'dev'

permissions:
      id-token: write
      contents: read

jobs:
  construct-environments-array:
    uses: ./.github/workflows/template-studio-construct-environments.yaml
    with:
      inputs: ${{ toJSON(github.event.inputs) }}

  determine-tag:
    runs-on: ubuntu-latest
    outputs:
      tag: ${{ steps.determine-tag.outputs.tag }}
    steps:
      - name: Determine tag
        id: determine-tag
        run: |
          SHORT_SHA="${GITHUB_SHA::10}"
          if [ "${{ github.ref }}" == "refs/heads/main" ]; then
            echo "tag=${SHORT_SHA}" >> "$GITHUB_OUTPUT"
          else
            sanitized_branch_name=$(echo "${{ github.ref_name }}" | tr -d '()' | tr '/' '-')
            echo "tag=${sanitized_branch_name}-${SHORT_SHA}" >> "$GITHUB_OUTPUT"
          fi

  docker-build-push:
    needs: determine-tag
    uses: ./.github/workflows/template-docker-push.yaml
    with:
      tags: ${{ needs.determine-tag.outputs.tag }},latest
      registry-name: altinntjenestercontainerregistry.azurecr.io
      repository-name: altinn-repositories
      context: src/gitea
      dockerfile: src/gitea/Dockerfile
      environment: dev # dev environment has push access and doesn't require review
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

  docker-build-push-gitea-proxy:
    needs: determine-tag
    uses: ./.github/workflows/template-docker-push.yaml
    with:
      tags: ${{ needs.determine-tag.outputs.tag }},latest
      registry-name: altinntjenestercontainerregistry.azurecr.io
      repository-name: altinn-gitea-proxy
      context: src/gitea-proxy
      dockerfile: src/gitea-proxy/Dockerfile
      environment: dev
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

  helm-push:
    needs: determine-tag
    uses: ./.github/workflows/template-helm-push.yaml
    with:
      tag: 0.1.0+${{ needs.determine-tag.outputs.tag }} # Helm version needs to be valid semantic version
      chart-name: altinn-repositories
      registry-name: altinntjenestercontainerregistry.azurecr.io
      environment: dev # dev environment has push access and doesn't require review
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

  flux-config-push:
    needs: [construct-environments-array, determine-tag, docker-build-push, docker-build-push-gitea-proxy, helm-push]
    strategy:
      matrix:
        include: ${{ fromJSON(needs.construct-environments-array.outputs.result) }}
    uses: ./.github/workflows/template-flux-config-push.yaml
    with:
      tag: ${{ needs.determine-tag.outputs.tag }}
      registry-name: altinntjenestercontainerregistry.azurecr.io
      environment: ${{ matrix.environment }}
      config-chart-name: altinn-repositories-config
      artifact-name: altinn-repositories
      helm-set-arguments: environmentName=${{ matrix.environment }},chartVersion=0.1.0+${{ needs.determine-tag.outputs.tag }},imageTag=${{ needs.determine-tag.outputs.tag }}
    secrets:
      client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
      tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
      subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}


================================================
FILE: .github/workflows/deploy-runtime-apps-config.yaml
================================================
name: Runtime - deploy apps config

on:
  push:
    branches:
      - main
    paths:
      - infra/runtime/apps-config/**
      - .github/workflows/deploy-runtime-apps-config.yaml
  workflow_dispatch:
    inputs:
      environments:
        description: "Runtime environments to tag. Comma-separated (e.g. at_ring1,at_ring2)."
        required: false
        default: "at_ring1"

permissions:
  id-token: write
  contents: read

jobs:
  construct-rings-array:
    uses: ./.github/workflows/template-runtime-construct-environments.yaml
    with:
      inputs: ${{ toJSON(github.event.inputs) }}

  push-apps-config-artifact:
    name: Push apps config as OCI artifact
    runs-on: ubuntu-latest
    environment: dev
    env:
      REGISTRY_NAME: altinncr
    outputs:
      config-repo: ${{ steps.vars.outputs.config-repo }}
    defaults:
      run:
        working-directory: infra/runtime/apps-config
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Set vars
        id: vars
        run: echo "config-repo=altinncr.azurecr.io/studio-apps/runtime-apps-config-repo:${GITHUB_SHA::10}" >> "$GITHUB_OUTPUT"

      - name: az login
        uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

      - name: az acr login
        run: az acr login --name ${{ env.REGISTRY_NAME }}

      - name: flux install
        uses: fluxcd/flux2/action@bfa461ed2153ae5e0cca6bce08e0845268fb3088 # v2.8.2

      - name: push artifact
        run: |
          flux push artifact oci://${{ steps.vars.outputs.config-repo }} \
            --provider=azure \
            --reproducible \
            --path="." \
            --source="$(git config --get remote.origin.url)" \
            --revision="$(git branch --show-current)/$(git rev-parse HEAD)"

  tag-apps-config:
    name: Tag apps config
    needs: [push-apps-config-artifact, construct-rings-array]
    runs-on: ubuntu-latest
    environment: ${{ matrix.environment }}
    strategy:
      matrix:
        include: ${{ fromJson(needs.construct-rings-array.outputs.result) }}
    steps:
      - name: az login
        uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

      - name: az acr login
        run: az acr login --name altinncr

      - name: flux install
        uses: fluxcd/flux2/action@bfa461ed2153ae5e0cca6bce08e0845268fb3088 # v2.8.2

      - name: tag artifact
        run: |
          flux tag artifact oci://${{ needs.push-apps-config-artifact.outputs.config-repo }} \
            --tag ${{ matrix.ring }}


================================================
FILE: .github/workflows/deploy-runtime-flux-config.yaml
================================================
name: Runtime - deploy flux config

on:
  push:
    branches:
      - main
    paths:
      - infra/runtime/flux-config/**
      - .github/workflows/deploy-runtime-flux-config.yaml
  workflow_dispatch:
    inputs:
      environments:
        description: "Runtime environments to tag. Comma-separated (e.g. at_ring1,at_ring2)."
        required: false
        default: "at_ring1"

permissions:
  id-token: write
  contents: read

jobs:
  construct-rings-array:
    uses: ./.github/workflows/template-runtime-construct-environments.yaml
    with:
      inputs: ${{ toJSON(github.event.inputs) }}

  push-flux-config-artifact:
    name: Push flux config as OCI artifact
    runs-on: ubuntu-latest
    environment: dev
    env:
      REGISTRY_NAME: altinncr
    outputs:
      config-repo: ${{ steps.vars.outputs.config-repo }}
    defaults:
      run:
        working-directory: infra/runtime/flux-config
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Set vars
        id: vars
        run: echo "config-repo=altinncr.azurecr.io/studio-apps/runtime-flux-config-repo:${GITHUB_SHA::10}" >> "$GITHUB_OUTPUT"

      - name: az login
        uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

      - name: az acr login
        run: az acr login --name ${{ env.REGISTRY_NAME }}

      - name: flux install
        uses: fluxcd/flux2/action@bfa461ed2153ae5e0cca6bce08e0845268fb3088 # v2.8.2

      - name: push artifact
        working-directory: infra/runtime/flux-config
        run: |
          flux push artifact oci://${{ steps.vars.outputs.config-repo }} \
            --provider=azure \
            --reproducible \
            --path="." \
            --source="$(git config --get remote.origin.url)" \
            --revision="$(git branch --show-current)/$(git rev-parse HEAD)"

  tag-flux-config:
    name: Tag flux config
    needs: [push-flux-config-artifact, construct-rings-array]
    runs-on: ubuntu-latest
    environment: ${{ matrix.environment }}
    strategy:
      matrix:
        include: ${{ fromJson(needs.construct-rings-array.outputs.result) }}
    steps:
      - name: az login
        uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

      - name: az acr login
        run: az acr login --name altinncr

      - name: flux install
        uses: fluxcd/flux2/action@bfa461ed2153ae5e0cca6bce08e0845268fb3088 # v2.8.2

      - name: tag artifact
        run: |
          flux tag artifact oci://${{ needs.push-flux-config-artifact.outputs.config-repo }} \
            --tag ${{ matrix.ring }}


================================================
FILE: .github/workflows/deploy-runtime-gateway.yaml
================================================
name: Runtime - deploy gateway

on:
  push:
    branches:
      - main
    paths:
      - src/common/**
      - src/Runtime/gateway/**
      - infra/runtime/syncroot/base/gateway.yaml
      - infra/runtime/flux-config/**
      - .github/workflows/deploy-runtime-gateway.yaml
  workflow_dispatch:
    inputs:
      environments:
        description: "Runtime environments to tag. Comma-separated (e.g. at_ring1,at_ring2)."
        required: false
        default: "at_ring1"

permissions:
  id-token: write
  contents: read

jobs:
  construct-rings-array:
    uses: ./.github/workflows/template-runtime-construct-environments.yaml
    with:
      inputs: ${{ toJSON(github.event.inputs) }}

  push-gateway-artifact:
    name: Push gateway as OCI artifact
    runs-on: ubuntu-latest
    environment: dev
    env:
      REGISTRY_NAME: altinncr
    outputs:
      config-repo: ${{ steps.vars.outputs.config-repo }}
    defaults:
      run:
        working-directory: src/Runtime/gateway
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - name: Set vars
        id: vars
        run: |
          SHA="${GITHUB_SHA::10}"
          echo "short-sha=$SHA" >> "$GITHUB_OUTPUT"
          echo "image-repo=altinncr.azurecr.io/studio-apps/runtime-gateway:${SHA}" >> "$GITHUB_OUTPUT"
          echo "config-repo=altinncr.azurecr.io/studio-apps/runtime-gateway-repo:${SHA}" >> "$GITHUB_OUTPUT"

      - name: az login
        uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID_FC }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID_FC }}

      - name: az acr login
        run: az acr login --name ${{ env.REGISTRY_NAME }}

      - name: flux install
        uses: fluxcd/flux2/action@bfa461ed2153ae5e0cca6bce08e0845268fb3088 # v2.8.2

      - name: docker build
        working-directory: src
        run: docker build -t ${{ steps.vars.outputs.image-repo }} -f Runtime/gateway/Dockerfile .

      - name: push image
        run: docker push ${{ steps.vars.outputs.image-repo }}

      - name: patch base with image tag
        working-directory: src/Runtime/gateway/infra/kustomize/base
        run: |
          export IMAGE="${{ steps.vars.outputs.image-repo }}"
          export IMAGE_TAG="${{ steps.vars.outputs.short-sha }}"
          yq -i '.metadata.annotations["altinn.studio/image"] = env(IMAGE)' deployment.yaml
          yq -i '.metadata.annotations["altinn.studio/image-tag"] = env(IMAGE_TAG)' deployment.yaml

      - name: push artifact
        working-directory: src/Runtime/gateway/infra/kustomize
        run: |
          flux push artifact oci://${{ steps.vars.outputs.config-repo }} \
            --provider=azure \
            --reproducible \
            --path="." \
            --source="$(git config --get remote.origin.url)" \
            --revision="$(git branch --show-current)/$(git rev-parse HEAD)"

  tag-gateway:
    name: Tag gateway
    needs: [push-gateway-artifact, construct-rings-array]
    runs-on: ubuntu-latest
    environment: ${{ matrix.environment }}
    strategy:
      matrix:
        include: ${{ fromJson(needs.construct-rings-array.outputs.result) }}
    steps:
      - name: az login
        uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID_FC }}
          tenant-id: ${{ se
Download .txt
Showing preview only (1,492K chars total). Download the full file or copy to clipboard to get everything.
gitextract__dhnvitw/

├── .altinn-studio-root
├── .claude/
│   ├── settings.json
│   └── skills/
│       ├── rebase-stacked-pr/
│       │   └── SKILL.md
│       ├── tekstforfatter-docs/
│       │   └── SKILL.md
│       └── text-content-review/
│           ├── MODUL A - Terminologirevisjon.md
│           ├── MODUL B - Feilmeldinger.md
│           ├── MODUL C - Knapper og handlingstekster.md
│           ├── MODUL D - Ledetekster og hjelpetekster.md
│           ├── MODUL E - Tiltaleform og register.md
│           ├── MODUL F - Helhetlig innholdsrevisjon.md
│           ├── SKILL.md
│           └── Terminologi.md
├── .coderabbit.yaml
├── .codex/
│   ├── config.toml
│   └── rules/
│       └── default.rules
├── .dockerignore
├── .editorconfig
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── analysis.yml
│   │   ├── bug_report.yml
│   │   ├── chore.yml
│   │   ├── epic-security-requirements-verification.yml
│   │   ├── epic.yml
│   │   ├── feature_request.yml
│   │   ├── question.yml
│   │   ├── test_plan.md
│   │   └── user_story.yml
│   ├── actions/
│   │   ├── app-build-frontend/
│   │   │   └── action.yaml
│   │   ├── app-run-local-env/
│   │   │   └── action.yaml
│   │   ├── app-stop-local-env/
│   │   │   └── action.yaml
│   │   ├── codeql-config/
│   │   │   └── action.yaml
│   │   ├── setup-studioctl/
│   │   │   └── action.yaml
│   │   └── yarn-install/
│   │       └── action.yaml
│   ├── codeql/
│   │   ├── codeql-config-csharp.yml
│   │   └── codeql-config-javascript.yml
│   ├── containerscan/
│   │   └── allowedlist.yaml
│   ├── labeler.yml
│   ├── pull_request_template.md
│   ├── release.yml
│   ├── scripts/
│   │   ├── codeowners-generate.mjs
│   │   ├── construct-environments.mjs
│   │   ├── construct-environments.test.mjs
│   │   └── release.sh
│   └── workflows/
│       ├── app-backend-codeql.yml
│       ├── app-backend-formatting.yml
│       ├── app-backend-tests.yml
│       ├── app-codelists-codeql.yml
│       ├── app-codelists-tests.yml
│       ├── app-fileanalyzers-codeql.yml
│       ├── app-fileanalyzers-tests.yml
│       ├── app-frontend-codeql.yml
│       ├── app-frontend-compare-repos.yml
│       ├── app-frontend-cypress.yml
│       ├── app-frontend-k6-browser.yml
│       ├── app-frontend-lighthouse-ci.yml
│       ├── app-frontend-unit-tests.yml
│       ├── app-template-build-on-pr.yaml
│       ├── app-template-test.yml
│       ├── approve-pr.yaml
│       ├── cli-build-test.yaml
│       ├── codeowners-validate.yaml
│       ├── construct-environments-script-test.yaml
│       ├── deploy-designer.yaml
│       ├── deploy-gitea-runners.yaml
│       ├── deploy-lhci-server.yaml
│       ├── deploy-loadbalancer.yaml
│       ├── deploy-repositories.yaml
│       ├── deploy-runtime-apps-config.yaml
│       ├── deploy-runtime-flux-config.yaml
│       ├── deploy-runtime-gateway.yaml
│       ├── deploy-runtime-grafana-manifests.yaml
│       ├── deploy-runtime-kubernetes-wrapper.yaml
│       ├── deploy-runtime-localtest.yaml
│       ├── deploy-runtime-observability.yaml
│       ├── deploy-runtime-operator.yaml
│       ├── deploy-runtime-pdf3.yaml
│       ├── deploy-runtime-syncroot.yaml
│       ├── deploy-runtime-workflow-engine-app.yaml
│       ├── deploy-studio-ai-agents.yaml
│       ├── deploy-studio-mcp-server.yaml
│       ├── deploy-studio-observability.yaml
│       ├── deploy-studio-otel-operator.yaml
│       ├── deploy-studio-syncroot.yaml
│       ├── deployer-check.yaml
│       ├── designer-backend-check-quartz-update.yml
│       ├── designer-backend-codeql.yml
│       ├── designer-backend-dotnet-format.yaml
│       ├── designer-backend-dotnet-migrations-ensure-compatibility.yaml
│       ├── designer-backend-dotnet-test.yaml
│       ├── designer-backend-gitea-and-db-integration-tests.yaml
│       ├── designer-frontend-codeql.yml
│       ├── designer-frontend-playwright-staging.yml
│       ├── designer-frontend-run-playwright-on-pr.yaml
│       ├── designer-frontend-unit-tests.yml
│       ├── designer-scan.yml
│       ├── gitea-check-texts-file.yml
│       ├── gitea-proxy-test.yml
│       ├── gitea-runner-test.yml
│       ├── lint-pr.yaml
│       ├── mcp-build.yaml
│       ├── mcp-test.yaml
│       ├── playwright-resourceadm.yml
│       ├── pr-labeler.yml
│       ├── release-studioctl.yaml
│       ├── release.yaml
│       ├── releaser-build-test.yml
│       ├── repositories-scan.yml
│       ├── run-playwright-resourceadm-on-pr.yml
│       ├── runtime-devenv-build.yml
│       ├── runtime-gateway-tests.yaml
│       ├── runtime-health-build.yml
│       ├── runtime-kubernetes-wrapper-build.yaml
│       ├── runtime-localtest-build.yml
│       ├── runtime-operator-build.yml
│       ├── runtime-pdf3-build.yml
│       ├── runtime-workflow-engine-app-tests.yaml
│       ├── runtime-workflow-engine-tests.yaml
│       ├── storybook-to-github-pages.yaml
│       ├── studio-components-deploy.yaml
│       ├── studio-components-legacy-deploy.yaml
│       ├── template-docker-push.yaml
│       ├── template-flux-config-push.yaml
│       ├── template-helm-push.yaml
│       ├── template-runtime-construct-environments.yaml
│       ├── template-studio-construct-environments.yaml
│       └── validate-renovate.yaml
├── .gitignore
├── .husky/
│   └── pre-commit
├── .notes/
│   └── .gitkeep
├── .prettierignore
├── .vscode/
│   ├── extensions.json
│   └── settings.json
├── .yarn/
│   ├── patches/
│   │   └── jsdom-npm-26.1.0-3857255f02.patch
│   └── releases/
│       └── yarn-4.12.0.cjs
├── .yarnrc.yml
├── AGENTS.md
├── CLAUDE.md
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── charts/
│   ├── altinn-designer/
│   │   ├── .helmignore
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   ├── NOTES.txt
│   │   │   ├── _helpers.tpl
│   │   │   ├── db-migrations-job.yaml
│   │   │   ├── deployment.yaml
│   │   │   ├── ingress.yaml
│   │   │   ├── keys-pvc.yaml
│   │   │   ├── keys-storageclass.yaml
│   │   │   ├── service.yaml
│   │   │   ├── tests/
│   │   │   │   └── test-connection.yaml
│   │   │   └── wwwRedirectIngress.yaml
│   │   └── values.yaml
│   ├── altinn-designer-config/
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   └── helm-release.yaml
│   │   └── values.yaml
│   ├── altinn-loadbalancer/
│   │   ├── .helmignore
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   ├── NOTES.txt
│   │   │   ├── _helpers.tpl
│   │   │   ├── deployment.yaml
│   │   │   ├── exporter.yaml
│   │   │   ├── networkpolicy.yaml
│   │   │   ├── podmonitor.yaml
│   │   │   └── service.yaml
│   │   └── values.yaml
│   ├── altinn-loadbalancer-config/
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   └── helm-release.yaml
│   │   └── values.yaml
│   ├── altinn-repositories/
│   │   ├── .helmignore
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   ├── NOTES.txt
│   │   │   ├── _helpers.tpl
│   │   │   ├── deployment.yaml
│   │   │   ├── ingress.yaml
│   │   │   ├── networkpolicy.yaml
│   │   │   ├── proxy-deployment.yaml
│   │   │   ├── proxy-service.yaml
│   │   │   ├── service.yaml
│   │   │   └── tests/
│   │   │       └── test-connection.yaml
│   │   └── values.yaml
│   ├── altinn-repositories-config/
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   └── helm-release.yaml
│   │   └── values.yaml
│   ├── gitea-org-runner/
│   │   ├── .helmignore
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   ├── _helpers.tpl
│   │   │   └── deployment.yaml
│   │   └── values.yaml
│   └── gitea-org-runner-config/
│       ├── Chart.yaml
│       ├── templates/
│       │   └── helm-release.yaml
│       └── values.yaml
├── codecov.yml
├── docs/
│   └── adr/
│       ├── 2024-09-25-signing-configuration.md
│       ├── 2024-09-25-signing-interface.md
│       ├── 2024-10-02-signing-transaction-handling.md
│       ├── 2024-10-17-app-component-library.md
│       ├── 2025-06-12-environment-specific-config.md
│       ├── 2025-06-12-signing-notify-delegatee.md
│       ├── 2025-09-04-studio-library-persistence.md
│       ├── 2025-09-23-backend-data-initialization.md
│       ├── 2025-10-08-studio-library-persistence-2.md
│       ├── 2025-10-17-using-go.md
│       ├── 2025-10-22-pdf-generation-architecture.md
│       ├── 2025-11-25-frontend-performance-monitoring-strategy.md
│       ├── 2026-01-07-monitoring-telemetry-collection-distribution.md
│       ├── 2026-02-19-app-components-i18n.md
│       ├── 2026-02-24-translation-key-validation.md
│       └── yyyy-mm-dd-template.md
├── infra/
│   ├── observability/
│   │   ├── base/
│   │   │   ├── clusterrole.yaml
│   │   │   ├── clusterrolebinding.yaml
│   │   │   ├── gateway-headless-svc.yaml
│   │   │   ├── gateway.yaml
│   │   │   ├── kustomization.yaml
│   │   │   ├── network-policy.yaml
│   │   │   ├── router-svc.yaml
│   │   │   ├── router.yaml
│   │   │   └── serviceaccount.yaml
│   │   ├── build.sh
│   │   ├── runtime/
│   │   │   ├── env/
│   │   │   │   ├── at22/
│   │   │   │   │   └── kustomization.yaml
│   │   │   │   ├── at23/
│   │   │   │   │   └── kustomization.yaml
│   │   │   │   ├── at24/
│   │   │   │   │   └── kustomization.yaml
│   │   │   │   ├── prod/
│   │   │   │   │   └── kustomization.yaml
│   │   │   │   ├── tt02/
│   │   │   │   │   └── kustomization.yaml
│   │   │   │   └── yt01/
│   │   │   │       └── kustomization.yaml
│   │   │   ├── kustomization.yaml
│   │   │   └── overlay/
│   │   │       ├── kustomization.yaml
│   │   │       └── patches/
│   │   │           ├── gateway-config.yaml
│   │   │           ├── gateway-secrets.yaml
│   │   │           ├── linkerd-injection.yaml
│   │   │           ├── network-policy-labels.yaml
│   │   │           └── router-config.yaml
│   │   └── studio/
│   │       ├── env/
│   │       │   ├── dev/
│   │       │   │   └── kustomization.yaml
│   │       │   ├── prod/
│   │       │   │   └── kustomization.yaml
│   │       │   └── staging/
│   │       │       └── kustomization.yaml
│   │       ├── kustomization.yaml
│   │       └── overlay/
│   │           ├── kustomization.yaml
│   │           └── patches/
│   │               ├── gateway-config.yaml
│   │               ├── gateway-secrets.yaml
│   │               └── router-config.yaml
│   ├── runtime/
│   │   ├── apps-config/
│   │   │   ├── at22/
│   │   │   │   └── kustomization.yaml
│   │   │   ├── at23/
│   │   │   │   └── kustomization.yaml
│   │   │   ├── at24/
│   │   │   │   └── kustomization.yaml
│   │   │   ├── base/
│   │   │   │   ├── apps-runtime-common-env.yaml
│   │   │   │   ├── apps-runtime-common.yaml
│   │   │   │   └── kustomization.yaml
│   │   │   ├── prod/
│   │   │   │   └── kustomization.yaml
│   │   │   ├── tt02/
│   │   │   │   └── kustomization.yaml
│   │   │   └── yt01/
│   │   │       └── kustomization.yaml
│   │   ├── flux-config/
│   │   │   ├── flux-config.yaml
│   │   │   └── kustomization.yaml
│   │   ├── grafana-manifests/
│   │   │   ├── alert-rules/
│   │   │   │   ├── altinn-apps.yaml
│   │   │   │   └── kustomization.yaml
│   │   │   ├── contact-points/
│   │   │   │   ├── altinn-studio-gateway.yaml
│   │   │   │   └── kustomization.yaml
│   │   │   ├── dashboards/
│   │   │   │   ├── altinn-apps.yaml
│   │   │   │   └── kustomization.yaml
│   │   │   ├── kustomization.yaml
│   │   │   └── service-accounts/
│   │   │       ├── altinn-studio-gateway-sa.yaml
│   │   │       └── kustomization.yaml
│   │   └── syncroot/
│   │       ├── at22/
│   │       │   └── kustomization.yaml
│   │       ├── at23/
│   │       │   └── kustomization.yaml
│   │       ├── at24/
│   │       │   └── kustomization.yaml
│   │       ├── base/
│   │       │   ├── altinn-charts.yaml
│   │       │   ├── apps-config.yaml
│   │       │   ├── apps-syncroot.yaml
│   │       │   ├── flux-config.yaml
│   │       │   ├── gateway.yaml
│   │       │   ├── kubernetes-wrapper.yaml
│   │       │   ├── kustomization.yaml
│   │       │   ├── observability.yaml
│   │       │   ├── operator.yaml
│   │       │   ├── pdf.yaml
│   │       │   └── pdf3.yaml
│   │       ├── grafana-manifests/
│   │       │   ├── grafana-manifests.yaml
│   │       │   └── kustomization.yaml
│   │       ├── prod/
│   │       │   └── kustomization.yaml
│   │       ├── tt02/
│   │       │   ├── kustomization.yaml
│   │       │   └── workflow-engine-app.yaml
│   │       └── yt01/
│   │           └── kustomization.yaml
│   └── studio/
│       ├── otel-operator/
│       │   ├── base/
│       │   │   ├── helmrelease.yaml
│       │   │   ├── helmrepository.yaml
│       │   │   ├── kustomization.yaml
│       │   │   └── namespace.yaml
│       │   └── kustomization.yaml
│       └── syncroot/
│           ├── README.md
│           ├── base/
│           │   ├── altinn-altinity-agents.yaml
│           │   ├── altinn-designer.yaml
│           │   ├── altinn-loadbalancer.yaml
│           │   ├── altinn-mcp-server.yaml
│           │   ├── altinn-repositories.yaml
│           │   ├── gitea-runners.yaml
│           │   ├── kubernetes-wrapper.yaml
│           │   ├── kustomization.yaml
│           │   ├── lhci.yaml
│           │   ├── observability.yaml
│           │   └── otel-operator.yaml
│           ├── dev/
│           │   └── kustomization.yaml
│           ├── prod/
│           │   └── kustomization.yaml
│           └── staging/
│               └── kustomization.yaml
├── libs/
│   ├── form-component/
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── FormComponent/
│   │   │   │   ├── FormComponent.test.tsx
│   │   │   │   ├── FormComponent.tsx
│   │   │   │   └── index.ts
│   │   │   ├── app-components/
│   │   │   │   ├── Card/
│   │   │   │   │   ├── Card.module.css
│   │   │   │   │   ├── Card.test.tsx
│   │   │   │   │   ├── Card.tsx
│   │   │   │   │   └── index.ts
│   │   │   │   └── index.ts
│   │   │   ├── index.ts
│   │   │   ├── modules.ts
│   │   │   ├── test/
│   │   │   │   └── setup.ts
│   │   │   └── types/
│   │   │       ├── DataModelBinding.ts
│   │   │       ├── FormComponentAction.ts
│   │   │       ├── FormComponentActionType.ts
│   │   │       └── FormComponentProps.ts
│   │   ├── tsconfig.json
│   │   └── vitest.config.ts
│   └── form-engine/
│       ├── eslint.config.mjs
│       ├── package.json
│       ├── src/
│       │   ├── FormEngine/
│       │   │   ├── FormEngine.test.ts
│       │   │   ├── FormEngine.ts
│       │   │   └── index.ts
│       │   ├── index.ts
│       │   └── test/
│       │       └── setup.ts
│       ├── tsconfig.json
│       └── vitest.config.ts
├── package.json
├── prettier.config.js
├── renovate.json
├── scripts/
│   └── pre-commit-check-for-skipped-tests
└── src/
    ├── .dockerignore
    ├── .gitignore
    ├── AI/
    │   ├── AGENTS.md
    │   ├── CLAUDE.md
    │   ├── agents/
    │   │   ├── .gitignore
    │   │   ├── .python-version
    │   │   ├── LANGFUSE_SETUP.md
    │   │   ├── README.md
    │   │   ├── agents/
    │   │   │   ├── __init__.py
    │   │   │   ├── graph/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── nodes/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── actor_node.py
    │   │   │   │   │   ├── assistant_node.py
    │   │   │   │   │   ├── intake_node.py
    │   │   │   │   │   ├── planner_node.py
    │   │   │   │   │   ├── planning_tool_node.py
    │   │   │   │   │   ├── reviewer_node.py
    │   │   │   │   │   ├── spec_node.py
    │   │   │   │   │   └── verifier_node.py
    │   │   │   │   ├── nodes.py
    │   │   │   │   ├── runner.py
    │   │   │   │   └── state.py
    │   │   │   ├── prompts/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── assistant_response_generation.md
    │   │   │   │   ├── assistant_tool_orchestration.md
    │   │   │   │   ├── chat_assistant.md
    │   │   │   │   ├── general_planning.md
    │   │   │   │   ├── goal_suggestions.md
    │   │   │   │   ├── intake_planning.md
    │   │   │   │   ├── intent_security.md
    │   │   │   │   ├── llm-as-a-judge/
    │   │   │   │   │   ├── implementation_match.md
    │   │   │   │   │   ├── intent_match.md
    │   │   │   │   │   └── no_hallucination.md
    │   │   │   │   ├── loader.py
    │   │   │   │   ├── patch_synthesis.md
    │   │   │   │   ├── reviewer_decision.md
    │   │   │   │   ├── semantic_query_extraction.md
    │   │   │   │   ├── spec_extraction.md
    │   │   │   │   ├── templates/
    │   │   │   │   │   ├── assistant_response_user.md
    │   │   │   │   │   ├── assistant_tool_selection_user.md
    │   │   │   │   │   ├── chat_assistant_user.md
    │   │   │   │   │   ├── general_planning_user.md
    │   │   │   │   │   ├── intake_planning_user.md
    │   │   │   │   │   ├── patch_synthesis_user.md
    │   │   │   │   │   ├── reviewer_decision_user.md
    │   │   │   │   │   ├── semantic_query_user.md
    │   │   │   │   │   ├── spec_extraction_user.md
    │   │   │   │   │   ├── tool_planning_user.md
    │   │   │   │   │   └── verifier_error_fix_user.md
    │   │   │   │   ├── tool_planning.md
    │   │   │   │   └── verifier_error_fixer.md
    │   │   │   ├── schemas/
    │   │   │   │   ├── __init__.py
    │   │   │   │   └── plan_schema.py
    │   │   │   ├── schemas.py
    │   │   │   ├── services/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── evaluation/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── hallucination_judge.py
    │   │   │   │   │   ├── implementation_judge.py
    │   │   │   │   │   └── intent_judge.py
    │   │   │   │   ├── events/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── events.py
    │   │   │   │   │   └── jobs.py
    │   │   │   │   ├── git/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── git_ops.py
    │   │   │   │   │   └── repo_manager.py
    │   │   │   │   ├── llm/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── intent_parser.py
    │   │   │   │   │   ├── llm_client.py
    │   │   │   │   │   └── semantic_query.py
    │   │   │   │   ├── mcp/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── mcp_client.py
    │   │   │   │   │   ├── mcp_verification.py
    │   │   │   │   │   ├── patch_generator.py
    │   │   │   │   │   ├── plan_atomic_step.py
    │   │   │   │   │   └── tool_execution.py
    │   │   │   │   ├── patching/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── actor_sync.py
    │   │   │   │   │   ├── patch_normalizer.py
    │   │   │   │   │   └── patch_validator.py
    │   │   │   │   ├── repo/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   ├── anchor_resolver.py
    │   │   │   │   │   ├── repo_discovery.py
    │   │   │   │   │   └── resource_manager.py
    │   │   │   │   ├── telemetry/
    │   │   │   │   │   ├── __init__.py
    │   │   │   │   │   └── json_utils.py
    │   │   │   │   └── validation/
    │   │   │   │       ├── __init__.py
    │   │   │   │       ├── contract_validator.py
    │   │   │   │       ├── enhanced_verifier.py
    │   │   │   │       └── verify.py
    │   │   │   └── workflows/
    │   │   │       ├── __init__.py
    │   │   │       ├── actor/
    │   │   │       │   ├── __init__.py
    │   │   │       │   └── pipeline.py
    │   │   │       ├── intake/
    │   │   │       │   ├── __init__.py
    │   │   │       │   └── pipeline.py
    │   │   │       ├── reviewer/
    │   │   │       │   ├── __init__.py
    │   │   │       │   └── pipeline.py
    │   │   │       ├── shared/
    │   │   │       │   ├── __init__.py
    │   │   │       │   └── utils.py
    │   │   │       ├── spec/
    │   │   │       │   ├── __init__.py
    │   │   │       │   └── pipeline.py
    │   │   │       └── verifier/
    │   │   │           ├── __init__.py
    │   │   │           └── pipeline.py
    │   │   ├── api/
    │   │   │   ├── __init__.py
    │   │   │   ├── dependencies.py
    │   │   │   ├── main.py
    │   │   │   └── routes/
    │   │   │       ├── __init__.py
    │   │   │       ├── agent.py
    │   │   │       └── websocket.py
    │   │   ├── docker-compose.langfuse.yml
    │   │   ├── docker-compose.yaml
    │   │   ├── dockerfile
    │   │   ├── infra/
    │   │   │   └── kustomize/
    │   │   │       ├── deployment.yaml
    │   │   │       ├── kustomization.yaml
    │   │   │       ├── service.yaml
    │   │   │       └── serviceaccount.yaml
    │   │   ├── pyproject.toml
    │   │   ├── requirements-dev.txt
    │   │   ├── requirements.txt
    │   │   ├── shared/
    │   │   │   ├── config/
    │   │   │   │   ├── __init__.py
    │   │   │   │   └── base_config.py
    │   │   │   ├── models/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── attachments.py
    │   │   │   │   └── common_models.py
    │   │   │   └── utils/
    │   │   │       ├── __init__.py
    │   │   │       ├── langfuse_utils.py
    │   │   │       ├── logging_utils.py
    │   │   │       └── path_utils.py
    │   │   └── tests/
    │   │       ├── README.md
    │   │       ├── api/
    │   │       │   └── test_main.py
    │   │       └── unit/
    │   │           ├── test_mcp_client.py
    │   │           ├── test_template_engine.py
    │   │           └── test_verifier_fixer.py
    │   ├── augmenter-agent/
    │   │   ├── .dockerignore
    │   │   ├── README.md
    │   │   ├── TODO-coderabbit.md
    │   │   ├── augmenter-agent.sln
    │   │   ├── docker-compose.yaml
    │   │   ├── dockerfile
    │   │   ├── src/
    │   │   │   └── Altinn.Augmenter.Agent/
    │   │   │       ├── Altinn.Augmenter.Agent.csproj
    │   │   │       ├── Configuration/
    │   │   │       │   ├── CallbackOptions.cs
    │   │   │       │   ├── PdfGenerationOptions.cs
    │   │   │       │   └── UploadOptions.cs
    │   │   │       ├── Endpoints/
    │   │   │       │   ├── GenerateAsyncEndpoints.cs
    │   │   │       │   ├── GenerateEndpoints.cs
    │   │   │       │   └── HealthEndpoints.cs
    │   │   │       ├── Models/
    │   │   │       │   ├── ParsedFormData.cs
    │   │   │       │   ├── PdfGenerationJob.cs
    │   │   │       │   └── UploadedFile.cs
    │   │   │       ├── Program.cs
    │   │   │       ├── Properties/
    │   │   │       │   └── launchSettings.json
    │   │   │       ├── Services/
    │   │   │       │   ├── CallbackService.cs
    │   │   │       │   ├── CallbackUrlValidator.cs
    │   │   │       │   ├── ICallbackService.cs
    │   │   │       │   ├── ICallbackUrlValidator.cs
    │   │   │       │   ├── IMultipartParserService.cs
    │   │   │       │   ├── IPdfGenerationQueue.cs
    │   │   │       │   ├── IPdfGeneratorService.cs
    │   │   │       │   ├── MultipartParserService.cs
    │   │   │       │   ├── PdfGenerationBackgroundService.cs
    │   │   │       │   ├── PdfGenerationQueue.cs
    │   │   │       │   └── PdfGeneratorService.cs
    │   │   │       ├── appsettings.Development.json
    │   │   │       ├── appsettings.json
    │   │   │       └── pdf-templates/
    │   │   │           └── default.typ
    │   │   └── test/
    │   │       └── Altinn.Augmenter.Agent.Tests/
    │   │           ├── Altinn.Augmenter.Agent.Tests.csproj
    │   │           ├── GlobalUsings.cs
    │   │           ├── Integration/
    │   │           │   ├── GenerateAsyncTests.cs
    │   │           │   ├── GenerateTests.cs
    │   │           │   ├── HealthTests.cs
    │   │           │   └── Helpers/
    │   │           │       ├── TestWebApplicationFactory.cs
    │   │           │       └── TypstLocator.cs
    │   │           └── Unit/
    │   │               ├── CallbackServiceTests.cs
    │   │               ├── CallbackUrlValidatorTests.cs
    │   │               ├── MultipartParserServiceTests.cs
    │   │               └── PdfGeneratorServiceTests.cs
    │   └── mcp/
    │       ├── .gitignore
    │       ├── README.md
    │       ├── codegen/
    │       │   ├── __init__.py
    │       │   ├── cli.py
    │       │   ├── core/
    │       │   │   ├── __init__.py
    │       │   │   ├── config.py
    │       │   │   └── utils.py
    │       │   ├── evaluation/
    │       │   │   └── __init__.py
    │       │   ├── expressions/
    │       │   │   ├── __init__.py
    │       │   │   ├── config.py
    │       │   │   ├── generator.py
    │       │   │   └── utils.py
    │       │   ├── pipeline/
    │       │   │   ├── __init__.py
    │       │   │   ├── core.py
    │       │   │   ├── llm_helpers.py
    │       │   │   ├── state.py
    │       │   │   └── steps.py
    │       │   ├── repositories/
    │       │   │   ├── __init__.py
    │       │   │   └── app_fetcher.py
    │       │   └── vector_store/
    │       │       ├── __init__.py
    │       │       ├── chunker.py
    │       │       ├── loader.py
    │       │       └── store.py
    │       ├── docker-compose.yaml
    │       ├── dockerfile
    │       ├── docs/
    │       │   ├── tools-priority-list-long-term.md
    │       │   └── tools-priority-list-short-term.md
    │       ├── infra/
    │       │   └── kustomize/
    │       │       ├── deployment.yaml
    │       │       ├── kustomization.yaml
    │       │       ├── service.yaml
    │       │       └── serviceaccount.yaml
    │       ├── initiate_mcp.py
    │       ├── pyproject.toml
    │       ├── requirements.txt
    │       ├── scripts/
    │       │   ├── __init__.py
    │       │   ├── gitea_client.py
    │       │   └── github_client.py
    │       ├── server/
    │       │   ├── __init__.py
    │       │   ├── auth.py
    │       │   ├── config.py
    │       │   ├── handlers/
    │       │   │   ├── __init__.py
    │       │   │   ├── datamodel_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   ├── converters/
    │       │   │   │   │   ├── __init__.py
    │       │   │   │   │   ├── json_schema_to_metamodel.py
    │       │   │   │   │   ├── metamodel_to_csharp.py
    │       │   │   │   │   └── metamodel_to_xsd.py
    │       │   │   │   ├── datamodel_context.md
    │       │   │   │   ├── datamodel_sync_tool.py
    │       │   │   │   ├── metamodel/
    │       │   │   │   │   ├── __init__.py
    │       │   │   │   │   ├── enums.py
    │       │   │   │   │   └── model_metadata.py
    │       │   │   │   ├── utils/
    │       │   │   │   │   ├── __init__.py
    │       │   │   │   │   ├── naming.py
    │       │   │   │   │   ├── restrictions.py
    │       │   │   │   │   └── type_mapping.py
    │       │   │   │   └── wrapper.py
    │       │   │   ├── dynamic_expression_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   ├── dynamic_expression_context.md
    │       │   │   │   └── wrapper.py
    │       │   │   ├── help_tool/
    │       │   │   │   └── wrapper.py
    │       │   │   ├── layout_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   ├── layout_components_tool_no_llm.py
    │       │   │   │   ├── layout_properties_tool.py
    │       │   │   │   ├── schema_validator_tool.py
    │       │   │   │   └── wrapper.py
    │       │   │   ├── planning_tool/
    │       │   │   │   ├── doc_search.py
    │       │   │   │   ├── llms-full.txt
    │       │   │   │   ├── llms.txt
    │       │   │   │   ├── planning_context.md
    │       │   │   │   └── wrapper.py
    │       │   │   ├── policy_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   ├── policy_context.md
    │       │   │   │   ├── policy_summarization_tool.py
    │       │   │   │   ├── policy_validation_tool.py
    │       │   │   │   ├── static.py
    │       │   │   │   └── wrapper.py
    │       │   │   ├── prefill_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   ├── prefill_context.md
    │       │   │   │   └── wrapper.py
    │       │   │   ├── register.py
    │       │   │   ├── resource_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   ├── base_validator.py
    │       │   │   │   ├── resource_context.md
    │       │   │   │   ├── resource_validator_tool.py
    │       │   │   │   └── wrapper.py
    │       │   │   ├── router_tool/
    │       │   │   │   └── wrapper.py
    │       │   │   ├── status_tool/
    │       │   │   │   ├── __init__.py
    │       │   │   │   └── wrapper.py
    │       │   │   └── types.py
    │       │   ├── main.py
    │       │   └── tracing.py
    │       └── tests/
    │           ├── README.md
    │           └── server/
    │               ├── test_auth.py
    │               └── test_main.py
    ├── App/
    │   ├── azure-pipelines/
    │   │   ├── build-app.yaml
    │   │   └── deploy-app.yaml
    │   ├── backend/
    │   │   ├── .claude/
    │   │   │   ├── commands/
    │   │   │   │   ├── fix-github-issue.md
    │   │   │   │   ├── new-integration-test.md
    │   │   │   │   └── port-integration-test.md
    │   │   │   └── settings.json
    │   │   ├── .codex/
    │   │   │   ├── config.toml
    │   │   │   └── rules/
    │   │   │       └── default.rules
    │   │   ├── .config/
    │   │   │   └── dotnet-tools.json
    │   │   ├── .csharpierignore
    │   │   ├── .editorconfig
    │   │   ├── .git-blame-ignore-revs
    │   │   ├── .gitignore
    │   │   ├── .vscode/
    │   │   │   ├── extensions.json
    │   │   │   ├── launch.json
    │   │   │   ├── settings.json
    │   │   │   └── tasks.json
    │   │   ├── AGENTS.md
    │   │   ├── AppLibDotnet.sln
    │   │   ├── AppLibDotnet.sln.DotSettings
    │   │   ├── CLAUDE.md
    │   │   ├── CONTRIBUTING.md
    │   │   ├── Directory.Build.props
    │   │   ├── Directory.Packages.props
    │   │   ├── Makefile
    │   │   ├── README.md
    │   │   ├── benchmark/
    │   │   │   └── Altinn.App.Benchmarks/
    │   │   │       ├── Altinn.App.Benchmarks.csproj
    │   │   │       ├── Analyzers/
    │   │   │       │   ├── AppImplementationFactoryAnalyzerBenchmarks.cs
    │   │   │       │   └── HttpContextAccessorUseAnalyzerBenchmarks.cs
    │   │   │       ├── Expressions/
    │   │   │       │   └── DateVerificationRegexBenchmarks.cs
    │   │   │       ├── Fixture.cs
    │   │   │       └── Program.cs
    │   │   ├── doc/
    │   │   │   └── adr/
    │   │   │       └── 006-altinn-3-code-list.md
    │   │   ├── global.json
    │   │   ├── run-repeatedly.sh
    │   │   ├── solutions/
    │   │   │   ├── All.sln
    │   │   │   └── Src.sln
    │   │   ├── src/
    │   │   │   ├── .gitignore
    │   │   │   ├── Altinn.App.Analyzers/
    │   │   │   │   ├── Altinn.App.Analyzers.csproj
    │   │   │   │   ├── AnalyzerReleases.Shipped.md
    │   │   │   │   ├── AnalyzerReleases.Unshipped.md
    │   │   │   │   ├── Diagnostics.cs
    │   │   │   │   ├── FormDataWrapper/
    │   │   │   │   │   ├── FormDataWrapperAnalyzer.cs
    │   │   │   │   │   ├── FormDataWrapperGenerator.cs
    │   │   │   │   │   └── FormDataWrapperUtils.cs
    │   │   │   │   ├── HttpContextAccessorUsageAnalyzer.cs
    │   │   │   │   ├── ModelPathNode.cs
    │   │   │   │   ├── PolyFills.cs
    │   │   │   │   ├── SourceTextGenerator/
    │   │   │   │   │   ├── AddIndexToPathGenerator.cs
    │   │   │   │   │   ├── AltinnRowIdsGenerator.cs
    │   │   │   │   │   ├── CopyGenerator.cs
    │   │   │   │   │   ├── GenerateJsonComment.cs
    │   │   │   │   │   ├── GetterGenerator.cs
    │   │   │   │   │   ├── RemoveGenerator.cs
    │   │   │   │   │   ├── SetterGenerator.cs
    │   │   │   │   │   ├── SourceReaderUtils.cs
    │   │   │   │   │   └── SourceTextGenerator.cs
    │   │   │   │   └── Utils/
    │   │   │   │       ├── AnalyzerConfigOptionsProviderExtensions.cs
    │   │   │   │       ├── EquatableArray.cs
    │   │   │   │       ├── FileLocationHelper.cs
    │   │   │   │       ├── HashCode.cs
    │   │   │   │       ├── NanoJsonReader.cs
    │   │   │   │       └── RoslynExtensions.cs
    │   │   │   ├── Altinn.App.Api/
    │   │   │   │   ├── Altinn.App.Api.csproj
    │   │   │   │   ├── Controllers/
    │   │   │   │   │   ├── ActionsController.cs
    │   │   │   │   │   ├── ApplicationLanguageController.cs
    │   │   │   │   │   ├── ApplicationMetadataController.cs
    │   │   │   │   │   ├── ApplicationSettingsController.cs
    │   │   │   │   │   ├── Attributes/
    │   │   │   │   │   │   └── JsonSettingsNameAttribute.cs
    │   │   │   │   │   ├── AuthenticationController.cs
    │   │   │   │   │   ├── AuthorizationController.cs
    │   │   │   │   │   ├── Conventions/
    │   │   │   │   │   │   ├── AltinnApiJsonFormatter.cs
    │   │   │   │   │   │   ├── AltinnControllerConventions.cs
    │   │   │   │   │   │   └── ConfigureMvcJsonOptions.cs
    │   │   │   │   │   ├── CustomOpenApiController.cs
    │   │   │   │   │   ├── DataController.cs
    │   │   │   │   │   ├── DataListsController.cs
    │   │   │   │   │   ├── DataTagsController.cs
    │   │   │   │   │   ├── DisableFormValueModelBindingAttribute.cs
    │   │   │   │   │   ├── EventsReceiverController.cs
    │   │   │   │   │   ├── ExternalApiController.cs
    │   │   │   │   │   ├── FileScanController.cs
    │   │   │   │   │   ├── FormBootstrapController.cs
    │   │   │   │   │   ├── HomeController.cs
    │   │   │   │   │   ├── InstancesController.cs
    │   │   │   │   │   ├── LookupOrganisationController.cs
    │   │   │   │   │   ├── LookupPersonController.cs
    │   │   │   │   │   ├── NotificationCallbackController.cs
    │   │   │   │   │   ├── OptionsController.cs
    │   │   │   │   │   ├── PartiesController.cs
    │   │   │   │   │   ├── PaymentController.cs
    │   │   │   │   │   ├── PdfController.cs
    │   │   │   │   │   ├── ProcessController.cs
    │   │   │   │   │   ├── ProfileController.cs
    │   │   │   │   │   ├── RedirectController.cs
    │   │   │   │   │   ├── ResourceController.cs
    │   │   │   │   │   ├── SigningController.cs
    │   │   │   │   │   ├── StatelessDataController.cs
    │   │   │   │   │   ├── TextsController.cs
    │   │   │   │   │   ├── UserDefinedMetadataController.cs
    │   │   │   │   │   └── ValidateController.cs
    │   │   │   │   ├── Extensions/
    │   │   │   │   │   ├── HostBuilderExtensions.cs
    │   │   │   │   │   ├── HttpClientBuilderExtensions.cs
    │   │   │   │   │   ├── HttpContextExtensions.cs
    │   │   │   │   │   ├── InstanceDataUnitOfWorkExtensions.cs
    │   │   │   │   │   ├── InstanceExtensions.cs
    │   │   │   │   │   ├── MvcBuilderExtensions.cs
    │   │   │   │   │   ├── SecurityHeadersApplicationBuilderExtensions.cs
    │   │   │   │   │   ├── ServiceCollectionExtensions.cs
    │   │   │   │   │   ├── SwaggerFilterExtensions.cs
    │   │   │   │   │   ├── WebApplicationBuilderExtensions.cs
    │   │   │   │   │   └── WebHostBuilderExtensions.cs
    │   │   │   │   ├── Helpers/
    │   │   │   │   │   ├── Patch/
    │   │   │   │   │   │   ├── DataPatchResult.cs
    │   │   │   │   │   │   └── InternalPatchService.cs
    │   │   │   │   │   ├── RequestHandling/
    │   │   │   │   │   │   ├── DataRestrictionValidation.cs
    │   │   │   │   │   │   ├── MultipartRequestReader.cs
    │   │   │   │   │   │   ├── RequestPart.cs
    │   │   │   │   │   │   └── RequestPartValidator.cs
    │   │   │   │   │   └── StartupHelper.cs
    │   │   │   │   ├── Infrastructure/
    │   │   │   │   │   ├── Filters/
    │   │   │   │   │   │   ├── AutoValidateAntiforgeryTokenIfAuthCookieAttribute.cs
    │   │   │   │   │   │   └── ValidateAntiforgeryTokenIfAuthCookieAuthorizationFilter.cs
    │   │   │   │   │   ├── Health/
    │   │   │   │   │   │   └── HealthCheck.cs
    │   │   │   │   │   ├── Lifetime/
    │   │   │   │   │   │   └── AppHostLifetime.cs
    │   │   │   │   │   ├── Middleware/
    │   │   │   │   │   │   ├── ScopeAuthorizationMiddleware.cs
    │   │   │   │   │   │   ├── SecurityHeadersMiddleware.cs
    │   │   │   │   │   │   ├── TelemetryEnrichingMiddleware.cs
    │   │   │   │   │   │   └── TelemetryEnrichingResultFilter.cs
    │   │   │   │   │   └── Telemetry/
    │   │   │   │   │       ├── CustomTelemetryInitializer.cs
    │   │   │   │   │       ├── HealthTelemetryFilter.cs
    │   │   │   │   │       └── IdentityTelemetryFilter.cs
    │   │   │   │   ├── Mappers/
    │   │   │   │   │   └── SimpleInstanceMapper.cs
    │   │   │   │   ├── Models/
    │   │   │   │   │   ├── AppProcessState.cs
    │   │   │   │   │   ├── DataDeleteResponse.cs
    │   │   │   │   │   ├── DataElementFileScanResult.cs
    │   │   │   │   │   ├── DataPatchRequest.cs
    │   │   │   │   │   ├── DataPatchRequestMultiple.cs
    │   │   │   │   │   ├── DataPatchResponse.cs
    │   │   │   │   │   ├── DataPatchResponseMultiple.cs
    │   │   │   │   │   ├── DataPostResponse.cs
    │   │   │   │   │   ├── EnrichedInstanceResponse.cs
    │   │   │   │   │   ├── InstanceFileScanResult.cs
    │   │   │   │   │   ├── InstanceResponse.cs
    │   │   │   │   │   ├── InstansiationInstance.cs
    │   │   │   │   │   ├── LookupOrganisationResponse.cs
    │   │   │   │   │   ├── LookupPersonRequest.cs
    │   │   │   │   │   ├── LookupPersonResponse.cs
    │   │   │   │   │   ├── ProcessNext.cs
    │   │   │   │   │   ├── SetTagsRequest.cs
    │   │   │   │   │   ├── SetTagsResponse.cs
    │   │   │   │   │   ├── SigningAuthorizedOrganisationsResponse.cs
    │   │   │   │   │   ├── SigningDataElementsResponse.cs
    │   │   │   │   │   ├── SigningStateResponse.cs
    │   │   │   │   │   ├── SimpleInstance.cs
    │   │   │   │   │   ├── TagsList.cs
    │   │   │   │   │   ├── UserActionRequest.cs
    │   │   │   │   │   ├── UserActionResponse.cs
    │   │   │   │   │   └── UserDefinedMetadataDto.cs
    │   │   │   │   ├── Properties/
    │   │   │   │   │   └── launchSettings.json
    │   │   │   │   └── packaging/
    │   │   │   │       └── Altinn.App.Api.props
    │   │   │   ├── Altinn.App.Clients.Fiks/
    │   │   │   │   ├── Altinn.App.Clients.Fiks.csproj
    │   │   │   │   ├── Configuration/
    │   │   │   │   │   ├── FiksSetupBuilder.cs
    │   │   │   │   │   └── IFiksSetupBuilder.cs
    │   │   │   │   ├── Constants/
    │   │   │   │   │   ├── FiksArkivConstants.cs
    │   │   │   │   │   └── FiksIOConstants.cs
    │   │   │   │   ├── Exceptions/
    │   │   │   │   │   ├── FiksArkivConfigurationException.cs
    │   │   │   │   │   ├── FiksArkivException.cs
    │   │   │   │   │   ├── FiksIOConfigurationException.cs
    │   │   │   │   │   └── FiksIOException.cs
    │   │   │   │   ├── Extensions/
    │   │   │   │   │   ├── ArkivmeldingExtensions.cs
    │   │   │   │   │   ├── ArkivmeldingKvitteringExtensions.cs
    │   │   │   │   │   ├── DataElementExtensions.cs
    │   │   │   │   │   ├── InstanceExtensions.cs
    │   │   │   │   │   ├── KorrespondansepartExtensions.cs
    │   │   │   │   │   ├── ListExtensions.cs
    │   │   │   │   │   ├── ServiceCollectionExtensions.cs
    │   │   │   │   │   ├── ServiceProviderExtensions.cs
    │   │   │   │   │   ├── StreamExtensions.cs
    │   │   │   │   │   ├── StringExtensions.cs
    │   │   │   │   │   ├── TypeExtensions.cs
    │   │   │   │   │   └── XmlExtensions.cs
    │   │   │   │   ├── Factories/
    │   │   │   │   │   ├── KlassifikasjonFactory.cs
    │   │   │   │   │   └── KorrespondansepartFactory.cs
    │   │   │   │   ├── FiksArkiv/
    │   │   │   │   │   ├── FiksArkivConfigResolver.cs
    │   │   │   │   │   ├── FiksArkivConfigValidationService.cs
    │   │   │   │   │   ├── FiksArkivDefaultPayloadGenerator.cs
    │   │   │   │   │   ├── FiksArkivDefaultResponseHandler.cs
    │   │   │   │   │   ├── FiksArkivHost.cs
    │   │   │   │   │   ├── FiksArkivInstanceClient.cs
    │   │   │   │   │   ├── FiksArkivServiceTask.cs
    │   │   │   │   │   ├── IFiksArkivConfigResolver.cs
    │   │   │   │   │   ├── IFiksArkivHost.cs
    │   │   │   │   │   ├── IFiksArkivInstanceClient.cs
    │   │   │   │   │   ├── IFiksArkivPayloadGenerator.cs
    │   │   │   │   │   ├── IFiksArkivResponseHandler.cs
    │   │   │   │   │   └── Models/
    │   │   │   │   │       ├── FiksArkivDocumentMetadata.cs
    │   │   │   │   │       ├── FiksArkivDocuments.cs
    │   │   │   │   │       ├── FiksArkivReceivedMessagePayload.cs
    │   │   │   │   │       ├── FiksArkivRecipient.cs
    │   │   │   │   │       ├── FiksArkivSettings.cs
    │   │   │   │   │       └── MessagePayloadWrapper.cs
    │   │   │   │   └── FiksIO/
    │   │   │   │       ├── FiksIOClient.cs
    │   │   │   │       ├── FiksIOClientFactory.cs
    │   │   │   │       ├── FiksIOMaskinportenClient.cs
    │   │   │   │       ├── IFiksIOClient.cs
    │   │   │   │       ├── IFiksIOClientFactory.cs
    │   │   │   │       └── Models/
    │   │   │   │           ├── FiksIOMessagePayload.cs
    │   │   │   │           ├── FiksIOMessageRequest.cs
    │   │   │   │           ├── FiksIOMessageResponse.cs
    │   │   │   │           ├── FiksIOReceivedMessage.cs
    │   │   │   │           └── FiksIOSettings.cs
    │   │   │   ├── Altinn.App.Core/
    │   │   │   │   ├── Altinn.App.Core.csproj
    │   │   │   │   ├── AppImplementationFactory.cs
    │   │   │   │   ├── Configuration/
    │   │   │   │   │   ├── AppSettings.cs
    │   │   │   │   │   ├── CacheSettings.cs
    │   │   │   │   │   ├── FrontEndSettings.cs
    │   │   │   │   │   ├── GeneralSettings.cs
    │   │   │   │   │   ├── MetricsSettings.cs
    │   │   │   │   │   ├── PlatformFrontendSettings.cs
    │   │   │   │   │   └── PlatformSettings.cs
    │   │   │   │   ├── Constants/
    │   │   │   │   │   ├── AltinnEnvironments.cs
    │   │   │   │   │   ├── AltinnTaskTypes.cs
    │   │   │   │   │   ├── AltinnUrns.cs
    │   │   │   │   │   ├── AuthorizationSchemes.cs
    │   │   │   │   │   ├── AuthzConstants.cs
    │   │   │   │   │   └── General.cs
    │   │   │   │   ├── EFormidling/
    │   │   │   │   │   ├── EformidlingConstants.cs
    │   │   │   │   │   ├── EformidlingStartup.cs
    │   │   │   │   │   ├── Extensions/
    │   │   │   │   │   │   └── ServiceCollectionExtensions.cs
    │   │   │   │   │   ├── Implementation/
    │   │   │   │   │   │   ├── DefaultEFormidlingReceivers.cs
    │   │   │   │   │   │   ├── DefaultEFormidlingService.cs
    │   │   │   │   │   │   ├── EFormidlingLegacyConfigurationProvider.cs
    │   │   │   │   │   │   ├── EformidlingDeliveryException.cs
    │   │   │   │   │   │   └── EformidlingStatusCheckEventHandler2.cs
    │   │   │   │   │   └── Interface/
    │   │   │   │   │       ├── IEFormidlingMetadata.cs
    │   │   │   │   │       ├── IEFormidlingReceivers.cs
    │   │   │   │   │       └── IEFormidlingService.cs
    │   │   │   │   ├── Exceptions/
    │   │   │   │   │   ├── AltinnException.cs
    │   │   │   │   │   └── ConfigurationException.cs
    │   │   │   │   ├── Extensions/
    │   │   │   │   │   ├── CancellationTokenExtensions.cs
    │   │   │   │   │   ├── ClaimsPrincipalExtensions.cs
    │   │   │   │   │   ├── ConfigurationBuilderExtensions.cs
    │   │   │   │   │   ├── DataProtectionConfiguration.cs
    │   │   │   │   │   ├── DictionaryExtensions.cs
    │   │   │   │   │   ├── HttpClientExtension.cs
    │   │   │   │   │   ├── HttpContextExtensions.cs
    │   │   │   │   │   ├── InstanceEventExtensions.cs
    │   │   │   │   │   ├── MultipartContentExtensions.cs
    │   │   │   │   │   ├── NationalIdentityNumberExtensions.cs
    │   │   │   │   │   ├── OrganisationNumberExtensions.cs
    │   │   │   │   │   ├── ProcessStateExtensions.cs
    │   │   │   │   │   ├── ServiceCollectionExtensions.cs
    │   │   │   │   │   ├── StringExtensions.cs
    │   │   │   │   │   └── XmlToLinqExtensions.cs
    │   │   │   │   ├── Features/
    │   │   │   │   │   ├── AccessManagement/
    │   │   │   │   │   │   └── IAccessManagementClient.cs
    │   │   │   │   │   ├── Action/
    │   │   │   │   │   │   ├── PaymentUserAction.cs
    │   │   │   │   │   │   ├── SigningUserAction.cs
    │   │   │   │   │   │   ├── UniqueSignatureAuthorizer.cs
    │   │   │   │   │   │   ├── UserActionAuthorizerContext.cs
    │   │   │   │   │   │   └── UserActionService.cs
    │   │   │   │   │   ├── Auth/
    │   │   │   │   │   │   ├── Authenticated.cs
    │   │   │   │   │   │   ├── AuthenticationContext.cs
    │   │   │   │   │   │   ├── AuthenticationContextDI.cs
    │   │   │   │   │   │   ├── AuthenticationContextException.cs
    │   │   │   │   │   │   ├── IAuthenticationContext.cs
    │   │   │   │   │   │   ├── Scopes.cs
    │   │   │   │   │   │   └── TokenIssuer.cs
    │   │   │   │   │   ├── AuthenticationMethod.cs
    │   │   │   │   │   ├── Bootstrap/
    │   │   │   │   │   │   ├── BootstrapGlobalService.cs
    │   │   │   │   │   │   ├── FormBootstrapService.cs
    │   │   │   │   │   │   ├── LayoutAnalysisService.cs
    │   │   │   │   │   │   └── Models/
    │   │   │   │   │   │       ├── BootstrapGlobalResponse.cs
    │   │   │   │   │   │       └── FormBootstrapResponse.cs
    │   │   │   │   │   ├── Cache/
    │   │   │   │   │   │   ├── AppConfigurationCache.cs
    │   │   │   │   │   │   ├── AppConfigurationCacheDI.cs
    │   │   │   │   │   │   └── IAppConfigurationCache.cs
    │   │   │   │   │   ├── Correspondence/
    │   │   │   │   │   │   ├── Builder/
    │   │   │   │   │   │   │   ├── BuilderUtils.cs
    │   │   │   │   │   │   │   ├── CorrespondenceAttachmentBuilder.cs
    │   │   │   │   │   │   │   ├── CorrespondenceContentBuilder.cs
    │   │   │   │   │   │   │   ├── CorrespondenceNotificationBuilder.cs
    │   │   │   │   │   │   │   ├── CorrespondenceNotificationOverrideBuilder.cs
    │   │   │   │   │   │   │   ├── CorrespondenceRequestBuilder.cs
    │   │   │   │   │   │   │   ├── ICorrespondenceAttachmentBuilder.cs
    │   │   │   │   │   │   │   ├── ICorrespondenceContentBuilder.cs
    │   │   │   │   │   │   │   ├── ICorrespondenceNotificationBuilder.cs
    │   │   │   │   │   │   │   ├── ICorrespondenceNotificationOverrideBuilder.cs
    │   │   │   │   │   │   │   └── ICorrespondenceRequestBuilder.cs
    │   │   │   │   │   │   ├── CorrespondenceAuthorisationFactory.cs
    │   │   │   │   │   │   ├── CorrespondenceClient.cs
    │   │   │   │   │   │   ├── Exceptions/
    │   │   │   │   │   │   │   ├── CorrespondenceArgumentException.cs
    │   │   │   │   │   │   │   ├── CorrespondenceException.cs
    │   │   │   │   │   │   │   └── CorrespondenceRequestException.cs
    │   │   │   │   │   │   ├── Extensions/
    │   │   │   │   │   │   │   └── ServiceCollectionExtensions.cs
    │   │   │   │   │   │   ├── ICorrespondenceClient.cs
    │   │   │   │   │   │   └── Models/
    │   │   │   │   │   │       ├── AttachmentPayload.cs
    │   │   │   │   │   │       ├── CorrespondenceApiScopes.cs
    │   │   │   │   │   │       ├── CorrespondenceAttachment.cs
    │   │   │   │   │   │       ├── CorrespondenceAuthorisation.cs
    │   │   │   │   │   │       ├── CorrespondenceContent.cs
    │   │   │   │   │   │       ├── CorrespondenceDataLocationType.cs
    │   │   │   │   │   │       ├── CorrespondenceExternalReference.cs
    │   │   │   │   │   │       ├── CorrespondenceNotification.cs
    │   │   │   │   │   │       ├── CorrespondenceNotificationChannel.cs
    │   │   │   │   │   │       ├── CorrespondenceNotificationRecipient.cs
    │   │   │   │   │   │       ├── CorrespondenceNotificationRecipientWrapper.cs
    │   │   │   │   │   │       ├── CorrespondenceNotificationTemplate.cs
    │   │   │   │   │   │       ├── CorrespondencePayload.cs
    │   │   │   │   │   │       ├── CorrespondenceReferenceType.cs
    │   │   │   │   │   │       ├── CorrespondenceReplyOption.cs
    │   │   │   │   │   │       ├── CorrespondenceRequest.cs
    │   │   │   │   │   │       ├── CorrespondenceStatus.cs
    │   │   │   │   │   │       ├── Request/
    │   │   │   │   │   │       │   ├── InitializeAttachmentRequest.cs
    │   │   │   │   │   │       │   └── InitializeCorrespondencesRequest.cs
    │   │   │   │   │   │       └── Response/
    │   │   │   │   │   │           ├── AttachmentOverviewResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceAttachmentResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceAttachmentStatusResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceContentResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceDataLocationTypeResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceDetailsResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationDetailsResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationOrderResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationRecipientResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationStatusDetailsResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationStatusResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationStatusSummaryResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceNotificationSummaryResponse.cs
    │   │   │   │   │   │           ├── CorrespondenceStatusEventResponse.cs
    │   │   │   │   │   │           ├── GetCorrespondenceStatusResponse.cs
    │   │   │   │   │   │           └── SendCorrespondenceResponse.cs
    │   │   │   │   │   ├── DataLists/
    │   │   │   │   │   │   ├── DataListsFactory.cs
    │   │   │   │   │   │   ├── DataListsService.cs
    │   │   │   │   │   │   ├── IDataListsService.cs
    │   │   │   │   │   │   ├── InstanceDataListsFactory.cs
    │   │   │   │   │   │   ├── NullDataListProvider.cs
    │   │   │   │   │   │   └── NullInstanceDataListProvider.cs
    │   │   │   │   │   ├── DataProcessing/
    │   │   │   │   │   │   ├── GenericDataProcessor.cs
    │   │   │   │   │   │   └── NullInstantiationProcessor.cs
    │   │   │   │   │   ├── ExternalApi/
    │   │   │   │   │   │   ├── ExternalApiFactory.cs
    │   │   │   │   │   │   ├── ExternalApiService.cs
    │   │   │   │   │   │   └── IExternalApiClient.cs
    │   │   │   │   │   ├── FeatureFlags.cs
    │   │   │   │   │   ├── FileAnalyzis/
    │   │   │   │   │   │   ├── FileAnalyserFactory.cs
    │   │   │   │   │   │   ├── FileAnalysisResult.cs
    │   │   │   │   │   │   ├── FileAnalysisService.cs
    │   │   │   │   │   │   ├── IFileAnalyser.cs
    │   │   │   │   │   │   ├── IFileAnalyserFactory.cs
    │   │   │   │   │   │   └── IFileAnalysisService.cs
    │   │   │   │   │   ├── FormDataReader.cs
    │   │   │   │   │   ├── IAppOptionsProvider.cs
    │   │   │   │   │   ├── IDataElementValidator.cs
    │   │   │   │   │   ├── IDataListProvider.cs
    │   │   │   │   │   ├── IDataProcessor.cs
    │   │   │   │   │   ├── IDataWriteProcessor.cs
    │   │   │   │   │   ├── IEmailNotificationClient.cs
    │   │   │   │   │   ├── IEventHandler.cs
    │   │   │   │   │   ├── IFormDataValidator.cs
    │   │   │   │   │   ├── IInstanceAppOptionsProvider.cs
    │   │   │   │   │   ├── IInstanceDataAccessor.cs
    │   │   │   │   │   ├── IInstanceDataListProvider.cs
    │   │   │   │   │   ├── IInstanceDataMutator.cs
    │   │   │   │   │   ├── IInstanceValidator.cs
    │   │   │   │   │   ├── IInstantiationProcessor.cs
    │   │   │   │   │   ├── IInstantiationValidator.cs
    │   │   │   │   │   ├── INotificationCancelClient.cs
    │   │   │   │   │   ├── INotificationOrderClient.cs
    │   │   │   │   │   ├── IPdfFormatter.cs
    │   │   │   │   │   ├── IProcessEnd.cs
    │   │   │   │   │   ├── IProcessExclusiveGateway.cs
    │   │   │   │   │   ├── IProcessTaskAbandon.cs
    │   │   │   │   │   ├── IProcessTaskEnd.cs
    │   │   │   │   │   ├── IProcessTaskStart.cs
    │   │   │   │   │   ├── ISmsNotificationClient.cs
    │   │   │   │   │   ├── ITaskValidator.cs
    │   │   │   │   │   ├── IUserAction.cs
    │   │   │   │   │   ├── IUserActionAuthorizer.cs
    │   │   │   │   │   ├── IValidateQueryParamPrefill.cs
    │   │   │   │   │   ├── IValidator.cs
    │   │   │   │   │   ├── Maskinporten/
    │   │   │   │   │   │   ├── Constants/
    │   │   │   │   │   │   │   ├── JwtClaimTypes.cs
    │   │   │   │   │   │   │   └── TokenAuthority.cs
    │   │   │   │   │   │   ├── Converters/
    │   │   │   │   │   │   │   └── JsonWebKeyConverter.cs
    │   │   │   │   │   │   ├── Delegates/
    │   │   │   │   │   │   │   └── MaskinportenDelegatingHandler.cs
    │   │   │   │   │   │   ├── Exceptions/
    │   │   │   │   │   │   │   ├── MaskinportenAuthenticationException.cs
    │   │   │   │   │   │   │   ├── MaskinportenConfigurationException.cs
    │   │   │   │   │   │   │   ├── MaskinportenException.cs
    │   │   │   │   │   │   │   ├── MaskinportenTokenExpiredException.cs
    │   │   │   │   │   │   │   └── MaskinportenUnsupportedTokenException.cs
    │   │   │   │   │   │   ├── Extensions/
    │   │   │   │   │   │   │   ├── HttpClientBuilderExtensions.cs
    │   │   │   │   │   │   │   ├── ServiceCollectionExtensions.cs
    │   │   │   │   │   │   │   └── WebHostBuilderExtensions.cs
    │   │   │   │   │   │   ├── IMaskinportenClient.cs
    │   │   │   │   │   │   ├── MaskinportenClient.cs
    │   │   │   │   │   │   └── Models/
    │   │   │   │   │   │       ├── MaskinportenSettings.cs
    │   │   │   │   │   │       ├── MaskinportenTokenResponse.cs
    │   │   │   │   │   │       ├── OAuthAuthorizationServerMetadata.cs
    │   │   │   │   │   │       └── TokenCacheEntry.cs
    │   │   │   │   │   ├── Notifications/
    │   │   │   │   │   │   ├── Cancellation/
    │   │   │   │   │   │   │   ├── CancelOnProcessEnd.cs
    │   │   │   │   │   │   │   └── ICancelInstantiationNotification.cs
    │   │   │   │   │   │   ├── Email/
    │   │   │   │   │   │   │   └── EmailNotificationClient.cs
    │   │   │   │   │   │   ├── Exceptions/
    │   │   │   │   │   │   │   └── NotificationConditionSecretNotFoundException.cs
    │   │   │   │   │   │   ├── Future/
    │   │   │   │   │   │   │   └── NotificationOrderClient.cs
    │   │   │   │   │   │   ├── INotificationService.cs
    │   │   │   │   │   │   ├── NotificationService.cs
    │   │   │   │   │   │   ├── Order/
    │   │   │   │   │   │   │   └── NotificationCancelClient.cs
    │   │   │   │   │   │   ├── SecretProvider/
    │   │   │   │   │   │   │   ├── NotificationConditionCodeValidator.cs
    │   │   │   │   │   │   │   ├── NotificationConditionSecretProvider.cs
    │   │   │   │   │   │   │   └── NotificationConditionTokenGenerator.cs
    │   │   │   │   │   │   ├── Sms/
    │   │   │   │   │   │   │   └── SmsNotificationClient.cs
    │   │   │   │   │   │   └── Texts/
    │   │   │   │   │   │       ├── NotificationTexts.cs
    │   │   │   │   │   │       └── ReplacementTokens.cs
    │   │   │   │   │   ├── Options/
    │   │   │   │   │   │   ├── Altinn2Provider/
    │   │   │   │   │   │   │   ├── Altinn2CodeListProvider.cs
    │   │   │   │   │   │   │   ├── Altinn2MetadataApiClient.cs
    │   │   │   │   │   │   │   └── MetadataCodelistResponse.cs
    │   │   │   │   │   │   ├── Altinn3LibraryCodeList/
    │   │   │   │   │   │   │   ├── Altinn3LibraryCodeListApiClient.cs
    │   │   │   │   │   │   │   ├── Altinn3LibraryCodeListResponse.cs
    │   │   │   │   │   │   │   ├── Altinn3LibraryCodeListService.cs
    │   │   │   │   │   │   │   ├── Altinn3LibraryOptionsProvider.cs
    │   │   │   │   │   │   │   ├── IAltinn3LibraryCodeListApiClient.cs
    │   │   │   │   │   │   │   └── IAltinn3LibraryCodeListService.cs
    │   │   │   │   │   │   ├── AppOptionsFactory.cs
    │   │   │   │   │   │   ├── AppOptionsFileHandler.cs
    │   │   │   │   │   │   ├── AppOptionsService.cs
    │   │   │   │   │   │   ├── AppOptionsServiceExtentions.cs
    │   │   │   │   │   │   ├── CommonOptionProviderServiceCollectionExtensions.cs
    │   │   │   │   │   │   ├── DefaultAppOptionsProvider.cs
    │   │   │   │   │   │   ├── IAppOptionsFileHandler.cs
    │   │   │   │   │   │   ├── IAppOptionsService.cs
    │   │   │   │   │   │   ├── InstanceAppOptionsFactory.cs
    │   │   │   │   │   │   └── JoinedAppOptionsProvider.cs
    │   │   │   │   │   ├── Payment/
    │   │   │   │   │   │   ├── Exceptions/
    │   │   │   │   │   │   │   └── PaymentException.cs
    │   │   │   │   │   │   ├── IOrderDetailsCalculator.cs
    │   │   │   │   │   │   ├── Models/
    │   │   │   │   │   │   │   ├── Address.cs
    │   │   │   │   │   │   │   ├── CardDetails.cs
    │   │   │   │   │   │   │   ├── InvoiceDetails.cs
    │   │   │   │   │   │   │   ├── OrderDetails.cs
    │   │   │   │   │   │   │   ├── Payer.cs
    │   │   │   │   │   │   │   ├── PayerCompany.cs
    │   │   │   │   │   │   │   ├── PayerPrivatePerson.cs
    │   │   │   │   │   │   │   ├── PayerType.cs
    │   │   │   │   │   │   │   ├── PaymentDetails.cs
    │   │   │   │   │   │   │   ├── PaymentInformation.cs
    │   │   │   │   │   │   │   ├── PaymentOrderLine.cs
    │   │   │   │   │   │   │   ├── PaymentReceiver.cs
    │   │   │   │   │   │   │   ├── PaymentStatus.cs
    │   │   │   │   │   │   │   └── PhoneNumber.cs
    │   │   │   │   │   │   ├── Processors/
    │   │   │   │   │   │   │   ├── FakePaymentProcessor/
    │   │   │   │   │   │   │   │   └── FakePaymentProcessor.cs
    │   │   │   │   │   │   │   ├── IPaymentProcessor.cs
    │   │   │   │   │   │   │   └── Nets/
    │   │   │   │   │   │   │       ├── INetsClient.cs
    │   │   │   │   │   │   │       ├── Models/
    │   │   │   │   │   │   │       │   ├── HttpApiResult.cs
    │   │   │   │   │   │   │       │   ├── NetsCheckout.cs
    │   │   │   │   │   │   │       │   ├── NetsCheckoutConsumerDetails.cs
    │   │   │   │   │   │   │       │   ├── NetsCompleteWebhookPayload.cs
    │   │   │   │   │   │   │       │   ├── NetsCreatePayment.cs
    │   │   │   │   │   │   │       │   ├── NetsCreatePaymentSuccess.cs
    │   │   │   │   │   │   │       │   ├── NetsNotifications.cs
    │   │   │   │   │   │   │       │   ├── NetsOrder.cs
    │   │   │   │   │   │   │       │   ├── NetsOrderItem.cs
    │   │   │   │   │   │   │       │   ├── NetsPaymentFull.cs
    │   │   │   │   │   │   │       │   ├── NetsPaymentMethod.cs
    │   │   │   │   │   │   │       │   └── NetsPaymentMethodConfiguration.cs
    │   │   │   │   │   │   │       ├── NetsClient.cs
    │   │   │   │   │   │   │       ├── NetsMapper.cs
    │   │   │   │   │   │   │       ├── NetsPaymentProcessor.cs
    │   │   │   │   │   │   │       ├── NetsPaymentSettings.cs
    │   │   │   │   │   │   │       ├── NetsWebhookSecretProvider.cs
    │   │   │   │   │   │   │       └── README.md
    │   │   │   │   │   │   └── Services/
    │   │   │   │   │   │       ├── IPaymentService.cs
    │   │   │   │   │   │       └── PaymentService.cs
    │   │   │   │   │   ├── Pdf/
    │   │   │   │   │   │   └── NullPdfFormatter.cs
    │   │   │   │   │   ├── Redirect/
    │   │   │   │   │   │   ├── IReturnUrlService.cs
    │   │   │   │   │   │   ├── ReturnUrlService.cs
    │   │   │   │   │   │   └── ReturnUrlValidationResult.cs
    │   │   │   │   │   ├── Signing/
    │   │   │   │   │   │   ├── Exceptions/
    │   │   │   │   │   │   │   ├── SigneeProviderNotFoundException.cs
    │   │   │   │   │   │   │   └── SigningException.cs
    │   │   │   │   │   │   ├── Extensions/
    │   │   │   │   │   │   │   └── SigningInstanceDataAccessorExtensions.cs
    │   │   │   │   │   │   ├── Helpers/
    │   │   │   │   │   │   │   ├── SigningNotificationHelper.cs
    │   │   │   │   │   │   │   └── SigningTextHelper.cs
    │   │   │   │   │   │   ├── ISigneeProvider.cs
    │   │   │   │   │   │   ├── Models/
    │   │   │   │   │   │   │   ├── ContentWrapper.cs
    │   │   │   │   │   │   │   ├── DefaultTexts.cs
    │   │   │   │   │   │   │   ├── SigneeContext.cs
    │   │   │   │   │   │   │   └── SigneeContextState.cs
    │   │   │   │   │   │   ├── NotificationChoice.cs
    │   │   │   │   │   │   ├── ProvidedSignee.cs
    │   │   │   │   │   │   ├── Services/
    │   │   │   │   │   │   │   ├── ISignDocumentManager.cs
    │   │   │   │   │   │   │   ├── ISigneeContextsManager.cs
    │   │   │   │   │   │   │   ├── ISigningCallToActionService.cs
    │   │   │   │   │   │   │   ├── ISigningDelegationService.cs
    │   │   │   │   │   │   │   ├── ISigningReceiptService.cs
    │   │   │   │   │   │   │   ├── ISigningService.cs
    │   │   │   │   │   │   │   ├── SignDocumentManager.cs
    │   │   │   │   │   │   │   ├── SigneeContextsManager.cs
    │   │   │   │   │   │   │   ├── SigningCallToActionService.cs
    │   │   │   │   │   │   │   ├── SigningDelegationService.cs
    │   │   │   │   │   │   │   ├── SigningReceiptService.cs
    │   │   │   │   │   │   │   └── SigningService.cs
    │   │   │   │   │   │   └── SigneeCommunication.cs
    │   │   │   │   │   ├── Telemetry/
    │   │   │   │   │   │   ├── Signing/
    │   │   │   │   │   │   │   ├── Telemetry.SignDocumentManager.cs
    │   │   │   │   │   │   │   ├── Telemetry.SigneeContextsManager.cs
    │   │   │   │   │   │   │   ├── Telemetry.SigningCallToActionService.cs
    │   │   │   │   │   │   │   ├── Telemetry.SigningDelegationService.cs
    │   │   │   │   │   │   │   ├── Telemetry.SigningReceiptService.cs
    │   │   │   │   │   │   │   └── Telemetry.SigningService.cs
    │   │   │   │   │   │   ├── Telemetry.AccessManagement.cs
    │   │   │   │   │   │   ├── Telemetry.AppOptionsService.cs
    │   │   │   │   │   │   ├── Telemetry.ApplicationLanguage.cs
    │   │   │   │   │   │   ├── Telemetry.ApplicationMetadata.Client.cs
    │   │   │   │   │   │   ├── Telemetry.ApplicationMetadata.Service.cs
    │   │   │   │   │   │   ├── Telemetry.Authentication.cs
    │   │   │   │   │   │   ├── Telemetry.Authorization.Client.cs
    │   │   │   │   │   │   ├── Telemetry.Authorization.Service.cs
    │   │   │   │   │   │   ├── Telemetry.Correspondence.cs
    │   │   │   │   │   │   ├── Telemetry.Data.cs
    │   │   │   │   │   │   ├── Telemetry.DataClient.cs
    │   │   │   │   │   │   ├── Telemetry.DataList.cs
    │   │   │   │   │   │   ├── Telemetry.ErClient.cs
    │   │   │   │   │   │   ├── Telemetry.EventsClient.cs
    │   │   │   │   │   │   ├── Telemetry.Fiks.cs
    │   │   │   │   │   │   ├── Telemetry.FileAnalysis.cs
    │   │   │   │   │   │   ├── Telemetry.FileValidation.cs
    │   │   │   │   │   │   ├── Telemetry.InstanceDataAccessor.cs
    │   │   │   │   │   │   ├── Telemetry.InstanceLockClient.cs
    │   │   │   │   │   │   ├── Telemetry.Instances.cs
    │   │   │   │   │   │   ├── Telemetry.Maskinporten.cs
    │   │   │   │   │   │   ├── Telemetry.ModelSerialization.cs
    │   │   │   │   │   │   ├── Telemetry.Notifications.cs
    │   │   │   │   │   │   ├── Telemetry.PartyClient.cs
    │   │   │   │   │   │   ├── Telemetry.Payment.cs
    │   │   │   │   │   │   ├── Telemetry.PdfGeneratorClient.cs
    │   │   │   │   │   │   ├── Telemetry.PdfService.cs
    │   │   │   │   │   │   ├── Telemetry.Prefill.Service.cs
    │   │   │   │   │   │   ├── Telemetry.ProcessClient.cs
    │   │   │   │   │   │   ├── Telemetry.ProcessReader.cs
    │   │   │   │   │   │   ├── Telemetry.Processes.cs
    │   │   │   │   │   │   ├── Telemetry.ProfileClient.cs
    │   │   │   │   │   │   ├── Telemetry.RegisterClient.cs
    │   │   │   │   │   │   ├── Telemetry.ScopeAuthorization.cs
    │   │   │   │   │   │   ├── Telemetry.UserHelper.cs
    │   │   │   │   │   │   ├── Telemetry.Validation.cs
    │   │   │   │   │   │   ├── Telemetry.cs
    │   │   │   │   │   │   └── TelemetryActivityExtensions.cs
    │   │   │   │   │   └── Validation/
    │   │   │   │   │       ├── Default/
    │   │   │   │   │       │   ├── DataAnnotationValidator.cs
    │   │   │   │   │       │   ├── DefaultDataElementValidator.cs
    │   │   │   │   │       │   ├── DefaultTaskValidator.cs
    │   │   │   │   │       │   ├── ExpressionValidator.cs
    │   │   │   │   │       │   ├── LegacyIInstanceValidatorFormDataValidator.cs
    │   │   │   │   │       │   ├── LegacyIInstanceValidatorTaskValidator.cs
    │   │   │   │   │       │   ├── RequiredLayoutValidator.cs
    │   │   │   │   │       │   ├── SignatureHashValidator.cs
    │   │   │   │   │       │   └── SigningTaskValidator.cs
    │   │   │   │   │       ├── GenericFormDataValidator.cs
    │   │   │   │   │       ├── Helpers/
    │   │   │   │   │       │   └── ModelStateHelpers.cs
    │   │   │   │   │       ├── IFileValidator.cs
    │   │   │   │   │       ├── NullInstantiationValidator.cs
    │   │   │   │   │       └── Wrappers/
    │   │   │   │   │           ├── DataElementValidatorWrapper.cs
    │   │   │   │   │           ├── FormDataValidatorWrapper.cs
    │   │   │   │   │           └── TaskValidatorWrapper.cs
    │   │   │   │   ├── Helpers/
    │   │   │   │   │   ├── AllowedContributorsHelper.cs
    │   │   │   │   │   ├── AppTextHelper.cs
    │   │   │   │   │   ├── AuthenticationHelper.cs
    │   │   │   │   │   ├── CamelCaseExceptDictionaryResolver.cs
    │   │   │   │   │   ├── DataHelper.cs
    │   │   │   │   │   ├── DataModel/
    │   │   │   │   │   │   ├── DataModel.cs
    │   │   │   │   │   │   ├── DataModelException.cs
    │   │   │   │   │   │   ├── DataModelWrapper.cs
    │   │   │   │   │   │   └── RowRemovalOption.cs
    │   │   │   │   │   ├── Extensions/
    │   │   │   │   │   │   ├── StringExtensions.cs
    │   │   │   │   │   │   └── Utf8JsonReaderExtentions.cs
    │   │   │   │   │   ├── InstantiationHelper.cs
    │   │   │   │   │   ├── JsonHelper.cs
    │   │   │   │   │   ├── JsonSerializerIgnorePrefix.cs
    │   │   │   │   │   ├── JsonSerializerPermissive.cs
    │   │   │   │   │   ├── LinqExpressionHelpers.cs
    │   │   │   │   │   ├── LogSanitizer.cs
    │   │   │   │   │   ├── MemoryAsStream.cs
    │   │   │   │   │   ├── MimeTypeMap.cs
    │   │   │   │   │   ├── MultiDecisionHelper.cs
    │   │   │   │   │   ├── NaturalStringComparerPolyfill.cs
    │   │   │   │   │   ├── ObjectUtils.cs
    │   │   │   │   │   ├── PathHelper.cs
    │   │   │   │   │   ├── PlatformHttpException.cs
    │   │   │   │   │   ├── PlatformHttpResponseSnapshotException.cs
    │   │   │   │   │   ├── ProcessError.cs
    │   │   │   │   │   ├── ProcessHelper.cs
    │   │   │   │   │   ├── RemoveBomExtentions.cs
    │   │   │   │   │   ├── ResponseWrapperStream.cs
    │   │   │   │   │   ├── SelfLinkHelper.cs
    │   │   │   │   │   ├── Serialization/
    │   │   │   │   │   │   ├── ModelDeserializer.cs
    │   │   │   │   │   │   └── ModelSerializationService.cs
    │   │   │   │   │   ├── ServiceException.cs
    │   │   │   │   │   ├── ShadowFieldsConverter.cs
    │   │   │   │   │   ├── UrlHelper.cs
    │   │   │   │   │   └── UserHelper.cs
    │   │   │   │   ├── Implementation/
    │   │   │   │   │   ├── AppResourcesSI.cs
    │   │   │   │   │   ├── DefaultAppEvents.cs
    │   │   │   │   │   ├── PrefillSI.cs
    │   │   │   │   │   └── UserTokenProvider.cs
    │   │   │   │   ├── Infrastructure/
    │   │   │   │   │   └── Clients/
    │   │   │   │   │       ├── AccessManagement/
    │   │   │   │   │       │   └── AccessManagementClient.cs
    │   │   │   │   │       ├── Authentication/
    │   │   │   │   │       │   └── AuthenticationClient.cs
    │   │   │   │   │       ├── Authorization/
    │   │   │   │   │       │   └── AuthorizationClient.cs
    │   │   │   │   │       ├── Events/
    │   │   │   │   │       │   ├── EventsClient.cs
    │   │   │   │   │       │   ├── EventsSubscriptionClient.cs
    │   │   │   │   │       │   ├── Subscription.cs
    │   │   │   │   │       │   └── SubscriptionRequest.cs
    │   │   │   │   │       ├── KeyVault/
    │   │   │   │   │       │   ├── SecretsClient.cs
    │   │   │   │   │       │   └── SecretsLocalClient.cs
    │   │   │   │   │       ├── Pdf/
    │   │   │   │   │       │   └── PdfGeneratorClient.cs
    │   │   │   │   │       ├── Profile/
    │   │   │   │   │       │   ├── ProfileClient.cs
    │   │   │   │   │       │   └── ProfileClientCachingDecorator.cs
    │   │   │   │   │       ├── Register/
    │   │   │   │   │       │   ├── AltinnPartyClient.cs
    │   │   │   │   │       │   ├── PersonClient.cs
    │   │   │   │   │       │   └── RegisterERClient.cs
    │   │   │   │   │       ├── Secrets/
    │   │   │   │   │       │   └── AppCodesSettings.cs
    │   │   │   │   │       └── Storage/
    │   │   │   │   │           ├── ApplicationClient.cs
    │   │   │   │   │           ├── DataClient.cs
    │   │   │   │   │           ├── InstanceClient.cs
    │   │   │   │   │           ├── InstanceEventClient.cs
    │   │   │   │   │           ├── InstanceLockClient.cs
    │   │   │   │   │           ├── ProcessClient.cs
    │   │   │   │   │           ├── SignClient.cs
    │   │   │   │   │           └── TextClient.cs
    │   │   │   │   ├── Interface/
    │   │   │   │   │   ├── IAppEvents.cs
    │   │   │   │   │   ├── IApplication.cs
    │   │   │   │   │   ├── IAuthentication.cs
    │   │   │   │   │   ├── IAuthorization.cs
    │   │   │   │   │   ├── IDSF.cs
    │   │   │   │   │   ├── IData.cs
    │   │   │   │   │   ├── IER.cs
    │   │   │   │   │   ├── IEvents.cs
    │   │   │   │   │   ├── IInstance.cs
    │   │   │   │   │   ├── IInstanceEvent.cs
    │   │   │   │   │   ├── IPersonLookup.cs
    │   │   │   │   │   ├── IPersonRetriever.cs
    │   │   │   │   │   ├── IPrefill.cs
    │   │   │   │   │   ├── IProcess.cs
    │   │   │   │   │   ├── IProfile.cs
    │   │   │   │   │   ├── IRegister.cs
    │   │   │   │   │   ├── ISecrets.cs
    │   │   │   │   │   ├── ITaskEvents.cs
    │   │   │   │   │   └── IUserTokenProvider.cs
    │   │   │   │   ├── Internal/
    │   │   │   │   │   ├── AccessManagement/
    │   │   │   │   │   │   ├── Exceptions/
    │   │   │   │   │   │   │   ├── AccessManagementArgumentException.cs
    │   │   │   │   │   │   │   ├── AccessManagementException.cs
    │   │   │   │   │   │   │   └── AccessManagementRequestException.cs
    │   │   │   │   │   │   ├── Helpers/
    │   │   │   │   │   │   │   └── UrlHelper.cs
    │   │   │   │   │   │   └── Models/
    │   │   │   │   │   │       ├── DelegationConstants.cs
    │   │   │   │   │   │       ├── DelegationRequest.cs
    │   │   │   │   │   │       ├── DelegationResponse.cs
    │   │   │   │   │   │       └── Shared/
    │   │   │   │   │   │           ├── AltinnAction.cs
    │   │   │   │   │   │           ├── AppsInstanceDelegationRequestDto.cs
    │   │   │   │   │   │           ├── DelegationParty.cs
    │   │   │   │   │   │           ├── Resource.cs
    │   │   │   │   │   │           └── RightDto.cs
    │   │   │   │   │   ├── AltinnCdn/
    │   │   │   │   │   │   ├── AltinnCdnClient.cs
    │   │   │   │   │   │   ├── AltinnCdnOrgs.cs
    │   │   │   │   │   │   └── IAltinnCdnClient.cs
    │   │   │   │   │   ├── App/
    │   │   │   │   │   │   ├── AppMetadata.cs
    │   │   │   │   │   │   ├── ApplicationConfigException.cs
    │   │   │   │   │   │   ├── FrontendFeatures.cs
    │   │   │   │   │   │   ├── IAppEvents.cs
    │   │   │   │   │   │   ├── IAppMetadata.cs
    │   │   │   │   │   │   ├── IAppResources.cs
    │   │   │   │   │   │   ├── IApplicationClient.cs
    │   │   │   │   │   │   ├── IFrontendFeatures.cs
    │   │   │   │   │   │   ├── IIndexPageGenerator.cs
    │   │   │   │   │   │   └── IndexPageGenerator.cs
    │   │   │   │   │   ├── AppModel/
    │   │   │   │   │   │   ├── DefaultAppModel.cs
    │   │   │   │   │   │   └── IAppModel.cs
    │   │   │   │   │   ├── Auth/
    │   │   │   │   │   │   ├── AuthenticationTokenResolver.cs
    │   │   │   │   │   │   ├── AuthorizationService.cs
    │   │   │   │   │   │   ├── IAuthenticationClient.cs
    │   │   │   │   │   │   ├── IAuthenticationTokenResolver.cs
    │   │   │   │   │   │   ├── IAuthorizationClient.cs
    │   │   │   │   │   │   ├── IAuthorizationService.cs
    │   │   │   │   │   │   └── IUserTokenProvider.cs
    │   │   │   │   │   ├── Data/
    │   │   │   │   │   │   ├── CleanInstanceDataAccessor.cs
    │   │   │   │   │   │   ├── DataElementAccessChecker.cs
    │   │   │   │   │   │   ├── DataElementCache.cs
    │   │   │   │   │   │   ├── DataService.cs
    │   │   │   │   │   │   ├── FormDataWrapperFactory.cs
    │   │   │   │   │   │   ├── IDataClient.cs
    │   │   │   │   │   │   ├── IDataElementAccessChecker.cs
    │   │   │   │   │   │   ├── IDataService.cs
    │   │   │   │   │   │   ├── IFormDataWrapper.cs
    │   │   │   │   │   │   ├── InstanceDataUnitOfWork.cs
    │   │   │   │   │   │   ├── InstanceDataUnitOfWorkInitializer.cs
    │   │   │   │   │   │   ├── PreviousDataAccessor.cs
    │   │   │   │   │   │   └── ReflectionFormDataWrapper.cs
    │   │   │   │   │   ├── Events/
    │   │   │   │   │   │   ├── EventHandlerResolver.cs
    │   │   │   │   │   │   ├── IEventHandlerResolver.cs
    │   │   │   │   │   │   ├── IEventSecretCodeProvider.cs
    │   │   │   │   │   │   ├── IEventsClient.cs
    │   │   │   │   │   │   ├── IEventsSubscription.cs
    │   │   │   │   │   │   ├── KeyVaultSecretCodeProvider.cs
    │   │   │   │   │   │   ├── SubscriptionValidationHandler.cs
    │   │   │   │   │   │   └── UnhandledEventHandler.cs
    │   │   │   │   │   ├── Expressions/
    │   │   │   │   │   │   ├── ExpressionEvaluator.cs
    │   │   │   │   │   │   ├── ExpressionEvaluatorTypeErrorException.cs
    │   │   │   │   │   │   ├── ExpressionValue.cs
    │   │   │   │   │   │   ├── ILayoutEvaluatorStateInitializer.cs
    │   │   │   │   │   │   ├── LayoutEvaluator.cs
    │   │   │   │   │   │   ├── LayoutEvaluatorState.cs
    │   │   │   │   │   │   ├── LayoutEvaluatorStateInitializer.cs
    │   │   │   │   │   │   └── UnicodeDateTimeTokenConverter.cs
    │   │   │   │   │   ├── InstanceLocking/
    │   │   │   │   │   │   ├── IInstanceLocker.cs
    │   │   │   │   │   │   └── InstanceLocker.cs
    │   │   │   │   │   ├── Instances/
    │   │   │   │   │   │   ├── IInstanceClient.cs
    │   │   │   │   │   │   └── IInstanceEventClient.cs
    │   │   │   │   │   ├── Language/
    │   │   │   │   │   │   ├── ApplicationLanguage.cs
    │   │   │   │   │   │   ├── IApplicationLanguage.cs
    │   │   │   │   │   │   └── LanguageConst.cs
    │   │   │   │   │   ├── Linq/
    │   │   │   │   │   │   └── Extensions.cs
    │   │   │   │   │   ├── LocaltestValidation.cs
    │   │   │   │   │   ├── Pdf/
    │   │   │   │   │   │   ├── IPdfGeneratorClient.cs
    │   │   │   │   │   │   ├── IPdfService.cs
    │   │   │   │   │   │   ├── PdfGenerationException.cs
    │   │   │   │   │   │   ├── PdfGeneratorSettings.cs
    │   │   │   │   │   │   └── PdfService.cs
    │   │   │   │   │   ├── Prefill/
    │   │   │   │   │   │   └── IPrefill.cs
    │   │   │   │   │   ├── Process/
    │   │   │   │   │   │   ├── Authorization/
    │   │   │   │   │   │   │   ├── IUserActionAuthorizerProvider.cs
    │   │   │   │   │   │   │   ├── UserActionAuthorizerProvider.cs
    │   │   │   │   │   │   │   └── UserActionAuthorizerServiceCollectionExtension.cs
    │   │   │   │   │   │   ├── Elements/
    │   │   │   │   │   │   │   ├── AltinnExtensionProperties/
    │   │   │   │   │   │   │   │   ├── AltinnAction.cs
    │   │   │   │   │   │   │   │   ├── AltinnEFormidlingConfiguration.cs
    │   │   │   │   │   │   │   │   ├── AltinnEnvironmentConfig.cs
    │   │   │   │   │   │   │   │   ├── AltinnExtensionConfigValidationExtensions.cs
    │   │   │   │   │   │   │   │   ├── AltinnGatewayExtension.cs
    │   │   │   │   │   │   │   │   ├── AltinnPaymentConfiguration.cs
    │   │   │   │   │   │   │   │   ├── AltinnPdfConfiguration.cs
    │   │   │   │   │   │   │   │   ├── AltinnSignatureConfiguration.cs
    │   │   │   │   │   │   │   │   ├── AltinnSubformPdfConfiguration.cs
    │   │   │   │   │   │   │   │   └── AltinnTaskExtension.cs
    │   │   │   │   │   │   │   ├── AppProcessElementInfo.cs
    │   │   │   │   │   │   │   ├── AppProcessState.cs
    │   │   │   │   │   │   │   ├── AppProcessTaskTypeInfo.cs
    │   │   │   │   │   │   │   ├── Base/
    │   │   │   │   │   │   │   │   └── ProcessElement.cs
    │   │   │   │   │   │   │   ├── Definitions.cs
    │   │   │   │   │   │   │   ├── EndEvent.cs
    │   │   │   │   │   │   │   ├── ExclusiveGateway.cs
    │   │   │   │   │   │   │   ├── ExtensionElements.cs
    │   │   │   │   │   │   │   ├── Process.cs
    │   │   │   │   │   │   │   ├── ProcessTask.cs
    │   │   │   │   │   │   │   ├── SequenceFlow.cs
    │   │   │   │   │   │   │   ├── ServiceTask.cs
    │   │   │   │   │   │   │   ├── StartEvent.cs
    │   │   │   │   │   │   │   └── UserAction.cs
    │   │   │   │   │   │   ├── EventHandlers/
    │   │   │   │   │   │   │   ├── EndEventEventHandler.cs
    │   │   │   │   │   │   │   ├── IEndEventEventHandler.cs
    │   │   │   │   │   │   │   └── ProcessTask/
    │   │   │   │   │   │   │       ├── AbandonTaskEventHandler.cs
    │   │   │   │   │   │   │       ├── EndTaskEventHandler.cs
    │   │   │   │   │   │   │       ├── Interfaces/
    │   │   │   │   │   │   │       │   ├── IAbandonTaskEventHandler.cs
    │   │   │   │   │   │   │       │   ├── IEndTaskEventHandler.cs
    │   │   │   │   │   │   │       │   └── IStartTaskEventHandler.cs
    │   │   │   │   │   │   │       └── StartTaskEventHandler.cs
    │   │   │   │   │   │   ├── ExclusiveGatewayFactory.cs
    │   │   │   │   │   │   ├── ExpressionsExclusiveGateway.cs
    │   │   │   │   │   │   ├── Interfaces/
    │   │   │   │   │   │   │   ├── IProcessClient.cs
    │   │   │   │   │   │   │   ├── IProcessEngine.cs
    │   │   │   │   │   │   │   ├── IProcessEngineAuthorizer.cs
    │   │   │   │   │   │   │   ├── IProcessEventDispatcher.cs
    │   │   │   │   │   │   │   ├── IProcessEventHandlerDelegator.cs
    │   │   │   │   │   │   │   ├── IProcessNavigator.cs
    │   │   │   │   │   │   │   └── IProcessReader.cs
    │   │   │   │   │   │   ├── ProcessEngine.cs
    │   │   │   │   │   │   ├── ProcessEngineAuthorizer.cs
    │   │   │   │   │   │   ├── ProcessEventDispatcher.cs
    │   │   │   │   │   │   ├── ProcessEventHandlingDelegator.cs
    │   │   │   │   │   │   ├── ProcessException.cs
    │   │   │   │   │   │   ├── ProcessNavigator.cs
    │   │   │   │   │   │   ├── ProcessReader.cs
    │   │   │   │   │   │   ├── ProcessReaderExtensions.cs
    │   │   │   │   │   │   ├── ProcessSequenceFlowType.cs
    │   │   │   │   │   │   ├── ProcessStateEnricher.cs
    │   │   │   │   │   │   └── ProcessTasks/
    │   │   │   │   │   │       ├── Common/
    │   │   │   │   │   │       │   ├── IProcessTaskCleaner.cs
    │   │   │   │   │   │       │   ├── IProcessTaskDataLocker.cs
    │   │   │   │   │   │       │   ├── IProcessTaskFinalizer.cs
    │   │   │   │   │   │       │   ├── IProcessTaskInitializer.cs
    │   │   │   │   │   │       │   ├── ProcessTaskCleaner.cs
    │   │   │   │   │   │       │   ├── ProcessTaskDataLocker.cs
    │   │   │   │   │   │       │   ├── ProcessTaskFinalizer.cs
    │   │   │   │   │   │       │   └── ProcessTaskInitializer.cs
    │   │   │   │   │   │       ├── ConfirmationProcessTask.cs
    │   │   │   │   │   │       ├── DataProcessTask.cs
    │   │   │   │   │   │       ├── FeedbackProcessTask.cs
    │   │   │   │   │   │       ├── IProcessTask.cs
    │   │   │   │   │   │       ├── NullTypeProcessTask.cs
    │   │   │   │   │   │       ├── PaymentProcessTask.cs
    │   │   │   │   │   │       ├── ServiceTasks/
    │   │   │   │   │   │       │   ├── EFormidlingServiceTask.cs
    │   │   │   │   │   │       │   ├── IServiceTask.cs
    │   │   │   │   │   │       │   ├── Legacy/
    │   │   │   │   │   │       │   │   ├── EformidlingServiceTaskLegacy.cs
    │   │   │   │   │   │       │   │   └── PdfServiceTaskLegacy.cs
    │   │   │   │   │   │       │   ├── PdfServiceTask.cs
    │   │   │   │   │   │       │   └── SubformPdfServiceTask.cs
    │   │   │   │   │   │       └── SigningProcessTask.cs
    │   │   │   │   │   ├── Profile/
    │   │   │   │   │   │   └── IProfileClient.cs
    │   │   │   │   │   ├── Registers/
    │   │   │   │   │   │   ├── IAltinnPartyClient.cs
    │   │   │   │   │   │   ├── IOrganizationClient.cs
    │   │   │   │   │   │   ├── IPersonClient.cs
    │   │   │   │   │   │   └── RegisterClient.cs
    │   │   │   │   │   ├── RuntimeEnvironment.cs
    │   │   │   │   │   ├── Secrets/
    │   │   │   │   │   │   └── ISecretsClient.cs
    │   │   │   │   │   ├── Sign/
    │   │   │   │   │   │   ├── ISignClient.cs
    │   │   │   │   │   │   └── SignatureContext.cs
    │   │   │   │   │   ├── Texts/
    │   │   │   │   │   │   ├── IText.cs
    │   │   │   │   │   │   ├── ITranslationService.cs
    │   │   │   │   │   │   └── TranslationService.cs
    │   │   │   │   │   └── Validation/
    │   │   │   │   │       ├── FileValidationService.cs
    │   │   │   │   │       ├── FileValidatorFactory.cs
    │   │   │   │   │       ├── IFileValidationService.cs
    │   │   │   │   │       ├── IFileValidatorFactory.cs
    │   │   │   │   │       ├── IValidationService.cs
    │   │   │   │   │       ├── IValidatorFactory.cs
    │   │   │   │   │       └── ValidationService.cs
    │   │   │   │   └── Models/
    │   │   │   │       ├── AppIdentifier.cs
    │   │   │   │       ├── AppOption.cs
    │   │   │   │       ├── AppOptions.cs
    │   │   │   │       ├── AppResourceId.cs
    │   │   │   │       ├── ApplicationLanguage.cs
    │   │   │   │       ├── ApplicationMetadata.cs
    │   │   │   │       ├── Attachment.cs
    │   │   │   │       ├── AttachmentList.cs
    │   │   │   │       ├── BrowserAssetsConfiguration.cs
    │   │   │   │       ├── CalculationResult.cs
    │   │   │   │       ├── CloudEvent.cs
    │   │   │   │       ├── Components.cs
    │   │   │   │       ├── DataElementChanges.cs
    │   │   │   │       ├── DataElementIdentifier.cs
    │   │   │   │       ├── DataList.cs
    │   │   │   │       ├── DataListMetadata.cs
    │   │   │   │       ├── Expressions/
    │   │   │   │       │   ├── ComponentContext.cs
    │   │   │   │       │   ├── Expression.cs
    │   │   │   │       │   ├── ExpressionConverter.cs
    │   │   │   │       │   └── ExpressionFunction.cs
    │   │   │   │       ├── GlobalPageSettings.cs
    │   │   │   │       ├── InstanceIdentifier.cs
    │   │   │   │       ├── InstanceSelection.cs
    │   │   │   │       ├── JwtToken.cs
    │   │   │   │       ├── JwtTokenJsonConverter.cs
    │   │   │   │       ├── LanguageCode.cs
    │   │   │   │       ├── LanguageCodeJsonConverter.cs
    │   │   │   │       ├── Layout/
    │   │   │   │       │   ├── Components/
    │   │   │   │       │   │   ├── Base/
    │   │   │   │       │   │   │   ├── BaseComponent.cs
    │   │   │   │       │   │   │   ├── BaseLayoutComponent.cs
    │   │   │   │       │   │   │   ├── NoReferenceComponent.cs
    │   │   │   │       │   │   │   └── ReferenceComponent.cs
    │   │   │   │       │   │   ├── CardsComponent.cs
    │   │   │   │       │   │   ├── GridComponent.cs
    │   │   │   │       │   │   ├── LikertComponent.cs
    │   │   │   │       │   │   ├── NonRepeatingGroupComponent.cs
    │   │   │   │       │   │   ├── OptionsComponent.cs
    │   │   │   │       │   │   ├── PageComponent.cs
    │   │   │   │       │   │   ├── RepeatingGroupComponent.cs
    │   │   │   │       │   │   ├── SubFormComponent.cs
    │   │   │   │       │   │   ├── TabsComponent.cs
    │   │   │   │       │   │   ├── UnknownComponent.cs
    │   │   │   │       │   │   └── _readme.md
    │   │   │   │       │   ├── DataReference.cs
    │   │   │   │       │   ├── LayoutModel.cs
    │   │   │   │       │   ├── ModelBinding.cs
    │   │   │   │       │   └── UiFolderComponent.cs
    │   │   │   │       ├── LayoutSet.cs
    │   │   │   │       ├── LayoutSettings.cs
    │   │   │   │       ├── Logo.cs
    │   │   │   │       ├── MimeType.cs
    │   │   │   │       ├── NationalIdentityNumber.cs
    │   │   │   │       ├── NationalIdentityNumberJsonConverter.cs
    │   │   │   │       ├── Notifications/
    │   │   │   │       │   ├── Email/
    │   │   │   │       │   │   ├── EmailNotification.cs
    │   │   │   │       │   │   ├── EmailNotificationException.cs
    │   │   │   │       │   │   ├── EmailOrderResponse.cs
    │   │   │   │       │   │   └── EmailRecipient.cs
    │   │   │   │       │   ├── Future/
    │   │   │   │       │   │   ├── InstansiationNotification.cs
    │   │   │   │       │   │   ├── NotificationOrderException.cs
    │   │   │   │       │   │   ├── NotificationOrderRequest.cs
    │   │   │   │       │   │   └── NotificationOrderResponse.cs
    │   │   │   │       │   ├── Order/
    │   │   │   │       │   │   └── NotificationCancelException.cs
    │   │   │   │       │   └── Sms/
    │   │   │   │       │       ├── SmsNotification.cs
    │   │   │   │       │       ├── SmsNotificationException.cs
    │   │   │   │       │       ├── SmsOrderResponse.cs
    │   │   │   │       │       └── SmsRecipient.cs
    │   │   │   │       ├── OnEntry.cs
    │   │   │   │       ├── OrganisationNumber.cs
    │   │   │   │       ├── OrganisationNumberJsonConverter.cs
    │   │   │   │       ├── OrganisationOrPersonIdentifier.cs
    │   │   │   │       ├── OrganisationOrPersonIdentifierJsonConverter.cs
    │   │   │   │       ├── PageGroup.cs
    │   │   │   │       ├── Pages.cs
    │   │   │   │       ├── Pdf/
    │   │   │   │       │   ├── PdfGeneratorCookieOptions.cs
    │   │   │   │       │   ├── PdfGeneratorRequest.cs
    │   │   │   │       │   └── PdfGeneratorRequestOptions.cs
    │   │   │   │       ├── Process/
    │   │   │   │       │   ├── ProcessChangeResult.cs
    │   │   │   │       │   ├── ProcessGatewayInformation.cs
    │   │   │   │       │   ├── ProcessNextRequest.cs
    │   │   │   │       │   ├── ProcessStartRequest.cs
    │   │   │   │       │   └── ProcessStateChange.cs
    │   │   │   │       ├── QueryResponse.cs
    │   │   │   │       ├── Result/
    │   │   │   │       │   └── ServiceResult.cs
    │   │   │   │       ├── StylesConfig.cs
    │   │   │   │       ├── TaskNavigationEntryJsonConverter.cs
    │   │   │   │       ├── UiConfiguration.cs
    │   │   │   │       ├── UserAction/
    │   │   │   │       │   ├── ActionError.cs
    │   │   │   │       │   ├── ClientAction.cs
    │   │   │   │       │   ├── UserActionContext.cs
    │   │   │   │       │   └── UserActionResult.cs
    │   │   │   │       ├── UserContext.cs
    │   │   │   │       └── Validation/
    │   │   │   │           ├── ExpressionValidation.cs
    │   │   │   │           ├── FrontendSeverityConverter.cs
    │   │   │   │           ├── InstantiationValidationResult.cs
    │   │   │   │           ├── ValidationException.cs
    │   │   │   │           ├── ValidationIssue.cs
    │   │   │   │           ├── ValidationIssueCodes.cs
    │   │   │   │           ├── ValidationIssueSeverity.cs
    │   │   │   │           ├── ValidationIssueSource.cs
    │   │   │   │           └── ValidationIssueWithSource.cs
    │   │   │   ├── Altinn.App.Internal.Analyzers/
    │   │   │   │   ├── Altinn.App.Internal.Analyzers.csproj
    │   │   │   │   ├── AnalyzerReleases.Shipped.md
    │   │   │   │   ├── AnalyzerReleases.Unshipped.md
    │   │   │   │   └── AppImplementationInjectionAnalyzer.cs
    │   │   │   ├── Directory.Build.props
    │   │   │   └── Directory.Build.targets
    │   │   └── test/
    │   │       ├── Altinn.App.Analyzers.Tests/
    │   │       │   ├── Altinn.App.Analyzers.Tests.csproj
    │   │       │   ├── Fixtures/
    │   │       │   │   ├── AltinnAppCoreFixture.cs
    │   │       │   │   ├── AltinnTestAppFixture.Contents.cs
    │   │       │   │   ├── AltinnTestAppFixture.cs
    │   │       │   │   ├── BaseFixture.cs
    │   │       │   │   ├── Collections.cs
    │   │       │   │   ├── DiagnosticJsonConverter.cs
    │   │       │   │   └── ProjectModification.cs
    │   │       │   ├── HttpContextAccessorUsageAnalyzerTests.cs
    │   │       │   ├── Internal/
    │   │       │   │   └── AppImplementationInjectionAnalyzerTests.cs
    │   │       │   ├── ModuleInitializer.cs
    │   │       │   ├── _snapshots/
    │   │       │   │   ├── AppImplementationInjectionAnalyzerTests.Emits_Diagnostics.verified.txt
    │   │       │   │   └── HttpContextAccessorUsageAnalyzerTests.Emits_Diagnostic.verified.txt
    │   │       │   └── testapp/
    │   │       │       ├── .altinnstudio/
    │   │       │       │   └── settings.json
    │   │       │       ├── .dockerignore
    │   │       │       ├── .gitignore
    │   │       │       ├── App/
    │   │       │       │   ├── App.csproj
    │   │       │       │   ├── Program.cs
    │   │       │       │   ├── Properties/
    │   │       │       │   │   └── launchSettings.json
    │   │       │       │   ├── additional/
    │   │       │       │   │   └── InvalidHttpContextAccessorUse.cs
    │   │       │       │   ├── appsettings.Development.json
    │   │       │       │   ├── appsettings.Production.json
    │   │       │       │   ├── appsettings.Staging.json
    │   │       │       │   ├── appsettings.json
    │   │       │       │   ├── config/
    │   │       │       │   │   ├── applicationmetadata.json
    │   │       │       │   │   ├── authorization/
    │   │       │       │   │   │   └── policy.xml
    │   │       │       │   │   ├── process/
    │   │       │       │   │   │   └── process.bpmn
    │   │       │       │   │   └── texts/
    │   │       │       │   │       └── resource.nb.json
    │   │       │       │   ├── models/
    │   │       │       │   │   ├── model.cs
    │   │       │       │   │   ├── model.metadata.json
    │   │       │       │   │   ├── model.schema.json
    │   │       │       │   │   └── model.xsd
    │   │       │       │   └── ui/
    │   │       │       │       ├── Task_1/
    │   │       │       │       │   ├── Settings.json
    │   │       │       │       │   └── layouts/
    │   │       │       │       │       └── Side1.json
    │   │       │       │       └── footer.json
    │   │       │       ├── App.sln
    │   │       │       ├── Directory.Build.props
    │   │       │       ├── Dockerfile
    │   │       │       └── deployment/
    │   │       │           ├── .helmignore
    │   │       │           ├── Chart.yaml
    │   │       │           └── values.yaml
    │   │       ├── Altinn.App.Api.Tests/
    │   │       │   ├── Altinn.App.Api.Tests.csproj
    │   │       │   ├── Controllers/
    │   │       │   │   ├── ActionsControllerTests.cs
    │   │       │   │   ├── ApplicationMetadataControllerTests.cs
    │   │       │   │   ├── Conventions/
    │   │       │   │   │   ├── AltinnApiJsonFormatterTests.cs
    │   │       │   │   │   ├── AltinnControllerConventionTests.cs
    │   │       │   │   │   ├── ConfigureMvcJsonOptionsTests.cs
    │   │       │   │   │   └── EnumSerializationTests.cs
    │   │       │   │   ├── DataControllerPatchTests.InvalidTestValue_ReturnsConflict.verified.txt
    │   │       │   │   ├── DataControllerTests.cs
    │   │       │   │   ├── DataController_LayoutEvaluatorTests.cs
    │   │       │   │   ├── DataController_PatchTests.cs
    │   │       │   │   ├── DataController_PostTests.cs
    │   │       │   │   ├── DataController_PutTests.cs
    │   │       │   │   ├── DataController_RequiredActionTests.cs
    │   │       │   │   ├── DataController_UserAccessTests.cs
    │   │       │   │   ├── DataTagsControllerTests.cs
    │   │       │   │   ├── EventsReceiverControllerTests.cs
    │   │       │   │   ├── ExternalApiControllerTests.cs
    │   │       │   │   ├── FileScanControllerTests.cs
    │   │       │   │   ├── FormBootstrapControllerTests.cs
    │   │       │   │   ├── HomeControllerTest_PartySelection.cs
    │   │       │   │   ├── HomeControllerTest_SetQueryParams.Ensure_ok_request_when_query_params_are_valid.verified.txt
    │   │       │   │   ├── HomeControllerTest_SetQueryParams.Ensure_only_one_content_security_policy.verified.txt
    │   │       │   │   ├── HomeControllerTest_SetQueryParams.ReturnsMappedModelWhenValidationSucceds.verified.txt
    │   │       │   │   ├── HomeControllerTest_SetQueryParams.SetQueryParms_ReturnBadRequestWhenValidationFails.verified.txt
    │   │       │   │   ├── HomeControllerTest_SetQueryParams.cs
    │   │       │   │   ├── InstancesControllerFixture.cs
    │   │       │   │   ├── InstancesController_ActiveInstancesTests.cs
    │   │       │   │   ├── InstancesController_CopyInstanceTests.cs
    │   │       │   │   ├── InstancesController_GetTests.ReturnsOkResult_Deserialized.verified.txt
    │   │       │   │   ├── InstancesController_GetTests.ReturnsOkResult_Raw.verified.txt
    │   │       │   │   ├── InstancesController_GetTests.cs
    │   │       │   │   ├── InstancesController_PostNewInstanceTests.PostNewInstance_Simplified_Org.verified.txt
    │   │       │   │   ├── InstancesController_PostNewInstanceTests.PostNewInstance_Simplified_SelfIdentifiedUser.verified.txt
    │   │       │   │   ├── InstancesController_PostNewInstanceTests.PostNewInstance_Simplified_ServiceOwner.verified.txt
    │   │       │   │   ├── InstancesController_PostNewInstanceTests.PostNewInstance_Simplified_SystemUser.verified.txt
    │   │       │   │   ├── InstancesController_PostNewInstanceTests.PostNewInstance_Simplified_User.verified.txt
    │   │       │   │   ├── InstancesController_PostNewInstanceTests.cs
    │   │       │   │   ├── LookupOrganisationControllerTests.cs
    │   │       │   │   ├── LookupPersonControllerTests.cs
    │   │       │   │   ├── NotificationCallbackControllerTests.cs
    │   │       │   │   ├── OptionsControllerTests.cs
    │   │       │   │   ├── PaymentControllerTests.cs
    │   │       │   │   ├── PdfControllerTests.cs
    │   │       │   │   ├── ProcessControllerTests.RunProcessNext_FailingValidator_Reject_ReturnsOk.verified.txt
    │   │       │   │   ├── ProcessControllerTests.RunProcessNext_FailingValidator_ReturnsValidationErrors.verified.txt
    │   │       │   │   ├── ProcessControllerTests.RunProcessNext_PdfFails_DataIsUnlocked.verified.txt
    │   │       │   │   ├── ProcessControllerTests.cs
    │   │       │   │   ├── ProfileControllerTests.PartyClient_401.verified.txt
    │   │       │   │   ├── ProfileControllerTests.User.verified.txt
    │   │       │   │   ├── ProfileControllerTests.cs
    │   │       │   │   ├── SigningControllerTests.cs
    │   │       │   │   ├── StatelessDataControllerTests.cs
    │   │       │   │   ├── TestResources/
    │   │       │   │   │   └── DummyModel.cs
    │   │       │   │   ├── TextsControllerTests.cs
    │   │       │   │   ├── UserDefinedMetadataControllerTests.cs
    │   │       │   │   ├── ValidateControllerTests.cs
    │   │       │   │   ├── ValidateControllerValidateDataTests.cs
    │   │       │   │   └── ValidateController_ValidateInstanceTests.cs
    │   │       │   ├── CustomWebApplicationFactory.cs
    │   │       │   ├── Data/
    │   │       │   │   ├── Instances/
    │   │       │   │   │   ├── .gitignore
    │   │       │   │   │   ├── tdd/
    │   │       │   │   │   │   ├── contributer-restriction/
    │   │       │   │   │   │   │   ├── 1337/
    │   │       │   │   │   │   │   │   ├── 0fc98a23-fe31-4ef5-8fb9-dd3f479354cd.pretest.json
    │   │       │   │   │   │   │   │   └── 1fc98a23-fe31-4ef5-8fb9-dd3f479354ce.pretest.json
    │   │       │   │   │   │   │   ├── 500000/
    │   │       │   │   │   │   │   │   └── 5d9e906b-83ed-44df-85a7-2f104c640bff.pretest.json
    │   │       │   │   │   │   │   └── 500600/
    │   │       │   │   │   │   │       ├── 00000000-dead-0000-babe-000000000999/
    │   │       │   │   │   │   │       │   ├── blob/
    │   │       │   │   │   │   │       │   │   └── cd691c32-0000-4555-8aee-0b7054a413e4.pretest
    │   │       │   │   │   │   │       │   └── cd691c32-0000-4555-8aee-0b7054a413e4.pretest.json
    │   │       │   │   │   │   │       ├── 00000000-dead-0000-babe-000000000999.pretest.json
    │   │       │   │   │   │   │       ├── 09e16a2d-e009-4f3a-940b-da1ea54a18b4/
    │   │       │   │   │   │   │       │   ├── blob/
    │   │       │   │   │   │   │       │   │   └── c52f40dd-11d1-4e24-b13b-4fcfdf6ca1c6.pretest
    │   │       │   │   │   │   │       │   └── c52f40dd-11d1-4e24-b13b-4fcfdf6ca1c6.pretest.json
    │   │       │   │   │   │   │       ├── 09e16a2d-e009-4f3a-940b-da1ea54a18b4.pretest.json
    │   │       │   │   │   │   │       ├── 0fc98a23-fe31-4ef5-8fb9-dd3f479354ce/
    │   │       │   │   │   │   │       │   ├── blob/
    │   │       │   │   │   │   │       │   │   ├── fc121812-0336-45fb-a75c-490df3ad5109.pretest
    │   │       │   │   │   │   │       │   │   └── fc121812-0336-45fb-a75c-490df3ad510a.pretest
    │   │       │   │   │   │   │       │   ├── fc121812-0336-45fb-a75c-490df3ad5109.pretest.json
    │   │       │   │   │   │   │       │   └── fc121812-0336-45fb-a75c-490df3ad510a.pretest.json
    │   │       │   │   │   │   │       ├── 0fc98a23-fe31-4ef5-8fb9-dd3f479354ce.pretest.json
    │   │       │   │   │   │   │       ├── 3102f61d-1446-4ca5-9fed-3c7c7d67249c/
    │   │       │   │   │   │   │       │   ├── 5240d834-dca6-44d3-b99a-1b7ca9b862af.pretest.json
    │   │       │   │   │   │   │       │   └── blob/
    │   │       │   │   │   │   │       │       └── 5240d834-dca6-44d3-b99a-1b7ca9b862af.pretest
    │   │       │   │   │   │   │       ├── 3102f61d-1446-4ca5-9fed-3c7c7d67249c.pretest.json
    │   │       │   │   │   │   │       ├── 5a2fa5ec-f97c-4816-b57a-dc78a981917e/
    │   │       │   │   │   │   │       │   ├── blob/
    │   │       │   │   │   │   │       │   │   └── cd691c32-ae36-4555-8aee-0b7054a413e4.pretest
    │   │       │   │   │   │   │       │   └── cd691c32-ae36-4555-8aee-0b7054a413e4.pretest.json
    │   │       │   │   │   │   │       ├── 5a2fa5ec-f97c-4816-b57a-dc78a981917e.pretest.json
    │   │       │   │   │   │   │       ├── cff1cb24-5bc1-4888-8e06-c634753c5144/
    │   │       │   │   │   │   │       │   ├── blob/
    │   │       │   │   │   │   │       │   │   └── f3e04c65-aa70-40ec-84df-087cc2583402.pretest
    │   │       │   │   │   │   │       │   └── f3e04c65-aa70-40ec-84df-087cc2583402.pretest.json
    │   │       │   │   │   │   │       ├── cff1cb24-5bc1-4888-8e06-c634753c5144.pretest.json
    │   │       │   │   │   │   │       ├── fad57e80-ec2f-4dee-90ac-400fa6d7720f/
    │   │       │   │   │   │   │       │   ├── 3b46b9ef-774c-4849-b4dd-66ef871f5b07.pretest.json
    │   │       │   │   │   │   │       │   └── blob/
    │   │       │   │   │   │   │       │       └── 3b46b9ef-774c-4849-b4dd-66ef871f5b07.pretest
    │   │       │   │   │   │   │       └── fad57e80-ec2f-4dee-90ac-400fa6d7720f.pretest.json
    │   │       │   │   │   │   └── task-action/
    │   │       │   │   │   │       └── 1337/
    │   │       │   │   │   │           ├── b1135209-628e-4a6e-9efd-e4282068ef41.pretest.json
    │   │       │   │   │   │           ├── b1135209-628e-4a6e-9efd-e4282068ef42.pretest.json
    │   │       │   │   │   │           └── b1135209-628e-4a6e-9efd-e4282068ef43.pretest.json
    │   │       │   │   │   └── ttd/
    │   │       │   │   │       └── service-tasks/
    │   │       │   │   │           ├── .gitignore
    │   │       │   │   │           └── 501337/
    │   │       │   │   │               ├── a2af1cfd-db99-45f9-9625-9dfa1223485f/
    │   │       │   │   │               │   ├── blob/
    │   │       │   │   │               │   │   └── fd4c42a4-a6a0-4aec-b8e9-9f5d34c445ca.pretest
    │   │       │   │   │               │   └── fd4c42a4-a6a0-4aec-b8e9-9f5d34c445ca.pretest.json
    │   │       │   │   │               ├── a2af1cfd-db99-45f9-9625-9dfa1223485f.pretest.json
    │   │       │   │   │               └── b1af1cfd-db99-45f9-9625-9dfa1223485f.pretest.json
    │   │       │   │   ├── Register/
    │   │       │   │   │   ├── Org/
    │   │       │   │   │   │   ├── 897069631.json
    │   │       │   │   │   │   ├── 897069650.json
    │   │       │   │   │   │   ├── 897069651.json
    │   │       │   │   │   │   ├── 897069652.json
    │   │       │   │   │   │   ├── 897069653.json
    │   │       │   │   │   │   ├── 900000001.json
    │   │       │   │   │   │   ├── 910423185.json
    │   │       │   │   │   │   ├── 910423495.json
    │   │       │   │   │   │   ├── 910457292.json
    │   │       │   │   │   │   ├── 910471120.json
    │   │       │   │   │   │   └── 950474084.json
    │   │       │   │   │   └── Person/
    │   │       │   │   │       ├── 01017512345.json
    │   │       │   │   │       ├── 01039012345.json
    │   │       │   │   │       ├── 01899699552.json
    │   │       │   │   │       ├── 08829698278.json
    │   │       │   │   │       └── 17858296439.json
    │   │       │   │   ├── TestData.cs
    │   │       │   │   ├── apps/
    │   │       │   │   │   ├── tdd/
    │   │       │   │   │   │   ├── contributer-restriction/
    │   │       │   │   │   │   │   ├── appsettings.json
    │   │       │   │   │   │   │   ├── config/
    │   │       │   │   │   │   │   │   ├── applicationmetadata.json
    │   │       │   │   │   │   │   │   ├── authorization/
    │   │       │   │   │   │   │   │   │   └── policy.xml
    │   │       │   │   │   │   │   │   ├── process/
    │   │       │   │   │   │   │   │   │   └── process.bpmn
    │   │       │   │   │   │   │   │   └── texts/
    │   │       │   │   │   │   │   │       └── resource.nb.json
    │   │       │   │   │   │   │   ├── models/
    │   │       │   │   │   │   │   │   ├── Skjema.cs
    │   │       │   │   │   │   │   │   └── default.validation.json
    │   │       │   │   │   │   │   ├── options/
    │   │       │   │   │   │   │   │   └── fileSourceOptions.json
    │   │       │   │   │   │   │   └── ui/
    │   │       │   │   │   │   │       └── Task_1/
    │   │       │   │   │   │   │           ├── Settings.json
    │   │       │   │   │   │   │           └── layouts/
    │   │       │   │   │   │   │               ├── hidden_page.json
    │   │       │   │   │   │   │               └── page.json
    │   │       │   │   │   │   ├── demo-app/
    │   │       │   │   │   │   │   └── config/
    │   │       │   │   │   │   │       └── applicationmetadata.json
    │   │       │   │   │   │   ├── eformidling-app/
    │   │       │   │   │   │   │   ├── appsettings.json
    │   │       │   │   │   │   │   ├── config/
    │   │       │   │   │   │   │   │   ├── applicationmetadata.json
    │   │       │   │   │   │   │   │   ├── authorization/
    │   │       │   │   │   │   │   │   │   └── policy.xml
    │   │       │   │   │   │   │   │   ├── process/
    │   │       │   │   │   │   │   │   │   └── process.bpmn
    │   │       │   │   │   │   │   │   └── texts/
    │   │       │   │   │   │   │   │       └── resource.nb.json
    │   │       │   │   │   │   │   ├── logic/
    │   │       │   │   │   │   │   │   ├── App.cs
    │   │       │   │   │   │   │   │   └── EFormidlingMetadata.cs
    │   │       │   │   │   │   │   ├── models/
    │   │       │   │   │   │   │   │   ├── Skjema.cs
    │   │       │   │   │   │   │   │   └── Skjema.xsd
    │   │       │   │   │   │   │   └── ui/
    │   │       │   │   │   │   │       └── layouts/
    │   │       │   │   │   │   │           └── FormLayout.json
    │   │       │   │   │   │   ├── permissive-app/
    │   │       │   │   │   │   │   ├── appsettings.json
    │   │       │   │   │   │   │   ├── config/
    │   │       │   │   │   │   │   │   ├── applicationmetadata.json
    │   │       │   │   │   │   │   │   ├── authorization/
    │   │       │   │   │   │   │   │   │   └── policy.xml
    │   │       │   │   │   │   │   │   ├── process/
    │   │       │   │   │   │   │   │   │   └── process.bpmn
    │   │       │   │   │   │   │   │   └── texts/
    │   │       │   │   │   │   │   │       └── resource.nb.json
    │   │       │   │   │   │   │   ├── models/
    │   │       │   │   │   │   │   │   ├── Skjema.cs
    │   │       │   │   │   │   │   │   └── default.validation.json
    │   │       │   │   │   │   │   ├── options/
    │   │       │   │   │   │   │   │   └── fileSourceOptions.json
    │   │       │   │   │   │   │   └── ui/
    │   │       │   │   │   │   │       └── Task_1/
    │   │       │   │   │   │   │           ├── Settings.json
    │   │       │   │   │   │   │           └── layouts/
    │   │       │   │   │   │   │               └── page.json
    │   │       │   │   │   │   └── task-action/
    │   │       │   │   │   │       ├── appsettings.json
    │   │       │   │   │   │       └── config/
    │   │       │   │   │   │           ├── applicationmetadata.json
    │   │       │   │   │   │           ├── authorization/
    │   │       │   │   │   │           │   └── policy.xml
    │   │       │   │   │   │           ├── models/
    │   │       │   │   │   │           │   └── Scheme.cs
    │   │       │   │   │   │           ├── process/
    │   │       │   │   │   │           │   └── process.bpmn
    │   │       │   │   │   │           └── texts/
    │   │       │   │   │   │               └── resource.nb.json
    │   │       │   │   │   └── ttd/
    │   │       │   │   │       └── service-tasks/
    │   │       │   │   │           ├── appsettings.json
    │   │       │   │   │           ├── config/
    │   │       │   │   │           │   ├── applicationmetadata.json
    │   │       │   │   │           │   ├── authorization/
    │   │       │   │   │           │   │   └── policy.xml
    │   │       │   │   │           │   ├── process/
    │   │       │   │   │           │   │   └── process.bpmn
    │   │       │   │   │           │   └── texts/
    │   │       │   │   │           │       └── resource.nb.json
    │   │       │   │   │           ├── models/
    │   │       │   │   │           │   ├── Model.cs
    │   │       │   │   │           │   ├── Model.schema.json
    │   │       │   │   │           │   └── Model.xsd
    │   │       │   │   │           └── ui/
    │   │       │   │   │               ├── Task_1/
    │   │       │   │   │               │   ├── Settings.json
    │   │       │   │   │               │   └── layouts/
    │   │       │   │   │               │       └── Side1.json
    │   │       │   │   │               └── footer.json
    │   │       │   │   └── authorization/
    │   │       │   │       ├── claims/
    │   │       │   │       │   ├── 12345.json
    │   │       │   │       │   └── 1337.json
    │   │       │   │       ├── partylist/
    │   │       │   │       │   ├── 1001.json
    │   │       │   │       │   ├── 1002.json
    │   │       │   │       │   ├── 1003.json
    │   │       │   │       │   ├── 12345.json
    │   │       │   │       │   └── 1337.json
    │   │       │   │       ├── resources/
    │   │       │   │       │   ├── Appid_119.json
    │   │       │   │       │   ├── Appid_120.json
    │   │       │   │       │   ├── Appid_122.json
    │   │       │   │       │   ├── Appid_123.json
    │   │       │   │       │   ├── Appid_124.json
    │   │       │   │       │   ├── Appid_125.json
    │   │       │   │       │   ├── Appid_126.json
    │   │       │   │       │   ├── Appid_127.json
    │   │       │   │       │   ├── Appid_128.json
    │   │       │   │       │   ├── Appid_129.json
    │   │       │   │       │   ├── Appid_130.json
    │   │       │   │       │   ├── Appid_132.json
    │   │       │   │       │   ├── Appid_133.json
    │   │       │   │       │   ├── Appid_134.json
    │   │       │   │       │   ├── Appid_136.json
    │   │       │   │       │   ├── Appid_137.json
    │   │       │   │       │   ├── Appid_138.json
    │   │       │   │       │   ├── Appid_139.json
    │   │       │   │       │   ├── Appid_142.json
    │   │       │   │       │   ├── Appid_144.json
    │   │       │   │       │   ├── Appid_145.json
    │   │       │   │       │   ├── Appid_147.json
    │   │       │   │       │   ├── Appid_148.json
    │   │       │   │       │   ├── Appid_150.json
    │   │       │   │       │   ├── Appid_153.json
    │   │       │   │       │   ├── Appid_154.json
    │   │       │   │       │   ├── Appid_155.json
    │   │       │   │       │   ├── Appid_164.json
    │   │       │   │       │   ├── Appid_168.json
    │   │       │   │       │   ├── Appid_178.json
    │   │       │   │       │   ├── Appid_179.json
    │   │       │   │       │   ├── Appid_180.json
    │   │       │   │       │   ├── Appid_181.json
    │   │       │   │       │   ├── Appid_182.json
    │   │       │   │       │   ├── Appid_184.json
    │   │       │   │       │   ├── Appid_185.json
    │   │       │   │       │   ├── Appid_191.json
    │   │       │   │       │   ├── Appid_192.json
    │   │       │   │       │   ├── Appid_193.json
    │   │       │   │       │   ├── Appid_196.json
    │   │       │   │       │   ├── Appid_197.json
    │   │       │   │       │   ├── Appid_198.json
    │   │       │   │       │   ├── Appid_199.json
    │   │       │   │       │   ├── Appid_200.json
    │   │       │   │       │   ├── Appid_201.json
    │   │       │   │       │   ├── Appid_202.json
    │   │       │   │       │   ├── Appid_203.json
    │   │       │   │       │   ├── Appid_204.json
    │   │       │   │       │   ├── Appid_205.json
    │   │       │   │       │   ├── Appid_206.json
    │   │       │   │       │   ├── Appid_207.json
    │   │       │   │       │   ├── Appid_208.json
    │   │       │   │       │   ├── Appid_209.json
    │   │       │   │       │   ├── Appid_210.json
    │   │       │   │       │   ├── Appid_211.json
    │   │       │   │       │   ├── Appid_212.json
    │   │       │   │       │   ├── Appid_213.json
    │   │       │   │       │   ├── Appid_214.json
    │   │       │   │       │   ├── Appid_215.json
    │   │       │   │       │   ├── Appid_216.json
    │   │       │   │       │   ├── Appid_217.json
    │   │       │   │       │   ├── Appid_218.json
    │   │       │   │       │   ├── Appid_219.json
    │   │       │   │       │   ├── Appid_220.json
    │   │       │   │       │   ├── Appid_221.json
    │   │       │   │       │   ├── Appid_222.json
    │   │       │   │       │   ├── Appid_223.json
    │   │       │   │       │   ├── Appid_400.json
    │   │       │   │       │   ├── Appid_401.json
    │   │       │   │       │   ├── Appid_402.json
    │   │       │   │       │   ├── Appid_403.json
    │   │       │   │       │   ├── Appid_43.json
    │   │       │   │       │   ├── altinn_access_management.json
    │   │       │   │       │   ├── nav_tiltakAvtaleOmArbeidstrening.json
    │   │       │   │       │   └── policies/
    │   │       │   │       │       └── altinn_maskinporten_scope_delegation.xml
    │   │       │   │       └── roles/
    │   │       │   │           ├── User_1001/
    │   │       │   │           │   ├── party_500000/
    │   │       │   │           │   │   └── roles.json
    │   │       │   │           │   └── party_510001/
    │   │       │   │           │       └── roles.json
    │   │       │   │           ├── User_1002/
    │   │       │   │           │   ├── party_500000/
    │   │       │   │           │   │   └── roles.json
    │   │       │   │           │   └── party_510002/
    │   │       │   │           │       └── roles.json
    │   │       │   │           ├── User_1003/
    │   │       │   │           │   └── party_510003/
    │   │       │   │           │       └── roles.json
    │   │       │   │           ├── User_12345/
    │   │       │   │           │   └── party_512345/
    │   │       │   │           │       └── roles.json
    │   │       │   │           └── User_1337/
    │   │       │   │               ├── party_500000/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500001/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500002/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500003/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500600/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500700/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500800/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500801/
    │   │       │   │               │   └── roles.json
    │   │       │   │               ├── party_500802/
    │   │       │   │               │   └── roles.json
    │   │       │   │               └── party_501337/
    │   │       │   │                   └── roles.json
    │   │       │   ├── EFormidling/
    │   │       │   │   └── EformidlingStatusCheckEventHandlerTests.cs
    │   │       │   ├── Extensions/
    │   │       │   │   ├── HttpClientExtensions.cs
    │   │       │   │   ├── HttpClientExtensionsTests.cs
    │   │       │   │   ├── InstanceExtensionsTest.cs
    │   │       │   │   └── WebHostBuilderExtensionsTests.cs
    │   │       │   ├── Features/
    │   │       │   │   └── Bootstrap/
    │   │       │   │       └── FormBootstrapServiceTests.cs
    │   │       │   ├── Helpers/
    │   │       │   │   ├── Patch/
    │   │       │   │   │   ├── PatchServiceTests.Test_Ok.verified.txt
    │   │       │   │   │   └── PatchServiceTests.cs
    │   │       │   │   ├── RequestHandling/
    │   │       │   │   │   └── DataRestrictionValidationTests.cs
    │   │       │   │   └── StartupHelperTests.cs
    │   │       │   ├── Mappers/
    │   │       │   │   └── SimpleInstanceMapperTests.cs
    │   │       │   ├── Maskinporten/
    │   │       │   │   └── MaskinportenClientIntegrationTest.cs
    │   │       │   ├── Middleware/
    │   │       │   │   ├── SecurityHeadersMiddlewareTests.cs
    │   │       │   │   ├── TelemetryEnrichingMiddlewareTests.Should_Always_Be_A_Root_Trace.verified.txt
    │   │       │   │   ├── TelemetryEnrichingMiddlewareTests.Should_Always_Be_A_Root_Trace_Unless_Pdf.verified.txt
    │   │       │   │   ├── TelemetryEnrichingMiddlewareTests.Should_Have_Root_AspNetCore_Trace_Org.verified.txt
    │   │       │   │   ├── TelemetryEnrichingMiddlewareTests.Should_Have_Root_AspNetCore_Trace_User.verified.txt
    │   │       │   │   └── TelemetryEnrichingMiddlewareTests.cs
    │   │       │   ├── MockHttpMessageHandler.cs
    │   │       │   ├── Mocks/
    │   │       │   │   ├── AppConfigurationCacheMock.cs
    │   │       │   │   ├── AppMetadataMock.cs
    │   │       │   │   ├── AppModelMock.cs
    │   │       │   │   ├── Authentication/
    │   │       │   │   │   ├── ConfigurationManagerStub.cs
    │   │       │   │   │   └── JwtCookiePostConfigureOptionsStub.cs
    │   │       │   │   ├── AuthorizationMock.cs
    │   │       │   │   ├── DataClientMock.cs
    │   │       │   │   ├── Event/
    │   │       │   │   │   ├── DummyFailureEventHandler.cs
    │   │       │   │   │   ├── DummySuccessEventHandler.cs
    │   │       │   │   │   ├── EventSecretCodeProviderStub.cs
    │   │       │   │   │   ├── EventsClientMock.cs
    │   │       │   │   │   └── InstanceEventClientMock.cs
    │   │       │   │   ├── InstanceClientMockSi.cs
    │   │       │   │   ├── InstanceLockerMock.cs
    │   │       │   │   ├── PepWithPDPAuthorizationMockSI.cs
    │   │       │   │   ├── ProcessClientMock.cs
    │   │       │   │   ├── RegisterClientMock.cs
    │   │       │   │   └── SignClientMock.cs
    │   │       │   ├── Models/
    │   │       │   │   ├── InstanceFileScanResultTests.cs
    │   │       │   │   └── XacmlResourceAttributes.cs
    │   │       │   ├── ModuleInitializer.cs
    │   │       │   ├── OpenApi/
    │   │       │   │   ├── OpenApiSpecChangeDetection.SaveCustomOpenApiSpec.verified.json
    │   │       │   │   ├── OpenApiSpecChangeDetection.SaveJsonSwagger.verified.json
    │   │       │   │   └── OpenApiSpecChangeDetection.cs
    │   │       │   ├── Process/
    │   │       │   │   └── ServiceTasks/
    │   │       │   │       ├── EFormidling/
    │   │       │   │       │   └── EFormidlingServiceTaskTests.cs
    │   │       │   │       └── Pdf/
    │   │       │   │           └── PdfServiceTaskTests.cs
    │   │       │   ├── Program.cs
    │   │       │   ├── PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt
    │   │       │   ├── PublicApiTests.cs
    │   │       │   ├── Telemetry/
    │   │       │   │   └── TelemetryConfigurationTests.cs
    │   │       │   ├── TestStubs/
    │   │       │   │   └── SwaggerIncludeXmlCommentsTestDouble.cs
    │   │       │   └── Utils/
    │   │       │       ├── JsonUtils.cs
    │   │       │       └── ReflectionUtils.cs
    │   │       ├── Altinn.App.Clients.Fiks.Tests/
    │   │       │   ├── Altinn.App.Clients.Fiks.Tests.csproj
    │   │       │   ├── AutoAdvancingFakeTime.cs
    │   │       │   ├── Extensions/
    │   │       │   │   ├── .Verify/
    │   │       │   │   │   ├── ArkivmeldingExtensionsTests.SerializeXmlBytes_SerializesCorrectly.verified.txt
    │   │       │   │   │   └── ArkivmeldingExtensionsTests.ToPayload_ReturnsCorrectPayload.verified.txt
    │   │       │   │   ├── ArkivmeldingExtensionsTests.cs
    │   │       │   │   ├── DataElementsExtensionsTests.cs
    │   │       │   │   ├── InstanceExtensionsTests.cs
    │   │       │   │   ├── ListExtensionsTests.cs
    │   │       │   │   ├── ServiceCollectionExtensionsTests.cs
    │   │       │   │   ├── StreamExtensionsTest.cs
    │   │       │   │   ├── StringExtensionsTests.cs
    │   │       │   │   └── TypeExtensionsTest.cs
    │   │       │   ├── FiksArkiv/
    │   │       │   │   ├── .Verify/
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerClassification_ReturnsExpectedValue_ForKnownAuthenticationTypes.Org.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerClassification_ReturnsExpectedValue_ForKnownAuthenticationTypes.ServiceOwner.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerClassification_ReturnsExpectedValue_ForKnownAuthenticationTypes.SystemUser.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerClassification_ReturnsExpectedValue_ForKnownAuthenticationTypes.User.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.1.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.10.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.11.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.2.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.3.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.4.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.5.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.6.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.7.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.8.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetInstanceOwnerParty_ReturnsExpectedValue_WhenPartyIsFound.9.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetRecipientParty_ReturnsExpectedValue.1.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetRecipientParty_ReturnsExpectedValue.2.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.1.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.2.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.3.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.4.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.5.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.6.verified.txt
    │   │       │   │   │   ├── FiksArkivConfigResolverTest.GetServiceOwnerParty_ReturnsExpectedValue.7.verified.txt
    │   │       │   │   │   ├── FiksArkivDefaultPayloadGeneratorTest.GeneratePayload_GeneratesCorrectPayload.1.verified.txt
    │   │       │   │   │   ├── FiksArkivDefaultPayloadGeneratorTest.GeneratePayload_GeneratesCorrectPayload.2.verified.txt
    │   │       │   │   │   ├── FiksArkivDefaultPayloadGeneratorTest.GeneratePayload_GeneratesCorrectPayload.3.verified.txt
    │   │       │   │   │   └── FiksArkivDefaultPayloadGeneratorTest.GeneratePayload_GeneratesCorrectPayload.4.verified.txt
    │   │       │   │   ├── FiksArkivConfigResolverTest.cs
    │   │       │   │   ├── FiksArkivConfigValidationServiceTest.cs
    │   │       │   │   ├── FiksArkivDefaultPayloadGeneratorTest.cs
    │   │       │   │   ├── FiksArkivDefaultResponseHandlerTest.cs
    │   │       │   │   ├── FiksArkivHostTest.cs
    │   │       │   │   ├── FiksArkivInstanceClientTest.cs
    │   │       │   │   ├── FiksArkivServiceTaskTest.cs
    │   │       │   │   └── Models/
    │   │       │   │       ├── FiksArkivDocumentsTest.cs
    │   │       │   │       └── FiksArkivSettingsTest.cs
    │   │       │   ├── FiksIO/
    │   │       │   │   ├── .Verify/
    │   │       │   │   │   ├── FiksIOClientTest.InitialiseFiksIOClient_CallsCreateClientWithCorrectPayload_Custom.1.verified.txt
    │   │       │   │   │   ├── FiksIOClientTest.InitialiseFiksIOClient_CallsCreateClientWithCorrectPayload_Custom.2.verified.txt
    │   │       │   │   │   ├── FiksIOClientTest.InitialiseFiksIOClient_CallsCreateClientWithCorrectPayload_Custom.3.verified.txt
    │   │       │   │   │   ├── FiksIOClientTest.InitialiseFiksIOClient_CallsCreateClientWithCorrectPayload_Custom.verified.txt
    │   │       │   │   │   ├── FiksIOClientTest.InitialiseFiksIOClient_CallsCreateClientWithCorrectPayload_Default.AnythingElse.verified.txt
    │   │       │   │   │   └── FiksIOClientTest.InitialiseFiksIOClient_CallsCreateClientWithCorrectPayload_Default.Production.verified.txt
    │   │       │   │   ├── FiksIOClientTest.cs
    │   │       │   │   ├── FiksIOMaskinportenClientTest.cs
    │   │       │   │   └── Models/
    │   │       │   │       ├── FiksIOMessageResponderTest.cs
    │   │       │   │       └── FiksIOMessageResponseTest.cs
    │   │       │   ├── ModuleInitializer.cs
    │   │       │   ├── PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt
    │   │       │   ├── PublicApiTests.cs
    │   │       │   ├── TestFixture.cs
    │   │       │   ├── TestHelpers.cs
    │   │       │   └── XsdValidator.cs
    │   │       ├── Altinn.App.Core.Tests/
    │   │       │   ├── Altinn.App.Core.Tests.csproj
    │   │       │   ├── Configuration/
    │   │       │   │   └── GeneralSettingsTests.cs
    │   │       │   ├── Constants/
    │   │       │   │   └── AltinnEnvironmentsTest.cs
    │   │       │   ├── Data/
    │   │       │   │   └── SkjemaWithNamespace.cs
    │   │       │   ├── DataLists/
    │   │       │   │   ├── DataListsFactoryTest.cs
    │   │       │   │   ├── InstanceDataListsFactoryTest.cs
    │   │       │   │   ├── NullDataListProviderTest.cs
    │   │       │   │   └── NullInstanceDataListProviderTest.cs
    │   │       │   ├── Eformidling/
    │   │       │   │   └── Implementation/
    │   │       │   │       ├── DefaultEFormidlingServiceTests.cs
    │   │       │   │       └── EFormidlingConfigurationProviderTests.cs
    │   │       │   ├── Extensions/
    │   │       │   │   ├── ConfigurationBuilderExtensionsTest.cs
    │   │       │   │   ├── DictionaryExtensionsTests.cs
    │   │       │   │   ├── HttpClientExtensionTest.cs
    │   │       │   │   ├── InstanceEventExtensionsTests.cs
    │   │       │   │   ├── MultipartContentExtensionsTests.cs
    │   │       │   │   ├── NationalIdentityNumberExtensionsTest.cs
    │   │       │   │   ├── OrganisationNumberExtensionsTest.cs
    │   │       │   │   ├── ProcessStateExtensionTests.cs
    │   │       │   │   ├── ServiceCollectionTests.cs
    │   │       │   │   └── StringExtensionTests.cs
    │   │       │   ├── Features/
    │   │       │   │   ├── Action/
    │   │       │   │   │   ├── PaymentUserActionTests.cs
    │   │       │   │   │   ├── SigningUserActionTests.cs
    │   │       │   │   │   ├── TestData/
    │   │       │   │   │   │   ├── appmetadata.json
    │   │       │   │   │   │   ├── payment-task-process.bpmn
    │   │       │   │   │   │   ├── signature-missing-signee-userid.json
    │   │       │   │   │   │   ├── signature-missing-signee.json
    │   │       │   │   │   │   ├── signature-signee-userid-null.json
    │   │       │   │   │   │   ├── signature.json
    │   │       │   │   │   │   ├── signing-task-missing-correspondence.bpmn
    │   │       │   │   │   │   ├── signing-task-process-empty-datatypes-to-sign.bpmn
    │   │       │   │   │   │   ├── signing-task-process-missing-config.bpmn
    │   │       │   │   │   │   └── signing-task-process.bpmn
    │   │       │   │   │   ├── UniqueSignatureAuthorizerTests.cs
    │   │       │   │   │   └── UserActionServiceTests.cs
    │   │       │   │   ├── Auth/
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_ServiceOwner_Token_When_App_Metadata_Org_Differs_service_owner_mismatched_app_org.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=Org_Vwzj.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=Org_yeqB.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=SelfIdentifiedUser_ffv+.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=ServiceOwner_AmaP.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=ServiceOwner_IrMn.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=ServiceOwner_eWOI.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=SystemUser_8nGc.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=SystemUser_EvgU.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=SystemUser_Gxg0.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=SystemUser_U6aZ.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=Unknown_RecL.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=Unknown_qbyO.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=User_T1OG.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=User_csSy.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=User_fOrK.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.Can_Parse_Real_Tokens_type=User_sUK3.verified.txt
    │   │       │   │   │   ├── AuthenticatedTests.cs
    │   │       │   │   │   ├── AuthenticationInfoTests.cs
    │   │       │   │   │   └── ScopesTests.cs
    │   │       │   │   ├── AuthenticationMethodTest.cs
    │   │       │   │   ├── Bootstrap/
    │   │       │   │   │   └── LayoutAnalysisServiceTests.cs
    │   │       │   │   ├── Correspondence/
    │   │       │   │   │   ├── Builder/
    │   │       │   │   │   │   ├── BuilderUtilsTests.cs
    │   │       │   │   │   │   ├── CorrespondenceBuilderTests.cs
    │   │       │   │   │   │   ├── CorrespondenceNotificationOverrideBuilderTests.cs
    │   │       │   │   │   │   └── CorrespondenceNotificationOverrideBuilderTests_Obsolete.cs
    │   │       │   │   │   ├── CorrespondenceClientMappingTests.cs
    │   │       │   │   │   ├── CorrespondenceClientTests.cs
    │   │       │   │   │   ├── Models/
    │   │       │   │   │   │   ├── CorrespondenceRequestTests.cs
    │   │       │   │   │   │   └── CorrespondenceResponseTests.cs
    │   │       │   │   │   └── TestHelpers.cs
    │   │       │   │   ├── DataProcessing/
    │   │       │   │   │   ├── GenericDataProcessorTests.cs
    │   │       │   │   │   └── NullInstantiationProcessTests.cs
    │   │       │   │   ├── ExternalApi/
    │   │       │   │   │   ├── ExternalApiFactoryTests.cs
    │   │       │   │   │   └── ExternalApiServiceTest.cs
    │   │       │   │   ├── FormDataReaderTests.cs
    │   │       │   │   ├── Maskinporten/
    │   │       │   │   │   ├── Delegates/
    │   │       │   │   │   │   └── MaskinportenDelegatingHandlerTest.cs
    │   │       │   │   │   ├── MaskinportenClientTest.cs
    │   │       │   │   │   ├── Models/
    │   │       │   │   │   │   ├── MaskinportenSettingsTest.cs
    │   │       │   │   │   │   └── MaskinportenTokenResponseTest.cs
    │   │       │   │   │   └── TestHelpers.cs
    │   │       │   │   ├── Notifications/
    │   │       │   │   │   ├── Cancellation/
    │   │       │   │   │   │   └── CancelOnProcessEndTests.cs
    │   │       │   │   │   ├── Email/
    │   │       │   │   │   │   ├── EmailNotificationClientTests.Order_VerifyHttpCall.verified.txt
    │   │       │   │   │   │   └── EmailNotificationClientTests.cs
    │   │       │   │   │   ├── NotificationServiceTests.cs
    │   │       │   │   │   ├── Order/
    │   │       │   │   │   │   ├── NotificationCancelClientTests.Cancel_VerifyHttpCall.verified.txt
    │   │       │   │   │   │   ├── NotificationClientTests.cs
    │   │       │   │   │   │   └── NotificationRecipientSerializationTests.cs
    │   │       │   │   │   ├── SecretProvider/
    │   │       │   │   │   │   ├── NotificationConditionCodeValidatorTests.cs
    │   │       │   │   │   │   ├── NotificationConditionSecretProviderTests.cs
    │   │       │   │   │   │   ├── NotificationConditionTokenGeneratorTests.GenerateToken_RecordsTelemetry.verified.txt
    │   │       │   │   │   │   └── NotificationConditionTokenGeneratorTests.cs
    │   │       │   │   │   ├── Sms/
    │   │       │   │   │   │   ├── SmsNotificationClientTests.Order_VerifyHttpCall.verified.txt
    │   │       │   │   │   │   └── SmsNotificationClientTests.cs
    │   │       │   │   │   └── Texts/
    │   │       │   │   │       └── NotificationTextsTests.cs
    │   │       │   │   ├── Options/
    │   │       │   │   │   ├── Altinn2Provider/
    │   │       │   │   │   │   ├── Altinn2MetadataApiClientHttpMessageHandlerMoq.cs
    │   │       │   │   │   │   ├── Altinn2OptionsCacheTests.cs
    │   │       │   │   │   │   └── Altinn2OptionsTests.cs
    │   │       │   │   │   ├── Altinn3LibraryProvider/
    │   │       │   │   │   │   ├── Altinn3LibraryCodeListClientMessageHandlerMock.cs
    │   │       │   │   │   │   ├── Altinn3LibraryCodeListClientTests.cs
    │   │       │   │   │   │   ├── Altinn3LibraryCodeListServiceTestData.cs
    │   │       │   │   │   │   └── Altinn3LibraryCodeListServiceTests.cs
    │   │       │   │   │   ├── AppOptionsFactoryTests.cs
    │   │       │   │   │   ├── InstanceAppOptionsFactoryTests.cs
    │   │       │   │   │   └── JoinedAppOptionsTests.cs
    │   │       │   │   ├── Payment/
    │   │       │   │   │   ├── AltinnPaymentConfigurationTests.cs
    │   │       │   │   │   ├── PaymentServiceTests.cs
    │   │       │   │   │   └── Providers/
    │   │       │   │   │       └── Nets/
    │   │       │   │   │           ├── HttpApiResultTests.cs
    │   │       │   │   │           ├── NetsMapperTests.cs
    │   │       │   │   │           └── NetsPaymentProcessorTests.cs
    │   │       │   │   ├── Signing/
    │   │       │   │   │   ├── Helpers/
    │   │       │   │   │   │   └── SigningNotificationHelpers.cs
    │   │       │   │   │   ├── SignDocumentManagerTests.cs
    │   │       │   │   │   ├── SigneeContextsManagerTests.cs
    │   │       │   │   │   ├── SigningCallToActionServiceTests.cs
    │   │       │   │   │   ├── SigningDelegationServiceTests.cs
    │   │       │   │   │   ├── SigningReceiptServiceTests.cs
    │   │       │   │   │   └── SigningServiceTests.cs
    │   │       │   │   ├── Telemetry/
    │   │       │   │   │   └── TelemetryDITests.cs
    │   │       │   │   └── Validators/
    │   │       │   │       ├── Default/
    │   │       │   │       │   ├── DataAnnotationValidatorTests.cs
    │   │       │   │       │   ├── DefaultTaskValidatorTests.cs
    │   │       │   │       │   ├── ExpressionValidatorTests.cs
    │   │       │   │       │   ├── LegacyIValidationFormDataTests.cs
    │   │       │   │       │   ├── SignatureHashValidatorTests.cs
    │   │       │   │       │   └── SigningTaskValidatorTests.cs
    │   │       │   │       ├── GenericValidatorTests.cs
    │   │       │   │       ├── LegacyValidationServiceTests/
    │   │       │   │       │   ├── ValidationServiceOldTests.cs
    │   │       │   │       │   └── ValidationServiceTests.cs
    │   │       │   │       ├── NullInstantiationValidatorTests.cs
    │   │       │   │       ├── ValidationServiceTests.GenericFormDataValidator_serviceModelIsString_CallsValidatorFunctionForIncremental.verified.txt
    │   │       │   │       ├── ValidationServiceTests.GenericFormDataValidator_serviceModelIsString_CallsValidatorFunctionForTask.verified.txt
    │   │       │   │       ├── ValidationServiceTests.ValidateIncrementalFormData_WithNoData_ShouldReturnNoIssues.verified.txt
    │   │       │   │       ├── ValidationServiceTests.ValidateInstanceAtTask_WithIgnoredValidators_ShouldRunOnlyNonIgnoredValidators.verified.txt
    │   │       │   │       ├── ValidationServiceTests.ValidateInstanceAtTask_WithNoData_ShouldReturnNoIssues.verified.txt
    │   │       │   │       ├── ValidationServiceTests.cs
    │   │       │   │       └── expression-validation-tests/
    │   │       │   │           ├── .editorconfig
    │   │       │   │           ├── backend/
    │   │       │   │           │   ├── hidden-field.json
    │   │       │   │           │   ├── hidden-page.json
    │   │       │   │           │   ├── nested-repeating-hidden-row.json
    │   │       │   │           │   ├── nested-repeating-hidden.json
    │   │       │   │           │   ├── repeating-hidden-row.json
    │   │       │   │           │   └── repeating-hidden.json
    │   │       │   │           └── shared/
    │   │       │   │               ├── component-lookup-hidden.json
    │   │       │   │               ├── many-errors-direct.json
    │   │       │   │               ├── many-errors.json
    │   │       │   │               ├── nested-repeating.json
    │   │       │   │               ├── override.json
    │   │       │   │               ├── repeating-direct.json
    │   │       │   │               ├── repeating.json
    │   │       │   │               ├── single-field-equals.json
    │   │       │   │               └── warning.json
    │   │       │   ├── Helpers/
    │   │       │   │   ├── AllowedContributorsHelperTests.cs
    │   │       │   │   ├── InstantiationHelperTests.cs
    │   │       │   │   ├── JsonHelperTests.cs
    │   │       │   │   ├── JsonSerializerIgnorePrefixTests.cs
    │   │       │   │   ├── LinqExpressionHelpersTests.cs
    │   │       │   │   ├── LogSanitizerTests.cs
    │   │       │   │   ├── MemoryAsStreamTests.cs
    │   │       │   │   ├── MimeTypeMapTests.cs
    │   │       │   │   ├── MultiDecisionHelper/
    │   │       │   │   │   ├── MultiDecisionHelperTests.CreateMultiDecisionRequest_generates_multidecisionrequest_with_all_actions_current_task_elemtnId.verified.txt
    │   │       │   │   │   ├── MultiDecisionHelperTests.CreateMultiDecisionRequest_generates_multidecisionrequest_with_all_actions_endevent.verified.txt
    │   │       │   │   │   ├── MultiDecisionHelperTests.CreateMultiDecisionRequest_generates_multidecisionrequest_with_all_actions_instanceId_is_GUID_only.verified.txt
    │   │       │   │   │   └── MultiDecisionHelperTests.cs
    │   │       │   │   ├── ObjectUtilsTests.cs
    │   │       │   │   ├── ObjectUtils_XmlSerializationTests.cs
    │   │       │   │   ├── PathHelperTests.cs
    │   │       │   │   ├── PlatformHttpResponseSnapshotExceptionTests.cs
    │   │       │   │   ├── ProcessHelperTests.cs
    │   │       │   │   ├── RemoveBomExtentionsTests.cs
    │   │       │   │   ├── SelfLinkHelperTests.cs
    │   │       │   │   ├── ShadowFieldsConverterTests.cs
    │   │       │   │   ├── TestData/
    │   │       │   │   │   ├── MultiDecisionHelper/
    │   │       │   │   │   │   ├── all-actions-allowed.json
    │   │       │   │   │   │   └── one-action-denied.json
    │   │       │   │   │   └── simple-gateway.bpmn
    │   │       │   │   ├── UrlHelperTests.cs
    │   │       │   │   ├── UserHelperTest.cs
    │   │       │   │   └── Utf8JsonReaderExtensionsTests.cs
    │   │       │   ├── Implementation/
    │   │       │   │   ├── AppResourcesSITests.cs
    │   │       │   │   ├── EventsClientTest.AddEvent_RegisterEventWithInstanceOwnerOrganisation_CloudEventInRequestContainOrganisationNumber.verified.txt
    │   │       │   │   ├── EventsClientTest.cs
    │   │       │   │   ├── InstanceClientTests.AddCompleteConfirmation_SuccessfulCallToStorage.verified.txt
    │   │       │   │   ├── InstanceClientTests.cs
    │   │       │   │   ├── NullPdfFormatterTests.cs
    │   │       │   │   ├── PersonClientTests.cs
    │   │       │   │   ├── PrefillSITest.cs
    │   │       │   │   ├── TestData/
    │   │       │   │   │   ├── AppDataModel/
    │   │       │   │   │   │   └── ModelWithShadowFields.cs
    │   │       │   │   │   ├── AppMetadata/
    │   │       │   │   │   │   ├── default.applicationmetadata.json
    │   │       │   │   │   │   ├── invalid.applicationmetadata.json
    │   │       │   │   │   │   └── no-on-entry.applicationmetadata.json
    │   │       │   │   │   ├── AppPolicy/
    │   │       │   │   │   │   └── policy.xml
    │   │       │   │   │   └── AppProcess/
    │   │       │   │   │       └── process.bpmn
    │   │       │   │   ├── TestResources/
    │   │       │   │   │   └── DummyModel.cs
    │   │       │   │   └── TextClientTest.cs
    │   │       │   ├── Infrastructure/
    │   │       │   │   └── Clients/
    │   │       │   │       ├── AccessManagement/
    │   │       │   │       │   ├── AccessManagementClientTests.DelegateRights_VerifyHttpCall.verified.txt
    │   │       │   │       │   ├── AccessManagementClientTests.RevokeRights_VerifyHttpCall.verified.txt
    │   │       │   │       │   └── AccessManagementClientTests.cs
    │   │       │   │       ├── Authorization/
    │   │       │   │       │   ├── AuthorizationClientTests.AuthorizeActions_returns_dictionary_with_one_action_denied.verified.txt
    │   │       │   │       │   ├── AuthorizationClientTests.cs
    │   │       │   │       │   └── TestData/
    │   │       │   │       │       └── one-action-denied.json
    │   │       │   │       ├── EventsSubscriptionClientTests.cs
    │   │       │   │       ├── KeyVault/
    │   │       │   │       │   └── SecretsLocalClientTests.cs
    │   │       │   │       ├── Profile/
    │   │       │   │       │   ├── ProfileClientTests.Returns_Test_Profile.verified.txt
    │   │       │   │       │   └── ProfileClientTests.cs
    │   │       │   │       ├── Register/
    │   │       │   │       │   └── AltinnPartyClientTest.cs
    │   │       │   │       └── Storage/
    │   │       │   │           ├── DataClientTests.InsertBinaryData_MethodProduceValidPlatformRequest_AltinnToken.verified.txt
    │   │       │   │           ├── DataClientTests.InsertBinaryData_MethodProduceValidPlatformRequest_CustomToken.verified.txt
    │   │       │   │           ├── DataClientTests.InsertBinaryData_MethodProduceValidPlatformRequest_DefaultAuth.verified.txt
    │   │       │   │           ├── DataClientTests.InsertBinaryData_MethodProduceValidPlatformRequest_UserToken.verified.txt
    │   │       │   │           ├── DataClientTests.cs
    │   │       │   │           ├── DataClientTestsXmlJson.cs
    │   │       │   │           ├── SignClientTests.cs
    │   │       │   │           └── TestData/
    │   │       │   │               └── ExampleModel.cs
    │   │       │   ├── Internal/
    │   │       │   │   ├── AccessManagement/
    │   │       │   │   │   ├── DelegationRequestTests.cs
    │   │       │   │   │   └── UrlHelperTests.cs
    │   │       │   │   ├── AltinnCdn/
    │   │       │   │   │   └── AltinnCdnClientTest.cs
    │   │       │   │   ├── App/
    │   │       │   │   │   ├── AppMetadataTest.GetApplicationMetadata_deserialize_serialize_unmapped_properties.verified.txt
    │   │       │   │   │   ├── AppMetadataTest.GetApplicationMetadata_desrializes_file_from_disk.verified.txt
    │   │       │   │   │   ├── AppMetadataTest.cs
    │   │       │   │   │   ├── FrontendFeaturesTest.cs
    │   │       │   │   │   └── TestData/
    │   │       │   │   │       ├── AppMetadata/
    │   │       │   │   │       │   ├── default.applicationmetadata.json
    │   │       │   │   │       │   ├── eformid.applicationmetadata.json
    │   │       │   │   │       │   ├── invalid-int.applicationmetadata.json
    │   │       │   │   │       │   ├── invalid.applicationmetadata.json
    │   │       │   │   │       │   ├── logo-org-source.applicationmetadata.json
    │   │       │   │   │       │   ├── onentry-legacy-selectoptions.applicationmetadata.json
    │   │       │   │   │       │   ├── onentry-new-selectoptions.applicationmetadata.json
    │   │       │   │   │       │   ├── onentry-prefer-new-selectoptions.applicationmetadata.json
    │   │       │   │   │       │   └── unmapped-properties.applicationmetadata.json
    │   │       │   │   │       ├── AppPolicy/
    │   │       │   │   │       │   └── policy.xml
    │   │       │   │   │       └── AppProcess/
    │   │       │   │   │           └── process.bpmn
    │   │       │   │   ├── Auth/
    │   │       │   │   │   ├── AuthenticationTokenResolverTest.cs
    │   │       │   │   │   ├── AuthorizationServiceTests.GetPartyList_returns_party_list_from_AuthorizationClient.verified.txt
    │   │       │   │   │   └── AuthorizationServiceTests.cs
    │   │       │   │   ├── Data/
    │   │       │   │   │   ├── DataElementAccessCheckerTest.cs
    │   │       │   │   │   ├── DataServiceTests.cs
    │   │       │   │   │   └── DataTypeComparerTest.cs
    │   │       │   │   ├── Events/
    │   │       │   │   │   ├── EventHandlerResolverTests.cs
    │   │       │   │   │   └── UnhandledEventHandlerTests.cs
    │   │       │   │   ├── InstanceLocking/
    │   │       │   │   │   ├── InstanceLockTests.CustomTtl_UsedInStorageApiCall.verified.txt
    │   │       │   │   │   ├── InstanceLockTests.EmptyJsonResponseBody_ThrowsPlatformHttpException.verified.txt
    │   │       │   │   │   ├── InstanceLockTests.InvalidInstanceId_ThrowsInvalidOperationException.verified.txt
    │   │       │   │   │   ├── InstanceLockTests.NullResponseBody_ThrowsPlatformHttpException.verified.txt
    │   │       │   │   │   ├── InstanceLockTests.StorageApiError_ThrowsCorrectPlatformHttpException_storageStatusCode=Conflict.verified.txt
    │   │       │   │   │   ├── InstanceLockTests.StorageApiError_ThrowsCorrectPlatformHttpException_storageStatusCode=InternalServerError.verified.txt
    │   │       │   │   │   ├── InstanceLockTests.StorageApiError_ThrowsCorrectPlatformHttpException_storageStatusCode=NotFound.verified.txt
    │   │       │   │   │   └── InstanceLockTests.cs
    │   │       │   │   ├── Linq/
    │   │       │   │   │   └── ExtensionsTest.cs
    │   │       │   │   ├── LocaltestValidationTests.cs
    │   │       │   │   ├── Pdf/
    │   │       │   │   │   ├── PdfServiceTests.GenerateAndStorePdf.verified.txt
    │   │       │   │   │   ├── PdfServiceTests.GenerateAndStorePdf_WithSubformParameters_ShouldCallPdfServiceWithSubformUrl.verified.txt
    │   │       │   │   │   └── PdfServiceTests.cs
    │   │       │   │   ├── Process/
    │   │       │   │   │   ├── Authorization/
    │   │       │   │   │   │   ├── TestData/
    │   │       │   │   │   │   │   └── UserActionAuthorizerStub.cs
    │   │       │   │   │   │   └── UserActionAuthorizerServiceCollectionExtensionTests.cs
    │   │       │   │   │   ├── Elements/
    │   │       │   │   │   │   ├── AltinnExtensionProperties/
    │   │       │   │   │   │   │   └── AltinnEFormidlingConfigurationTests.cs
    │   │       │   │   │   │   └── AppProcessStateTests.cs
    │   │       │   │   │   ├── EventHandlers/
    │   │       │   │   │   │   └── ProcessTask/
    │   │       │   │   │   │       ├── AbandonTaskEventHandlerTests.cs
    │   │       │   │   │   │       ├── EndTaskEventHandlerTests.cs
    │   │       │   │   │   │       └── StartTaskEventHandlerTests.cs
    │   │       │   │   │   ├── ExpressionsExclusiveGatewayTests.cs
    │   │       │   │   │   ├── ProcessEngineAuthorizerTests.cs
    │   │       │   │   │   ├── ProcessEngineTest.StartProcess_starts_process_and_moves_to_first_task.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.StartProcess_starts_process_and_moves_to_first_task_SelfIdentifiedUser.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.StartProcess_starts_process_and_moves_to_first_task_ServiceOwner.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.StartProcess_starts_process_and_moves_to_first_task_SystemUser.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.StartProcess_starts_process_and_moves_to_first_task_User.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.Telemetry.IProcessEnd_not_registered.json.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.Telemetry.IProcessEnd_registered.json.verified.txt
    │   │       │   │   │   ├── ProcessEngineTest.cs
    │   │       │   │   │   ├── ProcessEventHandlingTests.cs
    │   │       │   │   │   ├── ProcessNavigatorTests.cs
    │   │       │   │   │   ├── ProcessReaderExtensionsTests.cs
    │   │       │   │   │   ├── ProcessReaderTests.IsStartEvent_returns_true_when_element_is_StartEvent.verified.txt
    │   │       │   │   │   ├── ProcessReaderTests.cs
    │   │       │   │   │   ├── ProcessTasks/
    │   │       │   │   │   │   ├── Common/
    │   │       │   │   │   │   │   ├── ProcessTaskDataLockerTests.cs
    │   │       │   │   │   │   │   └── ProcessTaskFinalizerTests.cs
    │   │       │   │   │   │   ├── PaymentProcessTaskTests.cs
    │   │       │   │   │   │   └── SigningProcessTaskTests.cs
    │   │       │   │   │   ├── ServiceTasks/
    │   │       │   │   │   │   ├── EFormidlingServiceTaskTests.cs
    │   │       │   │   │   │   ├── Legacy/
    │   │       │   │   │   │   │   ├── EformidlingServiceTaskLegacyTests.cs
    │   │       │   │   │   │   │   ├── PdfServiceTaskLegacyTests.cs
    │   │       │   │   │   │   │   └── TestData/
    │   │       │   │   │   │   │       └── DummyDataType.cs
    │   │       │   │   │   │   ├── PdfServiceTaskTests.cs
    │   │       │   │   │   │   └── SubformPdfServiceTaskTests.cs
    │   │       │   │   │   ├── StubGatewayFilters/
    │   │       │   │   │   │   └── DataValuesFilter.cs
    │   │       │   │   │   ├── TestData/
    │   │       │   │   │   │   ├── DummyModel.cs
    │   │       │   │   │   │   ├── ProcessEngineTest/
    │   │       │   │   │   │   │   └── config/
    │   │       │   │   │   │   │       └── process/
    │   │       │   │   │   │   │           └── process.bpmn
    │   │       │   │   │   │   ├── not-bpmn.bpmn
    │   │       │   │   │   │   ├── simple-gateway-default.bpmn
    │   │       │   │   │   │   ├── simple-gateway-signature-config.bpmn
    │   │       │   │   │   │   ├── simple-gateway-with-join-gateway.bpmn
    │   │       │   │   │   │   ├── simple-gateway.bpmn
    │   │       │   │   │   │   ├── simple-linear-both.bpmn
    │   │       │   │   │   │   ├── simple-linear-new.bpmn
    │   │       │   │   │   │   ├── simple-linear.bpmn
    │   │       │   │   │   │   ├── simple-no-end.bpmn
    │   │       │   │   │   │   └── with-double-sign.bpmn
    │   │       │   │   │   └── TestUtils/
    │   │       │   │   │       └── ProcessTestUtils.cs
    │   │       │   │   └── Texts/
    │   │       │   │       ├── TranslationServiceInstanceTests.cs
    │   │       │   │       └── TranslationServiceTests.cs
    │   │       │   ├── LayoutExpressions/
    │   │       │   │   ├── CommonTests/
    │   │       │   │   │   ├── .editorconfig
    │   │       │   │   │   ├── ContextListRoot.cs
    │   │       │   │   │   ├── ExpressionTestCaseRoot.cs
    │   │       │   │   │   ├── TestBackendExclusiveFunctions.cs
    │   │       │   │   │   ├── TestContextList.cs
    │   │       │   │   │   ├── TestFunctions.cs
    │   │       │   │   │   ├── TestInvalid.cs
    │   │       │   │   │   ├── exclusive-tests/
    │   │       │   │   │   │   └── functions/
    │   │       │   │   │   │       └── gatewayAction/
    │   │       │   │   │   │           ├── no-action-defined-is-null.json
    │   │       │   │   │   │           ├── simple-lookup-equals.json
    │   │       │   │   │   │           └── simple-lookup.json
    │   │       │   │   │   ├── shared-tests/
    │   │       │   │   │   │   ├── README.md
    │   │       │   │   │   │   ├── context-lists/
    │   │       │   │   │   │   │   ├── groups/
    │   │       │   │   │   │   │   │   ├── noData.json
    │   │       │   │   │   │   │   │   ├── oneRow.json
    │   │       │   │   │   │   │   │   ├── rows-before-after.json
    │   │       │   │   │   │   │   │   └── twoRows.json
    │   │       │   │   │   │   │   ├── nonRepeatingGroups/
    │   │       │   │   │   │   │   │   ├── accordion-in-group.json
    │   │       │   │   │   │   │   │   ├── accordion.json
    │   │       │   │   │   │   │   │   ├── cards-in-group.json
    │   │       │   │   │   │   │   │   ├── cards.json
    │   │       │   │   │   │   │   │   ├── grid-in-group.json
    │   │       │   │   │   │   │   │   ├── grid.json
    │   │       │   │   │   │   │   │   ├── simple.json
    │   │       │   │   │   │   │   │   ├── tabs-in-group.json
    │   │       │   │   │   │   │   │   └── tabs.json
    │   │       │   │   │   │   │   ├── recursiveGroups/
    │   │       │   │   │   │   │   │   ├── recursiveNoData.json
    │   │       │   │   │   │   │   │   ├── recursiveOneRow.json
    │   │       │   │   │   │   │   │   ├── recursiveTwoRowsInner.json
    │   │       │   │   │   │   │   │   └── recursiveTwoRowsOuter.json
    │   │       │   │   │   │   │   └── simple/
    │   │       │   │   │   │   │       ├── simple.json
    │   │       │   │   │   │   │       └── twoPages.json
    │   │       │   │   │   │   ├── functions/
    │   │       │   │   │   │   │   ├── and/
    │   │       │   │   │   │   │   │   ├── all-true.json
    │   │       │   │   │   │   │   │   ├── allows-0.json
    │   │       │   │   │   │   │   │   ├── allows-1.json
    │   │       │   │   │   │   │   │   ├── allows-stringy-0.json
    │   │       │   │   │   │   │   │   ├── allows-stringy-1.json
    │   │       │   │   │   │   │   │   ├── allows-stringy-false.json
    │   │       │   │   │   │   │   │   ├── allows-stringy-true.json
    │   │       │   │   │   │   │   │   ├── casts-to-boolean.json
    │   │       │   │   │   │   │   │   ├── casts-to-boolean2.json
    │   │       │   │   │   │   │   │   ├── disallows-2.json
    │   │       │   │   │   │   │   │   ├── disallows-empty-strings.json
    │   │       │   │   │   │   │   │   ├── disallows-other-strings.json
    │   │       │   │   │   │   │   │   ├── empty-and.json
    │   │       │   │   │   │   │   │   ├── last-false.json
    │   │       │   │   │   │   │   │   ├── null-is-false.json
    │   │       │   │   │   │   │   │   ├── single-input-false.json
    │   │       │   │   │   │   │   │   └── single-input-true.json
    │   │       │   │   │   │   │   ├── argv/
    │   │       │   │   │   │   │   │   ├── arg-can-be-null.json
    │   │       │   │   │   │   │   │   ├── error-no-args.json
    │   │       │   │   │   │   │   │   ├── error-no-such-arg.json
    │   │       │   │   │   │   │   │   ├── simple-0.json
    │   │       │   │   │   │   │   │   └── simple-1.json
    │   │       │   │   │   │   │   ├── commaContains/
    │   │       │   │   │   │   │   │   ├── empty-string.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── null2.json
    │   │       │   │   │   │   │   │   ├── should-include-word-in-string.json
    │   │       │   │   │   │   │   │   ├── should-not-include-word-in-string.json
    │   │       │   │   │   │   │   │   └── string-list-include-number.json
    │   │       │   │   │   │   │   ├── compare-equals/
    │   │       │   │   │   │   │   │   ├── equals-strings.json
    │   │       │   │   │   │   │   │   ├── error-too-few-args.json
    │   │       │   │   │   │   │   │   └── not-equals-strings.json
    │   │       │   │   │   │   │   ├── compare-error/
    │   │       │   │   │   │   │   │   ├── error-case-sensitive-not.json
    │   │       │   │   │   │   │   │   ├── error-expr-as-not.json
    │   │       │   │   │   │   │   │   ├── error-expr-as-operator-with-not.json
    │   │       │   │   │   │   │   │   ├── error-expr-as-operator.json
    │   │       │   │   │   │   │   │   ├── error-not-not.json
    │   │       │   │   │   │   │   │   ├── error-wrong-operator.json
    │   │       │   │   │   │   │   │   └── notEquals-not-implemented.json
    │   │       │   │   │   │   │   ├── compare-greaterThan/
    │   │       │   │   │   │   │   │   ├── greaterThan-simple.json
    │   │       │   │   │   │   │   │   └── greaterThan-simple2.json
    │   │       │   │   │   │   │   ├── compare-isAfter/
    │   │       │   │   │   │   │   │   ├── date-leap-year.json
    │   │       │   │   │   │   │   │   └── date-with-time.json
    │   │       │   │   │   │   │   ├── compare-isAfterEq/
    │   │       │   │   │   │   │   │   └── isAfterEq.json
    │   │       │   │   │   │   │   ├── compare-isBefore/
    │   │       │   │   │   │   │   │   ├── date-empty-string-and-null.json
    │   │       │   │   │   │   │   │   ├── date-empty-string.json
    │   │       │   │   │   │   │   │   ├── date-simple.json
    │   │       │   │   │   │   │   │   ├── error-date-invalid.json
    │   │       │   │   │   │   │   │   └── error-date-invalid2.json
    │   │       │   │   │   │   │   ├── compare-isBeforeEq/
    │   │       │   │   │   │   │   │   └── isBeforeEq.json
    │   │       │   │   │   │   │   ├── compare-isSameDay/
    │   │       │   │   │   │   │   │   ├── errors-different-timesone.json
    │   │       │   │   │   │   │   │   ├── errors-with-number.json
    │   │       │   │   │   │   │   │   ├── errors-with-only-year.json
    │   │       │   │   │   │   │   │   ├── not-sameDay-year.json
    │   │       │   │   │   │   │   │   └── start-and-end-of-day-is-same.json
    │   │       │   │   │   │   │   ├── component/
    │   │       │   │   │   │   │   │   ├── across-pages-hidden.json
    │   │       │   │   │   │   │   │   ├── across-pages.json
    │   │       │   │   │   │   │   │   ├── distant-across-page.json
    │   │       │   │   │   │   │   │   ├── distant.json
    │   │       │   │   │   │   │   │   ├── find-first-row.json
    │   │       │   │   │   │   │   │   ├── find-grouped-sibling.json
    │   │       │   │   │   │   │   │   ├── find-hidden-sibling-in-other-repeating-group.json
    │   │       │   │   │   │   │   │   ├── find-hidden-unrelated-sibling-in-other-repeating-group.json
    │   │       │   │   │   │   │   │   ├── find-sibling-in-other-repeating-group.json
    │   │       │   │   │   │   │   │   ├── find-unrelated-sibling-in-other-repeating-group.json
    │   │       │   │   │   │   │   │   ├── hidden-in-group-other-row.json
    │   │       │   │   │   │   │   │   ├── hidden-in-group.json
    │   │       │   │   │   │   │   │   ├── hidden-in-non-repeating-group.json
    │   │       │   │   │   │   │   │   ├── hide-group-component.json
    │   │       │   │   │   │   │   │   ├── in-group-group-hidden.json
    │   │       │   │   │   │   │   │   ├── in-group-page-hidden.json
    │   │       │   │   │   │   │   │   ├── in-group-with-hidden.json
    │   │       │   │   │   │   │   │   ├── in-group.json
    │   │       │   │   │   │   │   │   ├── in-hidden-row.json
    │   │       │   │   │   │   │   │   ├── in-nested-group.json
    │   │       │   │   │   │   │   │   ├── in-nested-group2.json
    │   │       │   │   │   │   │   │   ├── non-repeating-group-in-repeating-group.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-equals.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-for-hidden-component-is-null.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-for-hidden-dynamic-component-is-null.json
    │   │       │   │   │   │   │   │   ├── simple-lookup.json
    │   │       │   │   │   │   │   │   ├── visible-in-non-repeating-group.json
    │   │       │   │   │   │   │   │   └── with-component-index.json
    │   │       │   │   │   │   │   ├── concat/
    │   │       │   │   │   │   │   │   ├── boolean-are-empty-strings.json
    │   │       │   │   │   │   │   │   ├── casts-numbers.json
    │   │       │   │   │   │   │   │   ├── empty-string.json
    │   │       │   │   │   │   │   │   ├── inside-lookup.json
    │   │       │   │   │   │   │   │   ├── nulls-are-empty-strings.json
    │   │       │   │   │   │   │   │   ├── one-string.json
    │   │       │   │   │   │   │   │   └── simple-lookup.json
    │   │       │   │   │   │   │   ├── contains/
    │   │       │   │   │   │   │   │   ├── case-sensitivity.json
    │   │       │   │   │   │   │   │   ├── empty-string.json
    │   │       │   │   │   │   │   │   ├── exact-match.json
    │   │       │   │   │   │   │   │   ├── not-match.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── null2.json
    │   │       │   │   │   │   │   │   ├── null3.json
    │   │       │   │   │   │   │   │   ├── null4.json
    │   │       │   │   │   │   │   │   └── partial-match.json
    │   │       │   │   │   │   │   ├── countDataElements/
    │   │       │   │   │   │   │   │   ├── non-existing.json
    │   │       │   │   │   │   │   │   ├── single.json
    │   │       │   │   │   │   │   │   └── subform.json
    │   │       │   │   │   │   │   ├── dataModel/
    │   │       │   │   │   │   │   │   ├── array-is-null.json
    │   │       │   │   │   │   │   │   ├── direct-reference-in-group.json
    │   │       │   │   │   │   │   │   ├── direct-reference-in-nested-group.json
    │   │       │   │   │   │   │   │   ├── direct-reference-in-nested-group2.json
    │   │       │   │   │   │   │   │   ├── direct-reference-in-nested-group3.json
    │   │       │   │   │   │   │   │   ├── direct-reference-in-nested-group4.json
    │   │       │   │   │   │   │   │   ├── in-group.json
    │   │       │   │   │   │   │   │   ├── in-nested-group.json
    │   │       │   │   │   │   │   │   ├── null-is-null.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── object-is-null.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-equals.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-is-null.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-is-null2.json
    │   │       │   │   │   │   │   │   ├── simple-lookup.json
    │   │       │   │   │   │   │   │   ├── with-indexes-without-layout.json
    │   │       │   │   │   │   │   │   └── with-indexes.json
    │   │       │   │   │   │   │   ├── dataModelMultiple/
    │   │       │   │   │   │   │   │   ├── component-lookup-non-default-model.json
    │   │       │   │   │   │   │   │   ├── component-lookup-non-existing-model.json
    │   │       │   │   │   │   │   │   ├── dataModel-non-default-model.json
    │   │       │   │   │   │   │   │   ├── dataModel-non-existing-model.json
    │   │       │   │   │   │   │   │   └── dataModel-type-as-expr.json
    │   │       │   │   │   │   │   ├── divide/
    │   │       │   │   │   │   │   │   └── divide.json
    │   │       │   │   │   │   │   ├── endsWith/
    │   │       │   │   │   │   │   │   ├── case-sensitivity.json
    │   │       │   │   │   │   │   │   ├── empty-string.json
    │   │       │   │   │   │   │   │   ├── ends-with-null.json
    │   │       │   │   │   │   │   │   ├── ends-with-number.json
    │   │       │   │   │   │   │   │   ├── ends-with.json
    │   │       │   │   │   │   │   │   ├── exact-match.json
    │   │       │   │   │   │   │   │   ├── not-ends-with.json
    │   │       │   │   │   │   │   │   └── number-ends-with-number.json
    │   │       │   │   │   │   │   ├── equals/
    │   │       │   │   │   │   │   │   ├── diff-types-bool-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null-true.json
    │   │       │   │   │   │   │   │   ├── false-case-insensitive.json
    │   │       │   │   │   │   │   │   ├── false-case-insensitive2.json
    │   │       │   │   │   │   │   │   ├── null-case-insensitive.json
    │   │       │   │   │   │   │   │   ├── same-types-bool-false.json
    │   │       │   │   │   │   │   │   ├── same-types-bool-true.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false2.json
    │   │       │   │   │   │   │   │   ├── same-types-float-true.json
    │   │       │   │   │   │   │   │   ├── same-types-int-false.json
    │   │       │   │   │   │   │   │   ├── same-types-int-true.json
    │   │       │   │   │   │   │   │   ├── same-types-null.json
    │   │       │   │   │   │   │   │   ├── same-types-string-false.json
    │   │       │   │   │   │   │   │   ├── same-types-string-true.json
    │   │       │   │   │   │   │   │   ├── same-types-string-true2.json
    │   │       │   │   │   │   │   │   ├── strings-case-sensitive.json
    │   │       │   │   │   │   │   │   ├── too-few-args.json
    │   │       │   │   │   │   │   │   └── too-many-args.json
    │   │       │   │   │   │   │   ├── formatDate/
    │   │       │   │   │   │   │   │   ├── error-parseFalse.json
    │   │       │   │   │   │   │   │   ├── error-parseNumber.json
    │   │       │   │   │   │   │   │   ├── error-parseTrue.json
    │   │       │   │   │   │   │   │   ├── formats-date-english.json
    │   │       │   │   │   │   │   │   ├── formats-date-english2.json
    │   │       │   │   │   │   │   │   ├── formats-date-in-format-specified.json
    │   │       │   │   │   │   │   │   ├── formats-date-in-format-specified2.json
    │   │       │   │   │   │   │   │   ├── formats-date-time.json
    │   │       │   │   │   │   │   │   ├── formats-date-with-offset.json
    │   │       │   │   │   │   │   │   ├── formats-date.json
    │   │       │   │   │   │   │   │   ├── formats-time-in-format-specified.json
    │   │       │   │   │   │   │   │   ├── parse-date-2020-is-a-leap-year.json
    │   │       │   │   │   │   │   │   ├── parse-date-2021-is-not-a-leap-year.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-29-days-in-february-normal-.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-30-days-in-february-leap-.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-31-days-in-april.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-31-days-in-june.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-31-days-in-november.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-31-days-in-september.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-august.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-december.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-january.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-july.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-march.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-may.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-32-days-in-october.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-invalid-date-string-with-invalid-month.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-28-days-in-february-normal-.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-29-days-in-february-leap-.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-30-days-in-april.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-30-days-in-june.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-30-days-in-november.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-30-days-in-september.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-august.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-december.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-january.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-july.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-march.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-may.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string-with-31-days-in-october.json
    │   │       │   │   │   │   │   │   ├── parse-date-a-valid-date-string.json
    │   │       │   │   │   │   │   │   ├── parse-date-an-invalid-date-string.json
    │   │       │   │   │   │   │   │   ├── parse-date-invalid-month-day-combination.json
    │   │       │   │   │   │   │   │   ├── parse-date-invalid-month.json
    │   │       │   │   │   │   │   │   ├── parse-date-invalid-non-ascii-a-bengali-4-.json
    │   │       │   │   │   │   │   │   ├── parse-date-iso8601-non-rfc3339-week-number-implicit-day-of-week-2023-01-02-.json
    │   │       │   │   │   │   │   │   ├── parse-date-iso8601-non-rfc3339-week-number-rollover-to-next-year-2023-01-01-.json
    │   │       │   │   │   │   │   │   ├── parse-date-iso8601-non-rfc3339-week-number-with-day-of-week-2023-03-28-.json
    │   │       │   │   │   │   │   │   ├── parse-date-iso8601-non-rfc3339-yyyymmdd-without-dashes-2023-03-28-.json
    │   │       │   │   │   │   │   │   ├── parse-date-non-padded-day-dates-are-not-valid.json
    │   │       │   │   │   │   │   │   ├── parse-date-non-padded-month-dates-are-not-valid.json
    │   │       │   │   │   │   │   │   ├── parse-date-only-rfc3339-not-all-of-iso-8601-are-valid.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-a-valid-date-time-string-with-minus-offset.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-a-valid-date-time-string-with-plus-offset.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-a-valid-date-time-string-without-second-fraction.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-a-valid-date-time-string.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-closing-z-after-time-zone-offset.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-date-time-past-leap-second-utc.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-date-time-string.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-date-time-with-a-leap-second-utc.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-date-time-with-a-leap-second-with-minus-offset.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-date-time-with-leap-second-on-a-wrong-hour-utc.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-date-time-with-leap-second-on-a-wrong-minute-utc.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-day-in-date-time-string.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-an-invalid-offset-in-date-time-string.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-case-insensitive-t-and-z.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-invalid-non-ascii-a-bengali-4-in-date-portion.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-invalid-non-ascii-a-bengali-4-in-time-portion.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-invalid-non-padded-day-dates.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-invalid-non-padded-month-dates.json
    │   │       │   │   │   │   │   │   ├── parse-date-time-only-rfc3339-not-all-of-iso-8601-are-valid.json
    │   │       │   │   │   │   │   │   ├── parseNull-returnsNull.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-a-en.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-a-nb.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-a-nn.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-a-noLanguage.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-d.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-dd.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-h.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-hh.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-m.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-mm.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-s.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-ss.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-u.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-uu.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-uuu.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-uuuu.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-y.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-yy.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-yyy.json
    │   │       │   │   │   │   │   │   ├── valid-lowercase-yyyy.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-e-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-e-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-e-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ee-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ee-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ee-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eee-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eee-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eee-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eeee-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eeee-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eeee-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eeeee-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eeeee-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-eeeee-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-g-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-g-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-g-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-gg-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-gg-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-gg-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ggg-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ggg-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ggg-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-gggg-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-gggg-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-gggg-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ggggg-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ggggg-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ggggg-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-h.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-hh.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-m.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mm.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mmm-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mmm-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mmm-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mmmm-en.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mmmm-nb.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-mmmm-nn.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-s.json
    │   │       │   │   │   │   │   │   ├── valid-uppercase-ss.json
    │   │       │   │   │   │   │   │   └── valid-uppercase-sss.json
    │   │       │   │   │   │   │   ├── frontendSettings/
    │   │       │   │   │   │   │   │   ├── lookup-case-sensitive.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-equals.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-is-null.json
    │   │       │   │   │   │   │   │   └── simple-lookup.json
    │   │       │   │   │   │   │   ├── greaterThan/
    │   │       │   │   │   │   │   │   ├── diff-types-bool-float.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-int.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false3.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null2.json
    │   │       │   │   │   │   │   │   ├── doble-dots-fail-negative.json
    │   │       │   │   │   │   │   │   ├── doble-dots-fail.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-1.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-coefficient.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-exponent.json
    │   │       │   │   │   │   │   │   ├── negative-string-float.json
    │   │       │   │   │   │   │   │   ├── negative-string-float2.json
    │   │       │   │   │   │   │   │   ├── negative-string.json
    │   │       │   │   │   │   │   │   ├── negative-string2.json
    │   │       │   │   │   │   │   │   ├── no-decimals-fail-negative.json
    │   │       │   │   │   │   │   │   ├── no-decimals-fail.json
    │   │       │   │   │   │   │   │   ├── same-types-bool.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false.json
    │   │       │   │   │   │   │   │   ├── same-types-float-true.json
    │   │       │   │   │   │   │   │   ├── same-types-int-false.json
    │   │       │   │   │   │   │   │   ├── same-types-int-true.json
    │   │       │   │   │   │   │   │   ├── same-types-null.json
    │   │       │   │   │   │   │   │   ├── same-types-string-false.json
    │   │       │   │   │   │   │   │   ├── same-types-string-true.json
    │   │       │   │   │   │   │   │   ├── sci-notation-negative-exponents.json
    │   │       │   │   │   │   │   │   ├── sci-notation-numbers.json
    │   │       │   │   │   │   │   │   ├── sci-notation-with-regular.json
    │   │       │   │   │   │   │   │   ├── sci-string-basic.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-exponent.json
    │   │       │   │   │   │   │   │   ├── sci-string-no-whole.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-exponent.json
    │   │       │   │   │   │   │   │   └── sci-string-zero.json
    │   │       │   │   │   │   │   ├── greaterThanEq/
    │   │       │   │   │   │   │   │   ├── diff-types-bool-float.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-int.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false3.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-1.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-coefficient.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-exponent.json
    │   │       │   │   │   │   │   │   ├── same-types-bool.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false.json
    │   │       │   │   │   │   │   │   ├── same-types-float-true.json
    │   │       │   │   │   │   │   │   ├── same-types-int-false.json
    │   │       │   │   │   │   │   │   ├── same-types-int-true.json
    │   │       │   │   │   │   │   │   ├── same-types-null.json
    │   │       │   │   │   │   │   │   ├── same-types-string-false.json
    │   │       │   │   │   │   │   │   ├── same-types-string-true.json
    │   │       │   │   │   │   │   │   ├── sci-notation-negative-exponents.json
    │   │       │   │   │   │   │   │   ├── sci-notation-numbers.json
    │   │       │   │   │   │   │   │   ├── sci-notation-with-regular.json
    │   │       │   │   │   │   │   │   ├── sci-string-basic.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-exponent.json
    │   │       │   │   │   │   │   │   ├── sci-string-no-whole.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-exponent.json
    │   │       │   │   │   │   │   │   └── sci-string-zero.json
    │   │       │   │   │   │   │   ├── if/
    │   │       │   │   │   │   │   │   ├── else-otherwise.json
    │   │       │   │   │   │   │   │   ├── else-otherwise2.json
    │   │       │   │   │   │   │   │   ├── fail-5.json
    │   │       │   │   │   │   │   │   ├── fail-else-as-expr.json
    │   │       │   │   │   │   │   │   ├── fail-empty-string.json
    │   │       │   │   │   │   │   │   ├── fail-string.json
    │   │       │   │   │   │   │   │   ├── fail-without-else.json
    │   │       │   │   │   │   │   │   ├── fail-without-else2.json
    │   │       │   │   │   │   │   │   ├── falsy-0-1.json
    │   │       │   │   │   │   │   │   ├── falsy-0-2.json
    │   │       │   │   │   │   │   │   ├── never-3-arguments.json
    │   │       │   │   │   │   │   │   ├── never-5-arguments.json
    │   │       │   │   │   │   │   │   ├── null-otherwise.json
    │   │       │   │   │   │   │   │   ├── simple.json
    │   │       │   │   │   │   │   │   ├── truthy-1-1.json
    │   │       │   │   │   │   │   │   └── truthy-1-2.json
    │   │       │   │   │   │   │   ├── instanceContext/
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── only-dict.json
    │   │       │   │   │   │   │   │   ├── partyTypeOrg.json
    │   │       │   │   │   │   │   │   ├── partyTypePerson.json
    │   │       │   │   │   │   │   │   ├── partyTypeSelfIdentifiedEmail.json
    │   │       │   │   │   │   │   │   ├── partyTypeSelfIdentifiedUsername.json
    │   │       │   │   │   │   │   │   ├── partyTypeUnknown.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-equals.json
    │   │       │   │   │   │   │   │   ├── simple-lookup-is-null.json
    │   │       │   │   │   │   │   │   └── simple-lookup.json
    │   │       │   │   │   │   │   ├── language/
    │   │       │   │   │   │   │   │   ├── should-return-nb-if-not-set.json
    │   │       │   │   │   │   │   │   └── should-return-profile-settings-preference.json
    │   │       │   │   │   │   │   ├── lessThan/
    │   │       │   │   │   │   │   │   ├── diff-types-bool-float.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-int.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false3.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-1.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-coefficient.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-exponent.json
    │   │       │   │   │   │   │   │   ├── same-types-bool.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false.json
    │   │       │   │   │   │   │   │   ├── same-types-float-true.json
    │   │       │   │   │   │   │   │   ├── same-types-int-false.json
    │   │       │   │   │   │   │   │   ├── same-types-int-true.json
    │   │       │   │   │   │   │   │   ├── same-types-null.json
    │   │       │   │   │   │   │   │   ├── same-types-string-false.json
    │   │       │   │   │   │   │   │   ├── same-types-string-true.json
    │   │       │   │   │   │   │   │   ├── sci-notation-negative-exponents.json
    │   │       │   │   │   │   │   │   ├── sci-notation-numbers.json
    │   │       │   │   │   │   │   │   ├── sci-notation-with-regular.json
    │   │       │   │   │   │   │   │   ├── sci-string-basic.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-exponent.json
    │   │       │   │   │   │   │   │   ├── sci-string-no-whole.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-exponent.json
    │   │       │   │   │   │   │   │   └── sci-string-zero.json
    │   │       │   │   │   │   │   ├── lessThanEq/
    │   │       │   │   │   │   │   │   ├── diff-types-bool-float.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-int.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false2.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-false3.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-1.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-format-2.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-coefficient.json
    │   │       │   │   │   │   │   │   ├── error-sci-not-string-no-exponent.json
    │   │       │   │   │   │   │   │   ├── same-types-bool.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false.json
    │   │       │   │   │   │   │   │   ├── same-types-float-true.json
    │   │       │   │   │   │   │   │   ├── same-types-int-false.json
    │   │       │   │   │   │   │   │   ├── same-types-int-true.json
    │   │       │   │   │   │   │   │   ├── same-types-null.json
    │   │       │   │   │   │   │   │   ├── same-types-string-false.json
    │   │       │   │   │   │   │   │   ├── same-types-string-true.json
    │   │       │   │   │   │   │   │   ├── sci-notation-negative-exponents.json
    │   │       │   │   │   │   │   │   ├── sci-notation-numbers.json
    │   │       │   │   │   │   │   │   ├── sci-notation-with-regular.json
    │   │       │   │   │   │   │   │   ├── sci-string-basic.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-negative-exponent.json
    │   │       │   │   │   │   │   │   ├── sci-string-no-whole.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-coefficient.json
    │   │       │   │   │   │   │   │   ├── sci-string-plus-exponent.json
    │   │       │   │   │   │   │   │   └── sci-string-zero.json
    │   │       │   │   │   │   │   ├── lowerCase/
    │   │       │   │   │   │   │   │   ├── lowercase-number-should-return-string.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── should-lowercase-string.json
    │   │       │   │   │   │   │   │   ├── should-lowercase-whole-string.json
    │   │       │   │   │   │   │   │   └── should-lowercase-whole-word.json
    │   │       │   │   │   │   │   ├── lowerCaseFirst/
    │   │       │   │   │   │   │   │   ├── number.json
    │   │       │   │   │   │   │   │   ├── simple1.json
    │   │       │   │   │   │   │   │   └── simple2.json
    │   │       │   │   │   │   │   ├── minus/
    │   │       │   │   │   │   │   │   └── minus.json
    │   │       │   │   │   │   │   ├── multiply/
    │   │       │   │   │   │   │   │   └── multiply.json
    │   │       │   │   │   │   │   ├── not/
    │   │       │   │   │   │   │   │   ├── not-changes-notNull-to-false.json
    │   │       │   │   │   │   │   │   ├── not-changes-null-to-true.json
    │   │       │   │   │   │   │   │   ├── not-errors-on-numbers-not-0-or-1.json
    │   │       │   │   │   │   │   │   ├── not-errors-on-two-arguments.json
    │   │       │   │   │   │   │   │   ├── not-errors-on-zero-arguments.json
    │   │       │   │   │   │   │   │   ├── not-handles-numeric-zero-as-false.json
    │   │       │   │   │   │   │   │   ├── not-inverts-false.json
    │   │       │   │   │   │   │   │   └── not-inverts-true.json
    │   │       │   │   │   │   │   ├── notContains/
    │   │       │   │   │   │   │   │   ├── case-sensitivity.json
    │   │       │   │   │   │   │   │   ├── exact-match.json
    │   │       │   │   │   │   │   │   ├── not-match.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── null2.json
    │   │       │   │   │   │   │   │   ├── null3.json
    │   │       │   │   │   │   │   │   └── null4.json
    │   │       │   │   │   │   │   ├── notEquals/
    │   │       │   │   │   │   │   │   ├── diff-types-bool-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-bool-null-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-float-null-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-int-null-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-bool-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-float-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-int-true.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null-false.json
    │   │       │   │   │   │   │   │   ├── diff-types-string-null-true.json
    │   │       │   │   │   │   │   │   ├── same-types-bool-false.json
    │   │       │   │   │   │   │   │   ├── same-types-bool-true.json
    │   │       │   │   │   │   │   │   ├── same-types-float-false.json
    │   │       │   │   │   │   │   │   ├── same-types-float-true.json
    │   │       │   │   │   │   │   │   ├── same-types-int-false.json
    │   │       │   │   │   │   │   │   ├── same-types-int-true.json
    │   │       │   │   │   │   │   │   ├── same-types-null.json
    │   │       │   │   │   │   │   │   ├── same-types-string-false.json
    │   │       │   │   │   │   │   │   └── same-types-string-true.json
    │   │       │   │   │   │   │   ├── or/
    │   │       │   │   │   │   │   │   ├── all-true.json
    │   │       │   │   │   │   │   │   ├── allows-0.json
    │   │       │   │   │   │   │   │   ├── allows-1.json
    │   │       │   │   │   │   │   │   ├── allows-stringy-false.json
    │   │       │   │   │   │   │   │   ├── allows-stringy-true.json
    │   │       │   │   │   │   │   │   ├── disallows-2.json
    │   │       │   │   │   │   │   │   ├── disallows-empty-strings.json
    │   │       │   │   │   │   │   │   ├── disallows-other-strings.json
    │   │       │   │   │   │   │   │   ├── empty-or.json
    │   │       │   │   │   │   │   │   ├── last-false.json
    │   │       │   │   │   │   │   │   ├── null-is-false.json
    │   │       │   │   │   │   │   │   ├── single-input-false.json
    │   │       │   │   │   │   │   │   └── single-input-true.json
    │   │       │   │   │   │   │   ├── plus/
    │   │       │   │   │   │   │   │   └── plus.json
    │   │       │   │   │   │   │   ├── round/
    │   │       │   │   │   │   │   │   ├── nearest-integer-with-decimal-as-strings.json
    │   │       │   │   │   │   │   │   ├── nearest-integer-with-decimal.json
    │   │       │   │   │   │   │   │   ├── nearest-integer.json
    │   │       │   │   │   │   │   │   ├── round-0-decimal-places.json
    │   │       │   │   │   │   │   │   ├── round-0-decimal-places2.json
    │   │       │   │   │   │   │   │   ├── round-negative-number.json
    │   │       │   │   │   │   │   │   ├── round-null.json
    │   │       │   │   │   │   │   │   ├── round-null2.json
    │   │       │   │   │   │   │   │   ├── round-strings.json
    │   │       │   │   │   │   │   │   ├── round-with-too-many-args.json
    │   │       │   │   │   │   │   │   ├── round-without-decimalCount.json
    │   │       │   │   │   │   │   │   └── round-without-decimalCount2.json
    │   │       │   │   │   │   │   ├── startsWith/
    │   │       │   │   │   │   │   │   ├── case-sensitivity.json
    │   │       │   │   │   │   │   │   ├── empty-string.json
    │   │       │   │   │   │   │   │   ├── exact-match.json
    │   │       │   │   │   │   │   │   ├── not-starts-with.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── null2.json
    │   │       │   │   │   │   │   │   ├── number-starts-with-number.json
    │   │       │   │   │   │   │   │   ├── number-starts-with-string.json
    │   │       │   │   │   │   │   │   ├── start-with-number.json
    │   │       │   │   │   │   │   │   └── start-with.json
    │   │       │   │   │   │   │   ├── stringIndexOf/
    │   │       │   │   │   │   │   │   ├── emoji.json
    │   │       │   │   │   │   │   │   ├── look-for-null.json
    │   │       │   │   │   │   │   │   ├── look-in-null.json
    │   │       │   │   │   │   │   │   ├── not-found.json
    │   │       │   │   │   │   │   │   ├── number.json
    │   │       │   │   │   │   │   │   ├── simple.json
    │   │       │   │   │   │   │   │   └── whitespace.json
    │   │       │   │   │   │   │   ├── stringLength/
    │   │       │   │   │   │   │   │   ├── empty-string.json
    │   │       │   │   │   │   │   │   ├── length-equals.json
    │   │       │   │   │   │   │   │   ├── length-of-number.json
    │   │       │   │   │   │   │   │   ├── length-of-unicode.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── string-length.json
    │   │       │   │   │   │   │   │   └── whitespace-length.json
    │   │       │   │   │   │   │   ├── stringReplace/
    │   │       │   │   │   │   │   │   ├── emoji.json
    │   │       │   │   │   │   │   │   ├── multiple.json
    │   │       │   │   │   │   │   │   ├── replace-with-null.json
    │   │       │   │   │   │   │   │   ├── simple.json
    │   │       │   │   │   │   │   │   └── special-chars.json
    │   │       │   │   │   │   │   ├── stringSlice/
    │   │       │   │   │   │   │   │   ├── emoji.json
    │   │       │   │   │   │   │   │   ├── emoji2.json
    │   │       │   │   │   │   │   │   ├── end-before-start.json
    │   │       │   │   │   │   │   │   ├── end-too-large.json
    │   │       │   │   │   │   │   │   ├── error-together.json
    │   │       │   │   │   │   │   │   ├── negative-end.json
    │   │       │   │   │   │   │   │   ├── negative-start.json
    │   │       │   │   │   │   │   │   ├── simple.json
    │   │       │   │   │   │   │   │   ├── start-before-length.json
    │   │       │   │   │   │   │   │   ├── start-too-large.json
    │   │       │   │   │   │   │   │   └── together.json
    │   │       │   │   │   │   │   ├── text/
    │   │       │   │   │   │   │   │   ├── lookup-from-multiple-sources.json
    │   │       │   │   │   │   │   │   ├── lookup-instance-data.json
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── should-return-key-name-if-key-not-exist.json
    │   │       │   │   │   │   │   │   ├── should-return-text-resource-with-variable-in-rep-group-no-index-markers.json
    │   │       │   │   │   │   │   │   ├── should-return-text-resource-with-variable-in-rep-group.json
    │   │       │   │   │   │   │   │   ├── should-return-text-resource-with-variable.json
    │   │       │   │   │   │   │   │   ├── should-return-text-resource.json
    │   │       │   │   │   │   │   │   ├── unknown-data-source-returns-null.json
    │   │       │   │   │   │   │   │   └── use-default-when-dataModel-null.json
    │   │       │   │   │   │   │   ├── unknown/
    │   │       │   │   │   │   │   │   ├── appSettings.json
    │   │       │   │   │   │   │   │   ├── function-wrong-case.json
    │   │       │   │   │   │   │   │   └── invalid-function.json
    │   │       │   │   │   │   │   ├── upperCase/
    │   │       │   │   │   │   │   │   ├── null.json
    │   │       │   │   │   │   │   │   ├── should-uppercase-string.json
    │   │       │   │   │   │   │   │   ├── should-uppercase-whole-string.json
    │   │       │   │   │   │   │   │   ├── should-uppercase-whole-word.json
    │   │       │   │   │   │   │   │   └── uppercase-number-should-return-string.json
    │   │       │   │   │   │   │   └── upperCaseFirst/
    │   │       │   │   │   │   │       ├── number.json
    │   │       │   │   │   │   │       ├── simple1.json
    │   │       │   │   │   │   │       └── simple2.j
Download .txt
Showing preview only (4,834K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (45147 symbols across 7460 files)

FILE: .github/scripts/codeowners-generate.mjs
  constant OUTPUT_PATH (line 5) | const OUTPUT_PATH = '.github/CODEOWNERS';
  constant GENERATED_BY (line 6) | const GENERATED_BY = '.github/scripts/codeowners-generate.mjs';
  constant ROOT_FILE_ENTRIES (line 7) | const ROOT_FILE_ENTRIES = [
  constant EXACT_SOURCE_FILES (line 13) | const EXACT_SOURCE_FILES = [
  constant SOURCE_TYPES (line 27) | const SOURCE_TYPES = [
  constant GROUPS (line 36) | const GROUPS = [
  function generateCodeowners (line 158) | function generateCodeowners(options = {}) {
  function renderCodeowners (line 176) | function renderCodeowners() {
  function buildSections (line 202) | function buildSections() {
  function buildExactEntry (line 232) | function buildExactEntry(exactPath) {
  function buildRootEntries (line 244) | function buildRootEntries(root) {
  function createExactSourceType (line 274) | function createExactSourceType(fileName) {
  function createDottedPrefixSourceType (line 285) | function createDottedPrefixSourceType(prefix) {
  function createExtensionSourceType (line 297) | function createExtensionSourceType(suffix, glob) {
  function createComposeSourceTypes (line 309) | function createComposeSourceTypes(baseName, options = {}) {
  function matchesDottedVariant (line 331) | function matchesDottedVariant(candidate, baseName, extension) {
  function walkDirectory (line 343) | function walkDirectory(absolutePath, onFile) {
  function formatEntry (line 367) | function formatEntry(entry, width) {
  function readFileOrEmpty (line 371) | function readFileOrEmpty(filePath) {
  function normalizePath (line 382) | function normalizePath(filePath) {
  function parseArgs (line 386) | function parseArgs(argv) {

FILE: .github/scripts/construct-environments.mjs
  constant VALID_MODES (line 3) | const VALID_MODES = new Set(["studio", "studio-preapproved", "runtime"]);
  constant DEFAULTS_BY_MODE (line 4) | const DEFAULTS_BY_MODE = {
  constant OVERRIDE_DEFAULT_ENV_BY_MODE (line 9) | const OVERRIDE_DEFAULT_ENV_BY_MODE = {
  constant ALLOWED_VALUES_BY_MODE (line 14) | const ALLOWED_VALUES_BY_MODE = {
  function constructResult (line 27) | function constructResult(input) {
  function parseInputs (line 74) | function parseInputs(inputs) {
  function getEnvironmentsFromInputs (line 101) | function getEnvironmentsFromInputs(parsedInputs) {
  function splitCsvStrict (line 120) | function splitCsvStrict(raw) {
  function validateValues (line 133) | function validateValues(values, allowed, label) {
  function parseBool (line 145) | function parseBool(value) {
  function getDefaultOverrideValue (line 156) | function getDefaultOverrideValue(mode) {
  function parseArgs (line 164) | function parseArgs(argv) {

FILE: .yarn/releases/yarn-4.12.0.cjs
  function Cc (line 4) | function Cc(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}
  function NGe (line 4) | function NGe(t){return Cc("EBUSY",t)}
  function OGe (line 4) | function OGe(t,e){return Cc("ENOSYS",`${t}, ${e}`)}
  function LGe (line 4) | function LGe(t){return Cc("EINVAL",`invalid argument, ${t}`)}
  function Mo (line 4) | function Mo(t){return Cc("EBADF",`bad file descriptor, ${t}`)}
  function MGe (line 4) | function MGe(t){return Cc("ENOENT",`no such file or directory, ${t}`)}
  function UGe (line 4) | function UGe(t){return Cc("ENOTDIR",`not a directory, ${t}`)}
  function _Ge (line 4) | function _Ge(t){return Cc("EISDIR",`illegal operation on a directory, ${...
  function HGe (line 4) | function HGe(t){return Cc("EEXIST",`file already exists, ${t}`)}
  function jGe (line 4) | function jGe(t){return Cc("EROFS",`read-only filesystem, ${t}`)}
  function GGe (line 4) | function GGe(t){return Cc("ENOTEMPTY",`directory not empty, ${t}`)}
  function qGe (line 4) | function qGe(t){return Cc("EOPNOTSUPP",`operation not supported, ${t}`)}
  function yU (line 4) | function yU(){return Cc("ERR_DIR_CLOSED","Directory handle was closed")}
  function VZ (line 4) | function VZ(){return new nE}
  function WGe (line 4) | function WGe(){return XP(VZ())}
  function XP (line 4) | function XP(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r...
  function YGe (line 4) | function YGe(t){let e=new iE;for(let r in t)if(Object.hasOwn(t,r)){let s...
  function wU (line 4) | function wU(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs...
  method constructor (line 4) | constructor(){this.name="";this.path="";this.mode=0}
  method isBlockDevice (line 4) | isBlockDevice(){return!1}
  method isCharacterDevice (line 4) | isCharacterDevice(){return!1}
  method isDirectory (line 4) | isDirectory(){return(this.mode&61440)===16384}
  method isFIFO (line 4) | isFIFO(){return!1}
  method isFile (line 4) | isFile(){return(this.mode&61440)===32768}
  method isSocket (line 4) | isSocket(){return!1}
  method isSymbolicLink (line 4) | isSymbolicLink(){return(this.mode&61440)===40960}
  method constructor (line 4) | constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atim...
  method isBlockDevice (line 4) | isBlockDevice(){return!1}
  method isCharacterDevice (line 4) | isCharacterDevice(){return!1}
  method isDirectory (line 4) | isDirectory(){return(this.mode&61440)===16384}
  method isFIFO (line 4) | isFIFO(){return!1}
  method isFile (line 4) | isFile(){return(this.mode&61440)===32768}
  method isSocket (line 4) | isSocket(){return!1}
  method isSymbolicLink (line 4) | isSymbolicLink(){return(this.mode&61440)===40960}
  method constructor (line 4) | constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);...
  method isBlockDevice (line 4) | isBlockDevice(){return!1}
  method isCharacterDevice (line 4) | isCharacterDevice(){return!1}
  method isDirectory (line 4) | isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}
  method isFIFO (line 4) | isFIFO(){return!1}
  method isFile (line 4) | isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}
  method isSocket (line 4) | isSocket(){return!1}
  method isSymbolicLink (line 4) | isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}
  function XGe (line 4) | function XGe(t){let e,r;if(e=t.match(KGe))t=e[1];else if(r=t.match(zGe))...
  function ZGe (line 4) | function ZGe(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(VGe))?t=...
  function ZP (line 4) | function ZP(t,e){return t===fe?KZ(e):vU(e)}
  function $P (line 4) | async function $P(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.i...
  function zZ (line 4) | async function zZ(t,e,r,s,a){let n=t.pathUtils.normalize(e),c=r.pathUtil...
  function SU (line 4) | async function SU(t,e,r,s,a,n,c){let f=c.didParentExist?await XZ(r,s):nu...
  function XZ (line 4) | async function XZ(t,e){try{return await t.lstatPromise(e)}catch{return n...
  function e5e (line 4) | async function e5e(t,e,r,s,a,n,c,f,p){if(a!==null&&!a.isDirectory())if(p...
  function t5e (line 4) | async function t5e(t,e,r,s,a,n,c,f,p,h){let E=await n.checksumFilePromis...
  function r5e (line 4) | async function r5e(t,e,r,s,a,n,c,f,p){if(a!==null)if(p.overwrite)t.push(...
  function n5e (line 4) | async function n5e(t,e,r,s,a,n,c,f,p){return p.linkStrategy?.type==="Har...
  function i5e (line 4) | async function i5e(t,e,r,s,a,n,c,f,p){if(a!==null)if(p.overwrite)t.push(...
  function ex (line 4) | function ex(t,e,r,s){let a=()=>{let n=r.shift();if(typeof n>"u")return n...
  method constructor (line 4) | constructor(e,r,s={}){this.path=e;this.nextDirent=r;this.opts=s;this.clo...
  method throwIfClosed (line 4) | throwIfClosed(){if(this.closed)throw yU()}
  method [Symbol.asyncIterator] (line 4) | async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==nu...
  method read (line 4) | read(e){let r=this.readSync();return typeof e<"u"?e(null,r):Promise.reso...
  method readSync (line 4) | readSync(){return this.throwIfClosed(),this.nextDirent()}
  method close (line 4) | close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}
  method closeSync (line 4) | closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}
  function $Z (line 4) | function $Z(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: e...
  method constructor (line 4) | constructor(r,s,{bigint:a=!1}={}){super();this.status="ready";this.chang...
  method create (line 4) | static create(r,s,a){let n=new t(r,s,a);return n.start(),n}
  method start (line 4) | start(){$Z(this.status,"ready"),this.status="running",this.startTimeout=...
  method stop (line 4) | stop(){$Z(this.status,"running"),this.status="stopped",this.startTimeout...
  method stat (line 4) | stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}c...
  method makeInterval (line 4) | makeInterval(r){let s=setInterval(()=>{let a=this.stat(),n=this.lastStat...
  method registerChangeListener (line 4) | registerChangeListener(r,s){this.addListener("change",r),this.changeList...
  method unregisterChangeListener (line 4) | unregisterChangeListener(r){this.removeListener("change",r);let s=this.c...
  method unregisterAllChangeListeners (line 4) | unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())...
  method hasChangeListeners (line 4) | hasChangeListeners(){return this.changeListeners.size>0}
  method ref (line 4) | ref(){for(let r of this.changeListeners.values())r.ref();return this}
  method unref (line 4) | unref(){for(let r of this.changeListeners.values())r.unref();return this}
  function sE (line 4) | function sE(t,e,r,s){let a,n,c,f;switch(typeof r){case"function":a=!1,n=...
  function md (line 4) | function md(t,e,r){let s=rx.get(t);if(typeof s>"u")return;let a=s.get(e)...
  function yd (line 4) | function yd(t){let e=rx.get(t);if(!(typeof e>"u"))for(let r of e.keys())...
  function s5e (line 4) | function s5e(t){let e=t.match(/\r?\n/g);if(e===null)return n$.EOL;let r=...
  function Ed (line 7) | function Ed(t,e){return e.replace(/\r?\n/g,s5e(t))}
  method constructor (line 7) | constructor(e){this.pathUtils=e}
  method genTraversePromise (line 7) | async*genTraversePromise(e,{stableSort:r=!1}={}){let s=[e];for(;s.length...
  method checksumFilePromise (line 7) | async checksumFilePromise(e,{algorithm:r="sha512"}={}){let s=await this....
  method removePromise (line 7) | async removePromise(e,{recursive:r=!0,maxRetries:s=5}={}){let a;try{a=aw...
  method removeSync (line 7) | removeSync(e,{recursive:r=!0}={}){let s;try{s=this.lstatSync(e)}catch(a)...
  method mkdirpPromise (line 7) | async mkdirpPromise(e,{chmod:r,utimes:s}={}){if(e=this.resolve(e),e===th...
  method mkdirpSync (line 7) | mkdirpSync(e,{chmod:r,utimes:s}={}){if(e=this.resolve(e),e===this.pathUt...
  method copyPromise (line 7) | async copyPromise(e,r,{baseFs:s=this,overwrite:a=!0,stableSort:n=!1,stab...
  method copySync (line 7) | copySync(e,r,{baseFs:s=this,overwrite:a=!0}={}){let n=s.lstatSync(r),c=t...
  method changeFilePromise (line 7) | async changeFilePromise(e,r,s={}){return Buffer.isBuffer(r)?this.changeF...
  method changeFileBufferPromise (line 7) | async changeFileBufferPromise(e,r,{mode:s}={}){let a=Buffer.alloc(0);try...
  method changeFileTextPromise (line 7) | async changeFileTextPromise(e,r,{automaticNewlines:s,mode:a}={}){let n="...
  method changeFileSync (line 7) | changeFileSync(e,r,s={}){return Buffer.isBuffer(r)?this.changeFileBuffer...
  method changeFileBufferSync (line 7) | changeFileBufferSync(e,r,{mode:s}={}){let a=Buffer.alloc(0);try{a=this.r...
  method changeFileTextSync (line 7) | changeFileTextSync(e,r,{automaticNewlines:s=!1,mode:a}={}){let n="";try{...
  method movePromise (line 7) | async movePromise(e,r){try{await this.renamePromise(e,r)}catch(s){if(s.c...
  method moveSync (line 7) | moveSync(e,r){try{this.renameSync(e,r)}catch(s){if(s.code==="EXDEV")this...
  method lockPromise (line 7) | async lockPromise(e,r){let s=`${e}.flock`,a=1e3/60,n=Date.now(),c=null,f...
  method readJsonPromise (line 7) | async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{...
  method readJsonSync (line 7) | readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(...
  method writeJsonPromise (line 7) | async writeJsonPromise(e,r,{compact:s=!1}={}){let a=s?0:2;return await t...
  method writeJsonSync (line 8) | writeJsonSync(e,r,{compact:s=!1}={}){let a=s?0:2;return this.writeFileSy...
  method preserveTimePromise (line 9) | async preserveTimePromise(e,r){let s=await this.lstatPromise(e),a=await ...
  method preserveTimeSync (line 9) | async preserveTimeSync(e,r){let s=this.lstatSync(e),a=r();typeof a<"u"&&...
  method constructor (line 9) | constructor(){super(J)}
  method getExtractHint (line 9) | getExtractHint(e){return this.baseFs.getExtractHint(e)}
  method resolve (line 9) | resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}
  method getRealPath (line 9) | getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}
  method openPromise (line 9) | async openPromise(e,r,s){return this.baseFs.openPromise(this.mapToBase(e...
  method openSync (line 9) | openSync(e,r,s){return this.baseFs.openSync(this.mapToBase(e),r,s)}
  method opendirPromise (line 9) | async opendirPromise(e,r){return Object.assign(await this.baseFs.opendir...
  method opendirSync (line 9) | opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapTo...
  method readPromise (line 9) | async readPromise(e,r,s,a,n){return await this.baseFs.readPromise(e,r,s,...
  method readSync (line 9) | readSync(e,r,s,a,n){return this.baseFs.readSync(e,r,s,a,n)}
  method writePromise (line 9) | async writePromise(e,r,s,a,n){return typeof r=="string"?await this.baseF...
  method writeSync (line 9) | writeSync(e,r,s,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r...
  method closePromise (line 9) | async closePromise(e){return this.baseFs.closePromise(e)}
  method closeSync (line 9) | closeSync(e){this.baseFs.closeSync(e)}
  method createReadStream (line 9) | createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this....
  method createWriteStream (line 9) | createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?thi...
  method realpathPromise (line 9) | async realpathPromise(e){return this.mapFromBase(await this.baseFs.realp...
  method realpathSync (line 9) | realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.ma...
  method existsPromise (line 9) | async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}
  method existsSync (line 9) | existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}
  method accessSync (line 9) | accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}
  method accessPromise (line 9) | async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase...
  method statPromise (line 9) | async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}
  method statSync (line 9) | statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}
  method fstatPromise (line 9) | async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}
  method fstatSync (line 9) | fstatSync(e,r){return this.baseFs.fstatSync(e,r)}
  method lstatPromise (line 9) | lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}
  method lstatSync (line 9) | lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}
  method fchmodPromise (line 9) | async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}
  method fchmodSync (line 9) | fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}
  method chmodPromise (line 9) | async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e...
  method chmodSync (line 9) | chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}
  method fchownPromise (line 9) | async fchownPromise(e,r,s){return this.baseFs.fchownPromise(e,r,s)}
  method fchownSync (line 9) | fchownSync(e,r,s){return this.baseFs.fchownSync(e,r,s)}
  method chownPromise (line 9) | async chownPromise(e,r,s){return this.baseFs.chownPromise(this.mapToBase...
  method chownSync (line 9) | chownSync(e,r,s){return this.baseFs.chownSync(this.mapToBase(e),r,s)}
  method renamePromise (line 9) | async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase...
  method renameSync (line 9) | renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.map...
  method copyFilePromise (line 9) | async copyFilePromise(e,r,s=0){return this.baseFs.copyFilePromise(this.m...
  method copyFileSync (line 9) | copyFileSync(e,r,s=0){return this.baseFs.copyFileSync(this.mapToBase(e),...
  method appendFilePromise (line 9) | async appendFilePromise(e,r,s){return this.baseFs.appendFilePromise(this...
  method appendFileSync (line 9) | appendFileSync(e,r,s){return this.baseFs.appendFileSync(this.fsMapToBase...
  method writeFilePromise (line 9) | async writeFilePromise(e,r,s){return this.baseFs.writeFilePromise(this.f...
  method writeFileSync (line 9) | writeFileSync(e,r,s){return this.baseFs.writeFileSync(this.fsMapToBase(e...
  method unlinkPromise (line 9) | async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}
  method unlinkSync (line 9) | unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}
  method utimesPromise (line 9) | async utimesPromise(e,r,s){return this.baseFs.utimesPromise(this.mapToBa...
  method utimesSync (line 9) | utimesSync(e,r,s){return this.baseFs.utimesSync(this.mapToBase(e),r,s)}
  method lutimesPromise (line 9) | async lutimesPromise(e,r,s){return this.baseFs.lutimesPromise(this.mapTo...
  method lutimesSync (line 9) | lutimesSync(e,r,s){return this.baseFs.lutimesSync(this.mapToBase(e),r,s)}
  method mkdirPromise (line 9) | async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e...
  method mkdirSync (line 9) | mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}
  method rmdirPromise (line 9) | async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e...
  method rmdirSync (line 9) | rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}
  method rmPromise (line 9) | async rmPromise(e,r){return this.baseFs.rmPromise(this.mapToBase(e),r)}
  method rmSync (line 9) | rmSync(e,r){return this.baseFs.rmSync(this.mapToBase(e),r)}
  method linkPromise (line 9) | async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),...
  method linkSync (line 9) | linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBa...
  method symlinkPromise (line 9) | async symlinkPromise(e,r,s){let a=this.mapToBase(r);if(this.pathUtils.is...
  method symlinkSync (line 9) | symlinkSync(e,r,s){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(...
  method readFilePromise (line 9) | async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMap...
  method readFileSync (line 9) | readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}
  method readdirPromise (line 9) | readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}
  method readdirSync (line 9) | readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}
  method readlinkPromise (line 9) | async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readl...
  method readlinkSync (line 9) | readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.ma...
  method truncatePromise (line 9) | async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapTo...
  method truncateSync (line 9) | truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}
  method ftruncatePromise (line 9) | async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}
  method ftruncateSync (line 9) | ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}
  method watch (line 9) | watch(e,r,s){return this.baseFs.watch(this.mapToBase(e),r,s)}
  method watchFile (line 9) | watchFile(e,r,s){return this.baseFs.watchFile(this.mapToBase(e),r,s)}
  method unwatchFile (line 9) | unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}
  method fsMapToBase (line 9) | fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}
  method constructor (line 9) | constructor(e,{baseFs:r,pathUtils:s}){super(s),this.target=e,this.baseFs=r}
  method getRealPath (line 9) | getRealPath(){return this.target}
  method getBaseFs (line 9) | getBaseFs(){return this.baseFs}
  method mapFromBase (line 9) | mapFromBase(e){return e}
  method mapToBase (line 9) | mapToBase(e){return e}
  function s$ (line 9) | function s$(t){let e=t;return typeof t.path=="string"&&(e.path=fe.toPort...
  method constructor (line 9) | constructor(e=o$.default){super(),this.realFs=e}
  method getExtractHint (line 9) | getExtractHint(){return!1}
  method getRealPath (line 9) | getRealPath(){return vt.root}
  method resolve (line 9) | resolve(e){return J.resolve(e)}
  method openPromise (line 9) | async openPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.op...
  method openSync (line 9) | openSync(e,r,s){return this.realFs.openSync(fe.fromPortablePath(e),r,s)}
  method opendirPromise (line 9) | async opendirPromise(e,r){return await new Promise((s,a)=>{typeof r<"u"?...
  method opendirSync (line 9) | opendirSync(e,r){let a=typeof r<"u"?this.realFs.opendirSync(fe.fromPorta...
  method readPromise (line 9) | async readPromise(e,r,s=0,a=0,n=-1){return await new Promise((c,f)=>{thi...
  method readSync (line 9) | readSync(e,r,s,a,n){return this.realFs.readSync(e,r,s,a,n)}
  method writePromise (line 9) | async writePromise(e,r,s,a,n){return await new Promise((c,f)=>typeof r==...
  method writeSync (line 9) | writeSync(e,r,s,a,n){return typeof r=="string"?this.realFs.writeSync(e,r...
  method closePromise (line 9) | async closePromise(e){await new Promise((r,s)=>{this.realFs.close(e,this...
  method closeSync (line 9) | closeSync(e){this.realFs.closeSync(e)}
  method createReadStream (line 9) | createReadStream(e,r){let s=e!==null?fe.fromPortablePath(e):e;return thi...
  method createWriteStream (line 9) | createWriteStream(e,r){let s=e!==null?fe.fromPortablePath(e):e;return th...
  method realpathPromise (line 9) | async realpathPromise(e){return await new Promise((r,s)=>{this.realFs.re...
  method realpathSync (line 9) | realpathSync(e){return fe.toPortablePath(this.realFs.realpathSync(fe.fro...
  method existsPromise (line 9) | async existsPromise(e){return await new Promise(r=>{this.realFs.exists(f...
  method accessSync (line 9) | accessSync(e,r){return this.realFs.accessSync(fe.fromPortablePath(e),r)}
  method accessPromise (line 9) | async accessPromise(e,r){return await new Promise((s,a)=>{this.realFs.ac...
  method existsSync (line 9) | existsSync(e){return this.realFs.existsSync(fe.fromPortablePath(e))}
  method statPromise (line 9) | async statPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.st...
  method statSync (line 9) | statSync(e,r){return r?this.realFs.statSync(fe.fromPortablePath(e),r):th...
  method fstatPromise (line 9) | async fstatPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.f...
  method fstatSync (line 9) | fstatSync(e,r){return r?this.realFs.fstatSync(e,r):this.realFs.fstatSync...
  method lstatPromise (line 9) | async lstatPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.l...
  method lstatSync (line 9) | lstatSync(e,r){return r?this.realFs.lstatSync(fe.fromPortablePath(e),r):...
  method fchmodPromise (line 9) | async fchmodPromise(e,r){return await new Promise((s,a)=>{this.realFs.fc...
  method fchmodSync (line 9) | fchmodSync(e,r){return this.realFs.fchmodSync(e,r)}
  method chmodPromise (line 9) | async chmodPromise(e,r){return await new Promise((s,a)=>{this.realFs.chm...
  method chmodSync (line 9) | chmodSync(e,r){return this.realFs.chmodSync(fe.fromPortablePath(e),r)}
  method fchownPromise (line 9) | async fchownPromise(e,r,s){return await new Promise((a,n)=>{this.realFs....
  method fchownSync (line 9) | fchownSync(e,r,s){return this.realFs.fchownSync(e,r,s)}
  method chownPromise (line 9) | async chownPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.c...
  method chownSync (line 9) | chownSync(e,r,s){return this.realFs.chownSync(fe.fromPortablePath(e),r,s)}
  method renamePromise (line 9) | async renamePromise(e,r){return await new Promise((s,a)=>{this.realFs.re...
  method renameSync (line 9) | renameSync(e,r){return this.realFs.renameSync(fe.fromPortablePath(e),fe....
  method copyFilePromise (line 9) | async copyFilePromise(e,r,s=0){return await new Promise((a,n)=>{this.rea...
  method copyFileSync (line 9) | copyFileSync(e,r,s=0){return this.realFs.copyFileSync(fe.fromPortablePat...
  method appendFilePromise (line 9) | async appendFilePromise(e,r,s){return await new Promise((a,n)=>{let c=ty...
  method appendFileSync (line 9) | appendFileSync(e,r,s){let a=typeof e=="string"?fe.fromPortablePath(e):e;...
  method writeFilePromise (line 9) | async writeFilePromise(e,r,s){return await new Promise((a,n)=>{let c=typ...
  method writeFileSync (line 9) | writeFileSync(e,r,s){let a=typeof e=="string"?fe.fromPortablePath(e):e;s...
  method unlinkPromise (line 9) | async unlinkPromise(e){return await new Promise((r,s)=>{this.realFs.unli...
  method unlinkSync (line 9) | unlinkSync(e){return this.realFs.unlinkSync(fe.fromPortablePath(e))}
  method utimesPromise (line 9) | async utimesPromise(e,r,s){return await new Promise((a,n)=>{this.realFs....
  method utimesSync (line 9) | utimesSync(e,r,s){this.realFs.utimesSync(fe.fromPortablePath(e),r,s)}
  method lutimesPromise (line 9) | async lutimesPromise(e,r,s){return await new Promise((a,n)=>{this.realFs...
  method lutimesSync (line 9) | lutimesSync(e,r,s){this.realFs.lutimesSync(fe.fromPortablePath(e),r,s)}
  method mkdirPromise (line 9) | async mkdirPromise(e,r){return await new Promise((s,a)=>{this.realFs.mkd...
  method mkdirSync (line 9) | mkdirSync(e,r){return this.realFs.mkdirSync(fe.fromPortablePath(e),r)}
  method rmdirPromise (line 9) | async rmdirPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.r...
  method rmdirSync (line 9) | rmdirSync(e,r){return this.realFs.rmdirSync(fe.fromPortablePath(e),r)}
  method rmPromise (line 9) | async rmPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.rm(f...
  method rmSync (line 9) | rmSync(e,r){return this.realFs.rmSync(fe.fromPortablePath(e),r)}
  method linkPromise (line 9) | async linkPromise(e,r){return await new Promise((s,a)=>{this.realFs.link...
  method linkSync (line 9) | linkSync(e,r){return this.realFs.linkSync(fe.fromPortablePath(e),fe.from...
  method symlinkPromise (line 9) | async symlinkPromise(e,r,s){return await new Promise((a,n)=>{this.realFs...
  method symlinkSync (line 9) | symlinkSync(e,r,s){return this.realFs.symlinkSync(fe.fromPortablePath(e....
  method readFilePromise (line 9) | async readFilePromise(e,r){return await new Promise((s,a)=>{let n=typeof...
  method readFileSync (line 9) | readFileSync(e,r){let s=typeof e=="string"?fe.fromPortablePath(e):e;retu...
  method readdirPromise (line 9) | async readdirPromise(e,r){return await new Promise((s,a)=>{r?r.recursive...
  method readdirSync (line 9) | readdirSync(e,r){return r?r.recursive&&process.platform==="win32"?r.with...
  method readlinkPromise (line 9) | async readlinkPromise(e){return await new Promise((r,s)=>{this.realFs.re...
  method readlinkSync (line 9) | readlinkSync(e){return fe.toPortablePath(this.realFs.readlinkSync(fe.fro...
  method truncatePromise (line 9) | async truncatePromise(e,r){return await new Promise((s,a)=>{this.realFs....
  method truncateSync (line 9) | truncateSync(e,r){return this.realFs.truncateSync(fe.fromPortablePath(e)...
  method ftruncatePromise (line 9) | async ftruncatePromise(e,r){return await new Promise((s,a)=>{this.realFs...
  method ftruncateSync (line 9) | ftruncateSync(e,r){return this.realFs.ftruncateSync(e,r)}
  method watch (line 9) | watch(e,r,s){return this.realFs.watch(fe.fromPortablePath(e),r,s)}
  method watchFile (line 9) | watchFile(e,r,s){return this.realFs.watchFile(fe.fromPortablePath(e),r,s)}
  method unwatchFile (line 9) | unwatchFile(e,r){return this.realFs.unwatchFile(fe.fromPortablePath(e),r)}
  method makeCallback (line 9) | makeCallback(e,r){return(s,a)=>{s?r(s):e(a)}}
  method constructor (line 9) | constructor(e,{baseFs:r=new Yn}={}){super(J),this.target=this.pathUtils....
  method getRealPath (line 9) | getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),th...
  method resolve (line 9) | resolve(e){return this.pathUtils.isAbsolute(e)?J.normalize(e):this.baseF...
  method mapFromBase (line 9) | mapFromBase(e){return e}
  method mapToBase (line 9) | mapToBase(e){return this.pathUtils.isAbsolute(e)?e:this.pathUtils.join(t...
  method constructor (line 9) | constructor(e,{baseFs:r=new Yn}={}){super(J),this.target=this.pathUtils....
  method getRealPath (line 9) | getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),th...
  method getTarget (line 9) | getTarget(){return this.target}
  method getBaseFs (line 9) | getBaseFs(){return this.baseFs}
  method mapToBase (line 9) | mapToBase(e){let r=this.pathUtils.normalize(e);if(this.pathUtils.isAbsol...
  method mapFromBase (line 9) | mapFromBase(e){return this.pathUtils.resolve(l$,this.pathUtils.relative(...
  method constructor (line 9) | constructor(r,s){super(s);this.instance=null;this.factory=r}
  method baseFs (line 9) | get baseFs(){return this.instance||(this.instance=this.factory()),this.i...
  method baseFs (line 9) | set baseFs(r){this.instance=r}
  method mapFromBase (line 9) | mapFromBase(r){return r}
  method mapToBase (line 9) | mapToBase(r){return r}
  method constructor (line 9) | constructor({baseFs:r=new Yn,filter:s=null,magicByte:a=42,maxOpenFiles:n...
  method getExtractHint (line 9) | getExtractHint(r){return this.baseFs.getExtractHint(r)}
  method getRealPath (line 9) | getRealPath(){return this.baseFs.getRealPath()}
  method saveAndClose (line 9) | saveAndClose(){if(yd(this),this.mountInstances)for(let[r,{childFs:s}]of ...
  method discardAndClose (line 9) | discardAndClose(){if(yd(this),this.mountInstances)for(let[r,{childFs:s}]...
  method resolve (line 9) | resolve(r){return this.baseFs.resolve(r)}
  method remapFd (line 9) | remapFd(r,s){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,s...
  method openPromise (line 9) | async openPromise(r,s,a){return await this.makeCallPromise(r,async()=>aw...
  method openSync (line 9) | openSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,s,...
  method opendirPromise (line 9) | async opendirPromise(r,s){return await this.makeCallPromise(r,async()=>a...
  method opendirSync (line 9) | opendirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.opendirSync(...
  method readPromise (line 9) | async readPromise(r,s,a,n,c){if((r&tl)!==this.magic)return await this.ba...
  method readSync (line 9) | readSync(r,s,a,n,c){if((r&tl)!==this.magic)return this.baseFs.readSync(r...
  method writePromise (line 9) | async writePromise(r,s,a,n,c){if((r&tl)!==this.magic)return typeof s=="s...
  method writeSync (line 9) | writeSync(r,s,a,n,c){if((r&tl)!==this.magic)return typeof s=="string"?th...
  method closePromise (line 9) | async closePromise(r){if((r&tl)!==this.magic)return await this.baseFs.cl...
  method closeSync (line 9) | closeSync(r){if((r&tl)!==this.magic)return this.baseFs.closeSync(r);let ...
  method createReadStream (line 9) | createReadStream(r,s){return r===null?this.baseFs.createReadStream(r,s):...
  method createWriteStream (line 9) | createWriteStream(r,s){return r===null?this.baseFs.createWriteStream(r,s...
  method realpathPromise (line 9) | async realpathPromise(r){return await this.makeCallPromise(r,async()=>aw...
  method realpathSync (line 9) | realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(...
  method existsPromise (line 9) | async existsPromise(r){return await this.makeCallPromise(r,async()=>awai...
  method existsSync (line 9) | existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(...
  method accessPromise (line 9) | async accessPromise(r,s){return await this.makeCallPromise(r,async()=>aw...
  method accessSync (line 9) | accessSync(r,s){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,...
  method statPromise (line 9) | async statPromise(r,s){return await this.makeCallPromise(r,async()=>awai...
  method statSync (line 9) | statSync(r,s){return this.makeCallSync(r,()=>this.baseFs.statSync(r,s),(...
  method fstatPromise (line 9) | async fstatPromise(r,s){if((r&tl)!==this.magic)return this.baseFs.fstatP...
  method fstatSync (line 9) | fstatSync(r,s){if((r&tl)!==this.magic)return this.baseFs.fstatSync(r,s);...
  method lstatPromise (line 9) | async lstatPromise(r,s){return await this.makeCallPromise(r,async()=>awa...
  method lstatSync (line 9) | lstatSync(r,s){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,s)...
  method fchmodPromise (line 9) | async fchmodPromise(r,s){if((r&tl)!==this.magic)return this.baseFs.fchmo...
  method fchmodSync (line 9) | fchmodSync(r,s){if((r&tl)!==this.magic)return this.baseFs.fchmodSync(r,s...
  method chmodPromise (line 9) | async chmodPromise(r,s){return await this.makeCallPromise(r,async()=>awa...
  method chmodSync (line 9) | chmodSync(r,s){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,s)...
  method fchownPromise (line 9) | async fchownPromise(r,s,a){if((r&tl)!==this.magic)return this.baseFs.fch...
  method fchownSync (line 9) | fchownSync(r,s,a){if((r&tl)!==this.magic)return this.baseFs.fchownSync(r...
  method chownPromise (line 9) | async chownPromise(r,s,a){return await this.makeCallPromise(r,async()=>a...
  method chownSync (line 9) | chownSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,...
  method renamePromise (line 9) | async renamePromise(r,s){return await this.makeCallPromise(r,async()=>aw...
  method renameSync (line 9) | renameSync(r,s){return this.makeCallSync(r,()=>this.makeCallSync(s,()=>t...
  method copyFilePromise (line 9) | async copyFilePromise(r,s,a=0){let n=async(c,f,p,h)=>{if(a&wd.constants....
  method copyFileSync (line 9) | copyFileSync(r,s,a=0){let n=(c,f,p,h)=>{if(a&wd.constants.COPYFILE_FICLO...
  method appendFilePromise (line 9) | async appendFilePromise(r,s,a){return await this.makeCallPromise(r,async...
  method appendFileSync (line 9) | appendFileSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.appendF...
  method writeFilePromise (line 9) | async writeFilePromise(r,s,a){return await this.makeCallPromise(r,async(...
  method writeFileSync (line 9) | writeFileSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.writeFil...
  method unlinkPromise (line 9) | async unlinkPromise(r){return await this.makeCallPromise(r,async()=>awai...
  method unlinkSync (line 9) | unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(...
  method utimesPromise (line 9) | async utimesPromise(r,s,a){return await this.makeCallPromise(r,async()=>...
  method utimesSync (line 9) | utimesSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(...
  method lutimesPromise (line 9) | async lutimesPromise(r,s,a){return await this.makeCallPromise(r,async()=...
  method lutimesSync (line 9) | lutimesSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSyn...
  method mkdirPromise (line 9) | async mkdirPromise(r,s){return await this.makeCallPromise(r,async()=>awa...
  method mkdirSync (line 9) | mkdirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,s)...
  method rmdirPromise (line 9) | async rmdirPromise(r,s){return await this.makeCallPromise(r,async()=>awa...
  method rmdirSync (line 9) | rmdirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,s)...
  method rmPromise (line 9) | async rmPromise(r,s){return await this.makeCallPromise(r,async()=>await ...
  method rmSync (line 9) | rmSync(r,s){return this.makeCallSync(r,()=>this.baseFs.rmSync(r,s),(a,{s...
  method linkPromise (line 9) | async linkPromise(r,s){return await this.makeCallPromise(s,async()=>awai...
  method linkSync (line 9) | linkSync(r,s){return this.makeCallSync(s,()=>this.baseFs.linkSync(r,s),(...
  method symlinkPromise (line 9) | async symlinkPromise(r,s,a){return await this.makeCallPromise(s,async()=...
  method symlinkSync (line 9) | symlinkSync(r,s,a){return this.makeCallSync(s,()=>this.baseFs.symlinkSyn...
  method readFilePromise (line 9) | async readFilePromise(r,s){return this.makeCallPromise(r,async()=>await ...
  method readFileSync (line 9) | readFileSync(r,s){return this.makeCallSync(r,()=>this.baseFs.readFileSyn...
  method readdirPromise (line 9) | async readdirPromise(r,s){return await this.makeCallPromise(r,async()=>a...
  method readdirSync (line 9) | readdirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.readdirSync(...
  method readlinkPromise (line 9) | async readlinkPromise(r){return await this.makeCallPromise(r,async()=>aw...
  method readlinkSync (line 9) | readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(...
  method truncatePromise (line 9) | async truncatePromise(r,s){return await this.makeCallPromise(r,async()=>...
  method truncateSync (line 9) | truncateSync(r,s){return this.makeCallSync(r,()=>this.baseFs.truncateSyn...
  method ftruncatePromise (line 9) | async ftruncatePromise(r,s){if((r&tl)!==this.magic)return this.baseFs.ft...
  method ftruncateSync (line 9) | ftruncateSync(r,s){if((r&tl)!==this.magic)return this.baseFs.ftruncateSy...
  method watch (line 9) | watch(r,s,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,s,a),(n,...
  method watchFile (line 9) | watchFile(r,s,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,...
  method unwatchFile (line 9) | unwatchFile(r,s){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(...
  method makeCallPromise (line 9) | async makeCallPromise(r,s,a,{requireSubpath:n=!0}={}){if(typeof r!="stri...
  method makeCallSync (line 9) | makeCallSync(r,s,a,{requireSubpath:n=!0}={}){if(typeof r!="string")retur...
  method findMount (line 9) | findMount(r){if(this.filter&&!this.filter.test(r))return null;let s="";f...
  method limitOpenFiles (line 9) | limitOpenFiles(r){if(this.mountInstances===null)return;let s=Date.now(),...
  method getMountPromise (line 9) | async getMountPromise(r,s){if(this.mountInstances){let a=this.mountInsta...
  method getMountSync (line 9) | getMountSync(r,s){if(this.mountInstances){let a=this.mountInstances.get(...
  method constructor (line 9) | constructor(){super(J)}
  method getExtractHint (line 9) | getExtractHint(){throw er()}
  method getRealPath (line 9) | getRealPath(){throw er()}
  method resolve (line 9) | resolve(){throw er()}
  method openPromise (line 9) | async openPromise(){throw er()}
  method openSync (line 9) | openSync(){throw er()}
  method opendirPromise (line 9) | async opendirPromise(){throw er()}
  method opendirSync (line 9) | opendirSync(){throw er()}
  method readPromise (line 9) | async readPromise(){throw er()}
  method readSync (line 9) | readSync(){throw er()}
  method writePromise (line 9) | async writePromise(){throw er()}
  method writeSync (line 9) | writeSync(){throw er()}
  method closePromise (line 9) | async closePromise(){throw er()}
  method closeSync (line 9) | closeSync(){throw er()}
  method createWriteStream (line 9) | createWriteStream(){throw er()}
  method createReadStream (line 9) | createReadStream(){throw er()}
  method realpathPromise (line 9) | async realpathPromise(){throw er()}
  method realpathSync (line 9) | realpathSync(){throw er()}
  method readdirPromise (line 9) | async readdirPromise(){throw er()}
  method readdirSync (line 9) | readdirSync(){throw er()}
  method existsPromise (line 9) | async existsPromise(e){throw er()}
  method existsSync (line 9) | existsSync(e){throw er()}
  method accessPromise (line 9) | async accessPromise(){throw er()}
  method accessSync (line 9) | accessSync(){throw er()}
  method statPromise (line 9) | async statPromise(){throw er()}
  method statSync (line 9) | statSync(){throw er()}
  method fstatPromise (line 9) | async fstatPromise(e){throw er()}
  method fstatSync (line 9) | fstatSync(e){throw er()}
  method lstatPromise (line 9) | async lstatPromise(e){throw er()}
  method lstatSync (line 9) | lstatSync(e){throw er()}
  method fchmodPromise (line 9) | async fchmodPromise(){throw er()}
  method fchmodSync (line 9) | fchmodSync(){throw er()}
  method chmodPromise (line 9) | async chmodPromise(){throw er()}
  method chmodSync (line 9) | chmodSync(){throw er()}
  method fchownPromise (line 9) | async fchownPromise(){throw er()}
  method fchownSync (line 9) | fchownSync(){throw er()}
  method chownPromise (line 9) | async chownPromise(){throw er()}
  method chownSync (line 9) | chownSync(){throw er()}
  method mkdirPromise (line 9) | async mkdirPromise(){throw er()}
  method mkdirSync (line 9) | mkdirSync(){throw er()}
  method rmdirPromise (line 9) | async rmdirPromise(){throw er()}
  method rmdirSync (line 9) | rmdirSync(){throw er()}
  method rmPromise (line 9) | async rmPromise(){throw er()}
  method rmSync (line 9) | rmSync(){throw er()}
  method linkPromise (line 9) | async linkPromise(){throw er()}
  method linkSync (line 9) | linkSync(){throw er()}
  method symlinkPromise (line 9) | async symlinkPromise(){throw er()}
  method symlinkSync (line 9) | symlinkSync(){throw er()}
  method renamePromise (line 9) | async renamePromise(){throw er()}
  method renameSync (line 9) | renameSync(){throw er()}
  method copyFilePromise (line 9) | async copyFilePromise(){throw er()}
  method copyFileSync (line 9) | copyFileSync(){throw er()}
  method appendFilePromise (line 9) | async appendFilePromise(){throw er()}
  method appendFileSync (line 9) | appendFileSync(){throw er()}
  method writeFilePromise (line 9) | async writeFilePromise(){throw er()}
  method writeFileSync (line 9) | writeFileSync(){throw er()}
  method unlinkPromise (line 9) | async unlinkPromise(){throw er()}
  method unlinkSync (line 9) | unlinkSync(){throw er()}
  method utimesPromise (line 9) | async utimesPromise(){throw er()}
  method utimesSync (line 9) | utimesSync(){throw er()}
  method lutimesPromise (line 9) | async lutimesPromise(){throw er()}
  method lutimesSync (line 9) | lutimesSync(){throw er()}
  method readFilePromise (line 9) | async readFilePromise(){throw er()}
  method readFileSync (line 9) | readFileSync(){throw er()}
  method readlinkPromise (line 9) | async readlinkPromise(){throw er()}
  method readlinkSync (line 9) | readlinkSync(){throw er()}
  method truncatePromise (line 9) | async truncatePromise(){throw er()}
  method truncateSync (line 9) | truncateSync(){throw er()}
  method ftruncatePromise (line 9) | async ftruncatePromise(e,r){throw er()}
  method ftruncateSync (line 9) | ftruncateSync(e,r){throw er()}
  method watch (line 9) | watch(){throw er()}
  method watchFile (line 9) | watchFile(){throw er()}
  method unwatchFile (line 9) | unwatchFile(){throw er()}
  method constructor (line 9) | constructor(e){super(fe),this.baseFs=e}
  method mapFromBase (line 9) | mapFromBase(e){return fe.fromPortablePath(e)}
  method mapToBase (line 9) | mapToBase(e){return fe.toPortablePath(e)}
  method makeVirtualPath (line 9) | static makeVirtualPath(e,r,s){if(J.basename(e)!=="__virtual__")throw new...
  method resolveVirtual (line 9) | static resolveVirtual(e){let r=e.match(PU);if(!r||!r[3]&&r[5])return e;l...
  method constructor (line 9) | constructor({baseFs:e=new Yn}={}){super(J),this.baseFs=e}
  method getExtractHint (line 9) | getExtractHint(e){return this.baseFs.getExtractHint(e)}
  method getRealPath (line 9) | getRealPath(){return this.baseFs.getRealPath()}
  method realpathSync (line 9) | realpathSync(e){let r=e.match(PU);if(!r)return this.baseFs.realpathSync(...
  method realpathPromise (line 9) | async realpathPromise(e){let r=e.match(PU);if(!r)return await this.baseF...
  method mapToBase (line 9) | mapToBase(e){if(e==="")return e;if(this.pathUtils.isAbsolute(e))return t...
  method mapFromBase (line 9) | mapFromBase(e){return e}
  function l5e (line 9) | function l5e(t,e){return typeof xU.default.isUtf8<"u"?xU.default.isUtf8(...
  method constructor (line 9) | constructor(e){super(fe),this.baseFs=e}
  method mapFromBase (line 9) | mapFromBase(e){return e}
  method mapToBase (line 9) | mapToBase(e){if(typeof e=="string")return e;if(e instanceof URL)return(0...
  method constructor (line 9) | constructor(e,r){this[C$]=1;this[I$]=void 0;this[E$]=void 0;this[y$]=voi...
  method fd (line 9) | get fd(){return this[Ep]}
  method appendFile (line 9) | async appendFile(e,r){try{this[Ru](this.appendFile);let s=(typeof r=="st...
  method chown (line 9) | async chown(e,r){try{return this[Ru](this.chown),await this[Uo].fchownPr...
  method chmod (line 9) | async chmod(e){try{return this[Ru](this.chmod),await this[Uo].fchmodProm...
  method createReadStream (line 9) | createReadStream(e){return this[Uo].createReadStream(null,{...e,fd:this....
  method createWriteStream (line 9) | createWriteStream(e){return this[Uo].createWriteStream(null,{...e,fd:thi...
  method datasync (line 9) | datasync(){throw new Error("Method not implemented.")}
  method sync (line 9) | sync(){throw new Error("Method not implemented.")}
  method read (line 9) | async read(e,r,s,a){try{this[Ru](this.read);let n,c;return ArrayBuffer.i...
  method readFile (line 9) | async readFile(e){try{this[Ru](this.readFile);let r=(typeof e=="string"?...
  method readLines (line 9) | readLines(e){return(0,w$.createInterface)({input:this.createReadStream(e...
  method stat (line 9) | async stat(e){try{return this[Ru](this.stat),await this[Uo].fstatPromise...
  method truncate (line 9) | async truncate(e){try{return this[Ru](this.truncate),await this[Uo].ftru...
  method utimes (line 9) | utimes(e,r){throw new Error("Method not implemented.")}
  method writeFile (line 9) | async writeFile(e,r){try{this[Ru](this.writeFile);let s=(typeof r=="stri...
  method write (line 9) | async write(...e){try{if(this[Ru](this.write),ArrayBuffer.isView(e[0])){...
  method writev (line 9) | async writev(e,r){try{this[Ru](this.writev);let s=0;if(typeof r<"u")for(...
  method readv (line 9) | readv(e,r){throw new Error("Method not implemented.")}
  method close (line 9) | close(){if(this[Ep]===-1)return Promise.resolve();if(this[r0])return thi...
  method [(Uo,Ep,C$=aE,I$=r0,E$=sx,y$=ox,Ru)] (line 9) | [(Uo,Ep,C$=aE,I$=r0,E$=sx,y$=ox,Ru)](e){if(this[Ep]===-1){let r=new Erro...
  method [Fu] (line 9) | [Fu](){if(this[aE]--,this[aE]===0){let e=this[Ep];this[Ep]=-1,this[Uo].c...
  function U2 (line 9) | function U2(t,e){e=new ix(e);let r=(s,a,n)=>{let c=s[a];s[a]=n,typeof c?...
  function ax (line 9) | function ax(t,e){let r=Object.create(t);return U2(r,e),r}
  function D$ (line 9) | function D$(t){let e=Math.ceil(Math.random()*4294967296).toString(16).pa...
  function b$ (line 9) | function b$(){if(kU)return kU;let t=fe.toPortablePath(P$.default.tmpdir(...
  method detachTemp (line 9) | detachTemp(t){Nu.delete(t)}
  method mktempSync (line 9) | mktempSync(t){let{tmpdir:e,realTmpdir:r}=b$();for(;;){let s=D$("xfs-");t...
  method mktempPromise (line 9) | async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=b$();for(;;){let s=D$(...
  method rmtempPromise (line 9) | async rmtempPromise(){await Promise.all(Array.from(Nu.values()).map(asyn...
  method rmtempSync (line 9) | rmtempSync(){for(let t of Nu)try{ce.removeSync(t),Nu.delete(t)}catch{}}
  function u5e (line 9) | function u5e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT...
  function Q$ (line 9) | function Q$(t,e,r){return!t.isSymbolicLink()&&!t.isFile()?!1:u5e(e,r)}
  function T$ (line 9) | function T$(t,e,r){k$.stat(t,function(s,a){r(s,s?!1:Q$(a,t,e))})}
  function f5e (line 9) | function f5e(t,e){return Q$(k$.statSync(t),t,e)}
  function O$ (line 9) | function O$(t,e,r){N$.stat(t,function(s,a){r(s,s?!1:L$(a,e))})}
  function A5e (line 9) | function A5e(t,e){return L$(N$.statSync(t),e)}
  function L$ (line 9) | function L$(t,e){return t.isFile()&&p5e(t,e)}
  function p5e (line 9) | function p5e(t,e){var r=t.mode,s=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:pr...
  function QU (line 9) | function QU(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Pro...
  function h5e (line 9) | function h5e(t,e){try{return lx.sync(t,e||{})}catch(r){if(e&&e.ignoreErr...
  function Z$ (line 9) | function Z$(t,e){let r=t.options.env||process.env,s=process.cwd(),a=t.op...
  function E5e (line 9) | function E5e(t){return Z$(t)||Z$(t,!0)}
  function I5e (line 9) | function I5e(t){return t=t.replace(RU,"^$1"),t}
  function C5e (line 9) | function C5e(t,e){return t=`${t}`,t=t.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"...
  function v5e (line 9) | function v5e(t){let r=Buffer.alloc(150),s;try{s=NU.openSync(t,"r"),NU.re...
  function k5e (line 9) | function k5e(t){t.file=lee(t);let e=t.file&&D5e(t.file);return e?(t.args...
  function Q5e (line 9) | function Q5e(t){if(!b5e)return t;let e=k5e(t),r=!P5e.test(e);if(t.option...
  function T5e (line 9) | function T5e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[]...
  function LU (line 9) | function LU(t,e){return Object.assign(new Error(`${e} ${t.command} ENOEN...
  function R5e (line 9) | function R5e(t,e){if(!OU)return;let r=t.emit;t.emit=function(s,a){if(s==...
  function Aee (line 9) | function Aee(t,e){return OU&&t===1&&!e.file?LU(e.original,"spawn"):null}
  function F5e (line 9) | function F5e(t,e){return OU&&t===1&&!e.file?LU(e.original,"spawnSync"):n...
  function dee (line 9) | function dee(t,e,r){let s=MU(t,e,r),a=gee.spawn(s.command,s.args,s.optio...
  function N5e (line 9) | function N5e(t,e,r){let s=MU(t,e,r),a=gee.spawnSync(s.command,s.args,s.o...
  function O5e (line 9) | function O5e(t,e){function r(){this.constructor=t}r.prototype=e.prototyp...
  function Bd (line 9) | function Bd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.lo...
  function s (line 9) | function s(h){return h.charCodeAt(0).toString(16).toUpperCase()}
  function a (line 9) | function a(h){return h.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace...
  function n (line 9) | function n(h){return h.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replac...
  function c (line 9) | function c(h){return r[h.type](h)}
  function f (line 9) | function f(h){var E=new Array(h.length),C,S;for(C=0;C<h.length;C++)E[C]=...
  function p (line 9) | function p(h){return h?'"'+a(h)+'"':"end of input"}
  function L5e (line 9) | function L5e(t,e){e=e!==void 0?e:{};var r={},s={Start:Wa},a=Wa,n=functio...
  function ux (line 12) | function ux(t,e={isGlobPattern:()=>!1}){try{return(0,Eee.parse)(t,e)}cat...
  function fE (line 12) | function fE(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:s},a...
  function fx (line 12) | function fx(t){return`${AE(t.chain)}${t.then?` ${HU(t.then)}`:""}`}
  function HU (line 12) | function HU(t){return`${t.type} ${fx(t.line)}`}
  function AE (line 12) | function AE(t){return`${GU(t)}${t.then?` ${jU(t.then)}`:""}`}
  function jU (line 12) | function jU(t){return`${t.type} ${AE(t.chain)}`}
  function GU (line 12) | function GU(t){switch(t.type){case"command":return`${t.envs.length>0?`${...
  function cx (line 12) | function cx(t){return`${t.name}=${t.args[0]?vd(t.args[0]):""}`}
  function qU (line 12) | function qU(t){switch(t.type){case"redirection":return H2(t);case"argume...
  function H2 (line 12) | function H2(t){return`${t.subtype} ${t.args.map(e=>vd(e)).join(" ")}`}
  function vd (line 12) | function vd(t){return t.segments.map(e=>WU(e)).join("")}
  function WU (line 12) | function WU(t){let e=(s,a)=>a?`"${s}"`:s,r=s=>s===""?"''":s.match(/[()}<...
  function Ax (line 12) | function Ax(t){let e=a=>{switch(a){case"addition":return"+";case"subtrac...
  function _5e (line 13) | function _5e(t,e){function r(){this.constructor=t}r.prototype=e.prototyp...
  function Sd (line 13) | function Sd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.lo...
  function s (line 13) | function s(h){return h.charCodeAt(0).toString(16).toUpperCase()}
  function a (line 13) | function a(h){return h.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace...
  function n (line 13) | function n(h){return h.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replac...
  function c (line 13) | function c(h){return r[h.type](h)}
  function f (line 13) | function f(h){var E=new Array(h.length),C,S;for(C=0;C<h.length;C++)E[C]=...
  function p (line 13) | function p(h){return h?'"'+a(h)+'"':"end of input"}
  function H5e (line 13) | function H5e(t,e){e=e!==void 0?e:{};var r={},s={resolution:Ne},a=Ne,n="/...
  function px (line 13) | function px(t){let e=t.match(/^\*{1,2}\/(.*)/);if(e)throw new Error(`The...
  function hx (line 13) | function hx(t){let e="";return t.from&&(e+=t.from.fullName,t.from.descri...
  function bee (line 13) | function bee(t){return typeof t>"u"||t===null}
  function j5e (line 13) | function j5e(t){return typeof t=="object"&&t!==null}
  function G5e (line 13) | function G5e(t){return Array.isArray(t)?t:bee(t)?[]:[t]}
  function q5e (line 13) | function q5e(t,e){var r,s,a,n;if(e)for(n=Object.keys(e),r=0,s=n.length;r...
  function W5e (line 13) | function W5e(t,e){var r="",s;for(s=0;s<e;s+=1)r+=t;return r}
  function Y5e (line 13) | function Y5e(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}
  function j2 (line 13) | function j2(t,e){Error.call(this),this.name="YAMLException",this.reason=...
  function YU (line 13) | function YU(t,e,r,s,a){this.name=t,this.buffer=e,this.position=r,this.li...
  function K5e (line 17) | function K5e(t){var e={};return t!==null&&Object.keys(t).forEach(functio...
  function z5e (line 17) | function z5e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(V5e.i...
  function VU (line 17) | function VU(t,e,r){var s=[];return t.include.forEach(function(a){r=VU(a,...
  function Z5e (line 17) | function Z5e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;...
  function hE (line 17) | function hE(t){this.include=t.include||[],this.implicit=t.implicit||[],t...
  function iqe (line 17) | function iqe(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~...
  function sqe (line 17) | function sqe(){return null}
  function oqe (line 17) | function oqe(t){return t===null}
  function lqe (line 17) | function lqe(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="...
  function cqe (line 17) | function cqe(t){return t==="true"||t==="True"||t==="TRUE"}
  function uqe (line 17) | function uqe(t){return Object.prototype.toString.call(t)==="[object Bool...
  function pqe (line 17) | function pqe(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}
  function hqe (line 17) | function hqe(t){return 48<=t&&t<=55}
  function gqe (line 17) | function gqe(t){return 48<=t&&t<=57}
  function dqe (line 17) | function dqe(t){if(t===null)return!1;var e=t.length,r=0,s=!1,a;if(!e)ret...
  function mqe (line 17) | function mqe(t){var e=t,r=1,s,a,n=[];return e.indexOf("_")!==-1&&(e=e.re...
  function yqe (line 17) | function yqe(t){return Object.prototype.toString.call(t)==="[object Numb...
  function Cqe (line 17) | function Cqe(t){return!(t===null||!Iqe.test(t)||t[t.length-1]==="_")}
  function wqe (line 17) | function wqe(t){var e,r,s,a;return e=t.replace(/_/g,"").toLowerCase(),r=...
  function vqe (line 17) | function vqe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".na...
  function Sqe (line 17) | function Sqe(t){return Object.prototype.toString.call(t)==="[object Numb...
  function xqe (line 17) | function xqe(t){return t===null?!1:ete.exec(t)!==null||tte.exec(t)!==null}
  function kqe (line 17) | function kqe(t){var e,r,s,a,n,c,f,p=0,h=null,E,C,S;if(e=ete.exec(t),e===...
  function Qqe (line 17) | function Qqe(t){return t.toISOString()}
  function Rqe (line 17) | function Rqe(t){return t==="<<"||t===null}
  function Nqe (line 18) | function Nqe(t){if(t===null)return!1;var e,r,s=0,a=t.length,n=zU;for(r=0...
  function Oqe (line 18) | function Oqe(t){var e,r,s=t.replace(/[\r\n=]/g,""),a=s.length,n=zU,c=0,f...
  function Lqe (line 18) | function Lqe(t){var e="",r=0,s,a,n=t.length,c=zU;for(s=0;s<n;s++)s%3===0...
  function Mqe (line 18) | function Mqe(t){return xd&&xd.isBuffer(t)}
  function jqe (line 18) | function jqe(t){if(t===null)return!0;var e=[],r,s,a,n,c,f=t;for(r=0,s=f....
  function Gqe (line 18) | function Gqe(t){return t!==null?t:[]}
  function Yqe (line 18) | function Yqe(t){if(t===null)return!0;var e,r,s,a,n,c=t;for(n=new Array(c...
  function Vqe (line 18) | function Vqe(t){if(t===null)return[];var e,r,s,a,n,c=t;for(n=new Array(c...
  function zqe (line 18) | function zqe(t){if(t===null)return!0;var e,r=t;for(e in r)if(Kqe.call(r,...
  function Xqe (line 18) | function Xqe(t){return t!==null?t:{}}
  function e9e (line 18) | function e9e(){return!0}
  function t9e (line 18) | function t9e(){}
  function r9e (line 18) | function r9e(){return""}
  function n9e (line 18) | function n9e(t){return typeof t>"u"}
  function s9e (line 18) | function s9e(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)...
  function o9e (line 18) | function o9e(t){var e=t,r=/\/([gim]*)$/.exec(t),s="";return e[0]==="/"&&...
  function a9e (line 18) | function a9e(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multi...
  function l9e (line 18) | function l9e(t){return Object.prototype.toString.call(t)==="[object RegE...
  function u9e (line 18) | function u9e(t){if(t===null)return!1;try{var e="("+t+")",r=mx.parse(e,{r...
  function f9e (line 18) | function f9e(t){var e="("+t+")",r=mx.parse(e,{range:!0}),s=[],a;if(r.typ...
  function A9e (line 18) | function A9e(t){return t.toString()}
  function p9e (line 18) | function p9e(t){return Object.prototype.toString.call(t)==="[object Func...
  function Dte (line 18) | function Dte(t){return Object.prototype.toString.call(t)}
  function jf (line 18) | function jf(t){return t===10||t===13}
  function Qd (line 18) | function Qd(t){return t===9||t===32}
  function rl (line 18) | function rl(t){return t===9||t===32||t===10||t===13}
  function dE (line 18) | function dE(t){return t===44||t===91||t===93||t===123||t===125}
  function I9e (line 18) | function I9e(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-9...
  function C9e (line 18) | function C9e(t){return t===120?2:t===117?4:t===85?8:0}
  function w9e (line 18) | function w9e(t){return 48<=t&&t<=57?t-48:-1}
  function bte (line 18) | function bte(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t=...
  function B9e (line 19) | function B9e(t){return t<=65535?String.fromCharCode(t):String.fromCharCo...
  function v9e (line 19) | function v9e(t,e){this.input=t,this.filename=e.filename||null,this.schem...
  function Ute (line 19) | function Ute(t,e){return new Qte(e,new h9e(t.filename,t.input,t.position...
  function Rr (line 19) | function Rr(t,e){throw Ute(t,e)}
  function Ix (line 19) | function Ix(t,e){t.onWarning&&t.onWarning.call(null,Ute(t,e))}
  function n0 (line 19) | function n0(t,e,r,s){var a,n,c,f;if(e<r){if(f=t.input.slice(e,r),s)for(a...
  function xte (line 19) | function xte(t,e,r,s){var a,n,c,f;for(Ip.isObject(r)||Rr(t,"cannot merge...
  function mE (line 19) | function mE(t,e,r,s,a,n,c,f){var p,h;if(Array.isArray(a))for(a=Array.pro...
  function ZU (line 19) | function ZU(t){var e;e=t.input.charCodeAt(t.position),e===10?t.position+...
  function as (line 19) | function as(t,e,r){for(var s=0,a=t.input.charCodeAt(t.position);a!==0;){...
  function Cx (line 19) | function Cx(t){var e=t.position,r;return r=t.input.charCodeAt(e),!!((r==...
  function $U (line 19) | function $U(t,e){e===1?t.result+=" ":e>1&&(t.result+=Ip.repeat(`
  function S9e (line 20) | function S9e(t,e,r){var s,a,n,c,f,p,h,E,C=t.kind,S=t.result,P;if(P=t.inp...
  function D9e (line 20) | function D9e(t,e){var r,s,a;if(r=t.input.charCodeAt(t.position),r!==39)r...
  function b9e (line 20) | function b9e(t,e){var r,s,a,n,c,f;if(f=t.input.charCodeAt(t.position),f!...
  function P9e (line 20) | function P9e(t,e){var r=!0,s,a=t.tag,n,c=t.anchor,f,p,h,E,C,S={},P,I,R,N...
  function x9e (line 20) | function x9e(t,e){var r,s,a=XU,n=!1,c=!1,f=e,p=0,h=!1,E,C;if(C=t.input.c...
  function kte (line 26) | function kte(t,e){var r,s=t.tag,a=t.anchor,n=[],c,f=!1,p;for(t.anchor!==...
  function k9e (line 26) | function k9e(t,e,r){var s,a,n,c,f=t.tag,p=t.anchor,h={},E={},C=null,S=nu...
  function Q9e (line 26) | function Q9e(t){var e,r=!1,s=!1,a,n,c;if(c=t.input.charCodeAt(t.position...
  function T9e (line 26) | function T9e(t){var e,r;if(r=t.input.charCodeAt(t.position),r!==38)retur...
  function R9e (line 26) | function R9e(t){var e,r,s;if(s=t.input.charCodeAt(t.position),s!==42)ret...
  function yE (line 26) | function yE(t,e,r,s,a){var n,c,f,p=1,h=!1,E=!1,C,S,P,I,R;if(t.listener!=...
  function F9e (line 26) | function F9e(t){var e=t.position,r,s,a,n=!1,c;for(t.version=null,t.check...
  function _te (line 26) | function _te(t,e){t=String(t),e=e||{},t.length!==0&&(t.charCodeAt(t.leng...
  function Hte (line 27) | function Hte(t,e,r){e!==null&&typeof e=="object"&&typeof r>"u"&&(r=e,e=n...
  function jte (line 27) | function jte(t,e){var r=_te(t,e);if(r.length!==0){if(r.length===1)return...
  function N9e (line 27) | function N9e(t,e,r){return typeof e=="object"&&e!==null&&typeof r>"u"&&(...
  function O9e (line 27) | function O9e(t,e){return jte(t,Ip.extend({schema:Tte},e))}
  function rWe (line 27) | function rWe(t,e){var r,s,a,n,c,f,p;if(e===null)return{};for(r={},s=Obje...
  function qte (line 27) | function qte(t){var e,r,s;if(e=t.toString(16).toUpperCase(),t<=255)r="x"...
  function nWe (line 27) | function nWe(t){this.schema=t.schema||L9e,this.indent=Math.max(1,t.inden...
  function Wte (line 27) | function Wte(t,e){for(var r=Y2.repeat(" ",e),s=0,a=-1,n="",c,f=t.length;...
  function e_ (line 29) | function e_(t,e){return`
  function iWe (line 30) | function iWe(t,e){var r,s,a;for(r=0,s=t.implicitTypes.length;r<s;r+=1)if...
  function r_ (line 30) | function r_(t){return t===H9e||t===U9e}
  function EE (line 30) | function EE(t){return 32<=t&&t<=126||161<=t&&t<=55295&&t!==8232&&t!==823...
  function sWe (line 30) | function sWe(t){return EE(t)&&!r_(t)&&t!==65279&&t!==_9e&&t!==W2}
  function Yte (line 30) | function Yte(t,e){return EE(t)&&t!==65279&&t!==ere&&t!==rre&&t!==nre&&t!...
  function oWe (line 30) | function oWe(t){return EE(t)&&t!==65279&&!r_(t)&&t!==J9e&&t!==X9e&&t!==t...
  function ore (line 30) | function ore(t){var e=/^\n* /;return e.test(t)}
  function aWe (line 30) | function aWe(t,e,r,s,a){var n,c,f,p=!1,h=!1,E=s!==-1,C=-1,S=oWe(t.charCo...
  function lWe (line 30) | function lWe(t,e,r,s){t.dump=function(){if(e.length===0)return"''";if(!t...
  function Vte (line 30) | function Vte(t,e){var r=ore(t)?String(e):"",s=t[t.length-1]===`
  function Jte (line 34) | function Jte(t){return t[t.length-1]===`
  function cWe (line 35) | function cWe(t,e){for(var r=/(\n+)([^\n]*)/g,s=function(){var h=t.indexOf(`
  function Kte (line 38) | function Kte(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,s,a=...
  function uWe (line 41) | function uWe(t){for(var e="",r,s,a,n=0;n<t.length;n++){if(r=t.charCodeAt...
  function fWe (line 41) | function fWe(t,e,r){var s="",a=t.tag,n,c;for(n=0,c=r.length;n<c;n+=1)Td(...
  function AWe (line 41) | function AWe(t,e,r,s){var a="",n=t.tag,c,f;for(c=0,f=r.length;c<f;c+=1)T...
  function pWe (line 41) | function pWe(t,e,r){var s="",a=t.tag,n=Object.keys(r),c,f,p,h,E;for(c=0,...
  function hWe (line 41) | function hWe(t,e,r,s){var a="",n=t.tag,c=Object.keys(r),f,p,h,E,C,S;if(t...
  function zte (line 41) | function zte(t,e,r){var s,a,n,c,f,p;for(a=r?t.explicitTypes:t.implicitTy...
  function Td (line 41) | function Td(t,e,r,s,a,n){t.tag=null,t.dump=r,zte(t,r,!1)||zte(t,r,!0);va...
  function gWe (line 41) | function gWe(t,e){var r=[],s=[],a,n;for(t_(t,r,s),a=0,n=s.length;a<n;a+=...
  function t_ (line 41) | function t_(t,e,r){var s,a,n;if(t!==null&&typeof t=="object")if(a=e.inde...
  function fre (line 41) | function fre(t,e){e=e||{};var r=new nWe(e);return r.noRefs||gWe(t,r),Td(...
  function dWe (line 42) | function dWe(t,e){return fre(t,Y2.extend({schema:M9e},e))}
  function vx (line 42) | function vx(t){return function(){throw new Error("Function "+t+" is depr...
  function yWe (line 42) | function yWe(t,e){function r(){this.constructor=t}r.prototype=e.prototyp...
  function Rd (line 42) | function Rd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.lo...
  function s (line 42) | function s(h){return h.charCodeAt(0).toString(16).toUpperCase()}
  function a (line 42) | function a(h){return h.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace...
  function n (line 42) | function n(h){return h.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replac...
  function c (line 42) | function c(h){return r[h.type](h)}
  function f (line 42) | function f(h){var E=new Array(h.length),C,S;for(C=0;C<h.length;C++)E[C]=...
  function p (line 42) | function p(h){return h?'"'+a(h)+'"':"end of input"}
  function EWe (line 42) | function EWe(t,e){e=e!==void 0?e:{};var r={},s={Start:lc},a=lc,n=functio...
  function Ire (line 51) | function Ire(t){return t.match(IWe)?t:JSON.stringify(t)}
  function wre (line 51) | function wre(t){return typeof t>"u"?!0:typeof t=="object"&&t!==null&&!Ar...
  function i_ (line 51) | function i_(t,e,r){if(t===null)return`null
  function nl (line 61) | function nl(t){try{let e=i_(t,0,!1);return e!==`
  function CWe (line 62) | function CWe(t){return t.endsWith(`
  function BWe (line 64) | function BWe(t){if(wWe.test(t))return CWe(t);let e=(0,Dx.safeLoad)(t,{sc...
  function ls (line 64) | function ls(t){return BWe(t)}
  method constructor (line 64) | constructor(e){this.data=e}
  function bre (line 64) | function bre(t){return typeof t=="string"?!!Ds[t]:"env"in t?Ds[t.env]&&D...
  method constructor (line 64) | constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageEr...
  method constructor (line 64) | constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanio...
  method constructor (line 75) | constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type...
  function DWe (line 80) | function DWe(t){let e=t.split(`
  function Ho (line 82) | function Ho(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,`
  function ya (line 90) | function ya(t){return{...t,[K2]:!0}}
  function Gf (line 90) | function Gf(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&...
  function Qx (line 90) | function Qx(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(...
  function z2 (line 90) | function z2(t,e){return e.length===1?new nt(`${t}${Qx(e[0],{mergeName:!0...
  function Od (line 92) | function Od(t,e,r){if(typeof r>"u")return e;let s=[],a=[],n=f=>{let p=e;...
  function ti (line 92) | function ti(t){return t===null?"null":t===void 0?"undefined":t===""?"an ...
  function CE (line 92) | function CE(t,e){if(t.length===0)return"nothing";if(t.length===1)return ...
  function s0 (line 92) | function s0(t,e){var r,s,a;return typeof e=="number"?`${(r=t?.p)!==null&...
  function A_ (line 92) | function A_(t,e,r){return t===1?e:r}
  function mr (line 92) | function mr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}
  function TWe (line 92) | function TWe(t,e){return r=>{t[e]=r}}
  function Wf (line 92) | function Wf(t,e){return r=>{let s=t[e];return t[e]=r,Wf(t,e).bind(null,s)}}
  function X2 (line 92) | function X2(t,e,r){let s=()=>(t(r()),a),a=()=>(t(e),s);return s}
  function p_ (line 92) | function p_(){return Wr({test:(t,e)=>!0})}
  function Rre (line 92) | function Rre(t){return Wr({test:(e,r)=>e!==t?mr(r,`Expected ${ti(t)} (go...
  function wE (line 92) | function wE(){return Wr({test:(t,e)=>typeof t!="string"?mr(e,`Expected a...
  function fo (line 92) | function fo(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>ty...
  function FWe (line 92) | function FWe(){return Wr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(...
  function h_ (line 92) | function h_(){return Wr({test:(t,e)=>{var r;if(typeof t!="number"){if(ty...
  function NWe (line 92) | function NWe(t){return Wr({test:(e,r)=>{var s;if(typeof r?.coercions>"u"...
  function OWe (line 92) | function OWe(){return Wr({test:(t,e)=>{var r;if(!(t instanceof Date)){if...
  function Tx (line 92) | function Tx(t,{delimiter:e}={}){return Wr({test:(r,s)=>{var a;let n=r;if...
  function LWe (line 92) | function LWe(t,{delimiter:e}={}){let r=Tx(t,{delimiter:e});return Wr({te...
  function MWe (line 92) | function MWe(t,e){let r=Tx(Rx([t,e])),s=Fx(e,{keys:t});return Wr({test:(...
  function Rx (line 92) | function Rx(t,{delimiter:e}={}){let r=Ore(t.length);return Wr({test:(s,a...
  function Fx (line 92) | function Fx(t,{keys:e=null}={}){let r=Tx(Rx([e??wE(),t]));return Wr({tes...
  function UWe (line 92) | function UWe(t,e={}){return Fx(t,e)}
  function Fre (line 92) | function Fre(t,{extra:e=null}={}){let r=Object.keys(t),s=Wr({test:(a,n)=...
  function _We (line 92) | function _We(t){return Fre(t,{extra:Fx(p_())})}
  function Nre (line 92) | function Nre(t){return()=>t}
  function Wr (line 92) | function Wr({test:t}){return Nre(t)()}
  function jWe (line 92) | function jWe(t,e){if(!e(t))throw new o0}
  function GWe (line 92) | function GWe(t,e){let r=[];if(!e(t,{errors:r}))throw new o0({errors:r})}
  function qWe (line 92) | function qWe(t,e){}
  function WWe (line 92) | function WWe(t,e,{coerce:r=!1,errors:s,throw:a}={}){let n=s?[]:void 0;if...
  function YWe (line 92) | function YWe(t,e){let r=Rx(t);return(...s)=>{if(!r(s))throw new o0;retur...
  function VWe (line 92) | function VWe(t){return Wr({test:(e,r)=>e.length>=t?!0:mr(r,`Expected to ...
  function JWe (line 92) | function JWe(t){return Wr({test:(e,r)=>e.length<=t?!0:mr(r,`Expected to ...
  function Ore (line 92) | function Ore(t){return Wr({test:(e,r)=>e.length!==t?mr(r,`Expected to ha...
  function KWe (line 92) | function KWe({map:t}={}){return Wr({test:(e,r)=>{let s=new Set,a=new Set...
  function zWe (line 92) | function zWe(){return Wr({test:(t,e)=>t<=0?!0:mr(e,`Expected to be negat...
  function XWe (line 92) | function XWe(){return Wr({test:(t,e)=>t>=0?!0:mr(e,`Expected to be posit...
  function d_ (line 92) | function d_(t){return Wr({test:(e,r)=>e>=t?!0:mr(r,`Expected to be at le...
  function ZWe (line 92) | function ZWe(t){return Wr({test:(e,r)=>e<=t?!0:mr(r,`Expected to be at m...
  function $We (line 92) | function $We(t,e){return Wr({test:(r,s)=>r>=t&&r<=e?!0:mr(s,`Expected to...
  function eYe (line 92) | function eYe(t,e){return Wr({test:(r,s)=>r>=t&&r<e?!0:mr(s,`Expected to ...
  function m_ (line 92) | function m_({unsafe:t=!1}={}){return Wr({test:(e,r)=>e!==Math.round(e)?m...
  function Z2 (line 92) | function Z2(t){return Wr({test:(e,r)=>t.test(e)?!0:mr(r,`Expected to mat...
  function tYe (line 92) | function tYe(){return Wr({test:(t,e)=>t!==t.toLowerCase()?mr(e,`Expected...
  function rYe (line 92) | function rYe(){return Wr({test:(t,e)=>t!==t.toUpperCase()?mr(e,`Expected...
  function nYe (line 92) | function nYe(){return Wr({test:(t,e)=>QWe.test(t)?!0:mr(e,`Expected to b...
  function iYe (line 92) | function iYe(){return Wr({test:(t,e)=>Tre.test(t)?!0:mr(e,`Expected to b...
  function sYe (line 92) | function sYe({alpha:t=!1}){return Wr({test:(e,r)=>(t?PWe.test(e):xWe.tes...
  function oYe (line 92) | function oYe(){return Wr({test:(t,e)=>kWe.test(t)?!0:mr(e,`Expected to b...
  function aYe (line 92) | function aYe(t=p_()){return Wr({test:(e,r)=>{let s;try{s=JSON.parse(e)}c...
  function Nx (line 92) | function Nx(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Wr({test:(s,...
  function $2 (line 92) | function $2(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Nx(t,r)}
  function lYe (line 92) | function lYe(t){return Wr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}
  function cYe (line 92) | function cYe(t){return Wr({test:(e,r)=>e===null?!0:t(e,r)})}
  function uYe (line 92) | function uYe(t,e){var r;let s=new Set(t),a=eB[(r=e?.missingIf)!==null&&r...
  function y_ (line 92) | function y_(t,e){var r;let s=new Set(t),a=eB[(r=e?.missingIf)!==null&&r!...
  function fYe (line 92) | function fYe(t,e){var r;let s=new Set(t),a=eB[(r=e?.missingIf)!==null&&r...
  function AYe (line 92) | function AYe(t,e){var r;let s=new Set(t),a=eB[(r=e?.missingIf)!==null&&r...
  function tB (line 92) | function tB(t,e,r,s){var a,n;let c=new Set((a=s?.ignore)!==null&&a!==voi...
  method constructor (line 92) | constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=`
  method constructor (line 94) | constructor(){this.help=!1}
  method Usage (line 94) | static Usage(e){return e}
  method catch (line 94) | async catch(e){throw e}
  method validateAndExecute (line 94) | async validateAndExecute(){let r=this.constructor.schema;if(Array.isArra...
  function il (line 94) | function il(t){l_&&console.log(t)}
  function Mre (line 94) | function Mre(){let t={nodes:[]};for(let e=0;e<En.CustomNode;++e)t.nodes....
  function hYe (line 94) | function hYe(t){let e=Mre(),r=[],s=e.nodes.length;for(let a of t){r.push...
  function Ou (line 94) | function Ou(t,e){return t.nodes.push(e),t.nodes.length-1}
  function gYe (line 94) | function gYe(t){let e=new Set,r=s=>{if(e.has(s))return;e.add(s);let a=t....
  function dYe (line 94) | function dYe(t,{prefix:e=""}={}){if(l_){il(`${e}Nodes are:`);for(let r=0...
  function mYe (line 94) | function mYe(t,e,r=!1){il(`Running a vm on ${JSON.stringify(e)}`);let s=...
  function yYe (line 94) | function yYe(t,e,{endToken:r=ei.EndOfInput}={}){let s=mYe(t,[...e,r]);re...
  function EYe (line 94) | function EYe(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path....
  function IYe (line 94) | function IYe(t,e){let r=e.filter(S=>S.selectedIndex!==null),s=r.filter(S...
  function CYe (line 94) | function CYe(t){let e=[],r=[];for(let s of t)s.selectedIndex===Nd?r.push...
  function Ure (line 94) | function Ure(t,e,...r){return e===void 0?Array.from(t):Ure(t.filter((s,a...
  function _l (line 94) | function _l(){return{dynamics:[],shortcuts:[],statics:{}}}
  function _re (line 94) | function _re(t){return t===En.SuccessNode||t===En.ErrorNode}
  function E_ (line 94) | function E_(t,e=0){return{to:_re(t.to)?t.to:t.to>=En.CustomNode?t.to+e-E...
  function wYe (line 94) | function wYe(t,e=0){let r=_l();for(let[s,a]of t.dynamics)r.dynamics.push...
  function Hs (line 94) | function Hs(t,e,r,s,a){t.nodes[e].dynamics.push([r,{to:s,reducer:a}])}
  function BE (line 94) | function BE(t,e,r,s){t.nodes[e].shortcuts.push({to:r,reducer:s})}
  function Ia (line 94) | function Ia(t,e,r,s,a){(Object.prototype.hasOwnProperty.call(t.nodes[e]....
  function Ox (line 94) | function Ox(t,e,r,s,a){if(Array.isArray(e)){let[n,...c]=e;return t[n](r,...
  method constructor (line 94) | constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trai...
  method addPath (line 94) | addPath(e){this.paths.push(e)}
  method setArity (line 94) | setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,ex...
  method addPositional (line 94) | addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra==...
  method addRest (line 94) | addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===Hl)throw n...
  method addProxy (line 94) | addProxy({required:e=0}={}){this.addRest({required:e}),this.arity.proxy=!0}
  method addOption (line 94) | addOption({names:e,description:r,arity:s=0,hidden:a=!1,required:n=!1,all...
  method setContext (line 94) | setContext(e){this.context=e}
  method usage (line 94) | usage({detailed:e=!0,inlineOptions:r=!0}={}){let s=[this.cliOpts.binaryN...
  method compile (line 94) | compile(){if(typeof this.context>"u")throw new Error("Assertion failed: ...
  method registerOptions (line 94) | registerOptions(e,r){Hs(e,r,["isOption","--"],r,"inhibateOptions"),Hs(e,...
  method constructor (line 94) | constructor({binaryName:e="..."}={}){this.builders=[],this.opts={binaryN...
  method build (line 94) | static build(e,r={}){return new t(r).commands(e).compile()}
  method getBuilderByIndex (line 94) | getBuilderByIndex(e){if(!(e>=0&&e<this.builders.length))throw new Error(...
  method commands (line 94) | commands(e){for(let r of e)r(this.command());return this}
  method command (line 94) | command(){let e=new C_(this.builders.length,this.opts);return this.build...
  method compile (line 94) | compile(){let e=[],r=[];for(let a of this.builders){let{machine:n,contex...
  function jre (line 94) | function jre(){return Ux.default&&"getColorDepth"in Ux.default.WriteStre...
  function Gre (line 94) | function Gre(t){let e=Hre;if(typeof e>"u"){if(t.stdout===process.stdout&...
  method constructor (line 94) | constructor(e){super(),this.contexts=e,this.commands=[]}
  method from (line 94) | static from(e,r){let s=new t(r);s.path=e.path;for(let a of e.options)swi...
  method execute (line 94) | async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index...
  function Jre (line 98) | async function Jre(...t){let{resolvedOptions:e,resolvedCommandClasses:r,...
  function Kre (line 98) | async function Kre(...t){let{resolvedOptions:e,resolvedCommandClasses:r,...
  function zre (line 98) | function zre(t){let e,r,s,a;switch(typeof process<"u"&&typeof process.ar...
  function Vre (line 98) | function Vre(t){return t()}
  method constructor (line 98) | constructor({binaryLabel:e,binaryName:r="...",binaryVersion:s,enableCapt...
  method from (line 98) | static from(e,r={}){let s=new t(r),a=Array.isArray(e)?e:[e];for(let n of...
  method register (line 98) | register(e){var r;let s=new Map,a=new e;for(let p in a){let h=a[p];typeo...
  method process (line 98) | process(e,r){let{input:s,context:a,partial:n}=typeof e=="object"&&Array....
  method run (line 98) | async run(e,r){var s,a;let n,c={...t.defaultContext,...r},f=(s=this.enab...
  method runExit (line 98) | async runExit(e,r){process.exitCode=await this.run(e,r)}
  method definition (line 98) | definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:s}=thi...
  method definitions (line 98) | definitions({colored:e=!1}={}){let r=[];for(let s of this.registrations....
  method usage (line 98) | usage(e=null,{colored:r,detailed:s=!1,prefix:a="$ "}={}){var n;if(e===nu...
  method error (line 124) | error(e,r){var s,{colored:a,command:n=(s=e[Yre])!==null&&s!==void 0?s:nu...
  method format (line 127) | format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:t.d...
  method getUsageByRegistration (line 127) | getUsageByRegistration(e,r){let s=this.registrations.get(e);if(typeof s>...
  method getUsageByIndex (line 127) | getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}
  method execute (line 127) | async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.def...
  method execute (line 128) | async execute(){this.context.stdout.write(this.cli.usage())}
  function Hx (line 128) | function Hx(t={}){return ya({definition(e,r){var s;e.addProxy({name:(s=t...
  method constructor (line 128) | constructor(){super(...arguments),this.args=Hx()}
  method execute (line 128) | async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.pro...
  method execute (line 129) | async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVer...
  function nne (line 130) | function nne(t,e,r){let[s,a]=Gf(e,r??{}),{arity:n=1}=a,c=t.split(","),f=...
  function sne (line 130) | function sne(t,e,r){let[s,a]=Gf(e,r??{}),n=t.split(","),c=new Set(n);ret...
  function ane (line 130) | function ane(t,e,r){let[s,a]=Gf(e,r??{}),n=t.split(","),c=new Set(n);ret...
  function cne (line 130) | function cne(t={}){return ya({definition(e,r){var s;e.addRest({name:(s=t...
  function vYe (line 130) | function vYe(t,e,r){let[s,a]=Gf(e,r??{}),{arity:n=1}=a,c=t.split(","),f=...
  function SYe (line 130) | function SYe(t={}){let{required:e=!0}=t;return ya({definition(r,s){var a...
  function fne (line 130) | function fne(t,...e){return typeof t=="string"?vYe(t,...e):SYe(t)}
  function QYe (line 130) | function QYe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,`
  function TYe (line 132) | function TYe(t){let e=mne(t),r=js.configDotenv({path:e});if(!r.parsed)th...
  function RYe (line 132) | function RYe(t){console.log(`[dotenv@${D_}][INFO] ${t}`)}
  function FYe (line 132) | function FYe(t){console.log(`[dotenv@${D_}][WARN] ${t}`)}
  function v_ (line 132) | function v_(t){console.log(`[dotenv@${D_}][DEBUG] ${t}`)}
  function dne (line 132) | function dne(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_K...
  function NYe (line 132) | function NYe(t,e){let r;try{r=new URL(e)}catch(f){throw f.code==="ERR_IN...
  function mne (line 132) | function mne(t){let e=S_.resolve(process.cwd(),".env");return t&&t.path&...
  function OYe (line 132) | function OYe(t){return t[0]==="~"?S_.join(bYe.homedir(),t.slice(1)):t}
  function LYe (line 132) | function LYe(t){RYe("Loading env from encrypted .env.vault");let e=js._p...
  function MYe (line 132) | function MYe(t){let e=S_.resolve(process.cwd(),".env"),r="utf8",s=!!(t&&...
  function UYe (line 132) | function UYe(t){let e=mne(t);return dne(t).length===0?js.configDotenv(t)...
  function _Ye (line 132) | function _Ye(t,e){let r=Buffer.from(e.slice(-64),"hex"),s=Buffer.from(t,...
  function HYe (line 132) | function HYe(t,e,r={}){let s=!!(r&&r.debug),a=!!(r&&r.override);if(typeo...
  function Yf (line 132) | function Yf(t){return`YN${t.toString(10).padStart(4,"0")}`}
  function jx (line 132) | function jx(t){let e=Number(t.slice(2));if(typeof Br[e]>"u")throw new Er...
  method constructor (line 132) | constructor(e,r){if(r=aVe(r),e instanceof t){if(e.loose===!!r.loose&&e.i...
  method format (line 132) | format(){return this.version=`${this.major}.${this.minor}.${this.patch}`...
  method toString (line 132) | toString(){return this.version}
  method compare (line 132) | compare(e){if(Wx("SemVer.compare",this.version,this.options,e),!(e insta...
  method compareMain (line 132) | compareMain(e){return e instanceof t||(e=new t(e,this.options)),SE(this....
  method comparePre (line 132) | comparePre(e){if(e instanceof t||(e=new t(e,this.options)),this.prerelea...
  method compareBuild (line 132) | compareBuild(e){e instanceof t||(e=new t(e,this.options));let r=0;do{let...
  method inc (line 132) | inc(e,r,s){switch(e){case"premajor":this.prerelease.length=0,this.patch=...
  function Fn (line 132) | function Fn(t){var e=this;if(e instanceof Fn||(e=new Fn),e.tail=null,e.h...
  function t7e (line 132) | function t7e(t,e,r){var s=e===t.head?new Ud(r,null,e,t):new Ud(r,e,e.nex...
  function r7e (line 132) | function r7e(t,e){t.tail=new Ud(e,t.tail,null,t),t.head||(t.head=t.tail)...
  function n7e (line 132) | function n7e(t,e){t.head=new Ud(e,null,t.head,t),t.tail||(t.tail=t.head)...
  function Ud (line 132) | function Ud(t,e,r,s){if(!(this instanceof Ud))return new Ud(t,e,r,s);thi...
  method constructor (line 132) | constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(type...
  method max (line 132) | set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a...
  method max (line 132) | get max(){return this[_d]}
  method allowStale (line 132) | set allowStale(e){this[fB]=!!e}
  method allowStale (line 132) | get allowStale(){return this[fB]}
  method maxAge (line 132) | set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be ...
  method maxAge (line 132) | get maxAge(){return this[Hd]}
  method lengthCalculator (line 132) | set lengthCalculator(e){typeof e!="function"&&(e=N_),e!==this[DE]&&(this...
  method lengthCalculator (line 132) | get lengthCalculator(){return this[DE]}
  method length (line 132) | get length(){return this[Sp]}
  method itemCount (line 132) | get itemCount(){return this[Gs].length}
  method rforEach (line 132) | rforEach(e,r){r=r||this;for(let s=this[Gs].tail;s!==null;){let a=s.prev;...
  method forEach (line 132) | forEach(e,r){r=r||this;for(let s=this[Gs].head;s!==null;){let a=s.next;v...
  method keys (line 132) | keys(){return this[Gs].toArray().map(e=>e.key)}
  method values (line 132) | values(){return this[Gs].toArray().map(e=>e.value)}
  method reset (line 132) | reset(){this[vp]&&this[Gs]&&this[Gs].length&&this[Gs].forEach(e=>this[vp...
  method dump (line 132) | dump(){return this[Gs].map(e=>ek(this,e)?!1:{k:e.key,v:e.value,e:e.now+(...
  method dumpLru (line 132) | dumpLru(){return this[Gs]}
  method set (line 132) | set(e,r,s){if(s=s||this[Hd],s&&typeof s!="number")throw new TypeError("m...
  method has (line 132) | has(e){if(!this[Lu].has(e))return!1;let r=this[Lu].get(e).value;return!e...
  method get (line 132) | get(e){return O_(this,e,!0)}
  method peek (line 132) | peek(e){return O_(this,e,!1)}
  method pop (line 132) | pop(){let e=this[Gs].tail;return e?(bE(this,e),e.value):null}
  method del (line 132) | del(e){bE(this,this[Lu].get(e))}
  method load (line 132) | load(e){this.reset();let r=Date.now();for(let s=e.length-1;s>=0;s--){let...
  method prune (line 132) | prune(){this[Lu].forEach((e,r)=>O_(this,r,!1))}
  method constructor (line 132) | constructor(e,r,s,a,n){this.key=e,this.value=r,this.length=s,this.now=a,...
  method constructor (line 132) | constructor(e,r){if(r=o7e(r),e instanceof t)return e.loose===!!r.loose&&...
  method format (line 132) | format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||"...
  method toString (line 132) | toString(){return this.range}
  method parseRange (line 132) | parseRange(e){let s=((this.options.includePrerelease&&f7e)|(this.options...
  method intersects (line 132) | intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is req...
  method test (line 132) | test(e){if(!e)return!1;if(typeof e=="string")try{e=new a7e(e,this.option...
  method ANY (line 132) | static get ANY(){return pB}
  method constructor (line 132) | constructor(e,r){if(r=Tie(r),e instanceof t){if(e.loose===!!r.loose)retu...
  method parse (line 132) | parse(e){let r=this.options.loose?Rie[Fie.COMPARATORLOOSE]:Rie[Fie.COMPA...
  method toString (line 132) | toString(){return this.value}
  method test (line 132) | test(e){if(j_("Comparator.test",e,this.options.loose),this.semver===pB||...
  method intersects (line 132) | intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator i...
  function _Je (line 132) | function _Je(t,e){function r(){this.constructor=t}r.prototype=e.prototyp...
  function jd (line 132) | function jd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.lo...
  function s (line 132) | function s(h){return h.charCodeAt(0).toString(16).toUpperCase()}
  function a (line 132) | function a(h){return h.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace...
  function n (line 132) | function n(h){return h.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replac...
  function c (line 132) | function c(h){return r[h.type](h)}
  function f (line 132) | function f(h){var E=new Array(h.length),C,S;for(C=0;C<h.length;C++)E[C]=...
  function p (line 132) | function p(h){return h?'"'+a(h)+'"':"end of input"}
  function HJe (line 132) | function HJe(t,e){e=e!==void 0?e:{};var r={},s={Expression:y},a=y,n="|",...
  function GJe (line 134) | function GJe(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}
  function qJe (line 134) | function qJe(){let t={},e=Object.keys(nk);for(let r=e.length,s=0;s<r;s++...
  function WJe (line 134) | function WJe(t){let e=qJe(),r=[t];for(e[t].distance=0;r.length;){let s=r...
  function YJe (line 134) | function YJe(t,e){return function(r){return e(t(r))}}
  function VJe (line 134) | function VJe(t,e){let r=[e[t].parent,t],s=nk[e[t].parent][t],a=e[t].pare...
  function zJe (line 134) | function zJe(t){let e=function(...r){let s=r[0];return s==null?s:(s.leng...
  function XJe (line 134) | function XJe(t){let e=function(...r){let s=r[0];if(s==null)return s;s.le...
  function ZJe (line 134) | function ZJe(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2...
  function Z_ (line 134) | function Z_(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t...
  function $_ (line 134) | function $_(t,e){if(l0===0)return 0;if(Sc("color=16m")||Sc("color=full")...
  function eKe (line 134) | function eKe(t){let e=$_(t,t&&t.isTTY);return Z_(e)}
  function Gse (line 138) | function Gse(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5...
  function aKe (line 138) | function aKe(t,e){let r=[],s=e.trim().split(/\s*,\s*/g),a;for(let n of s...
  function lKe (line 138) | function lKe(t){Hse.lastIndex=0;let e=[],r;for(;(r=Hse.exec(t))!==null;)...
  function jse (line 138) | function jse(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=...
  method constructor (line 138) | constructor(e){return Jse(e)}
  function ak (line 138) | function ak(t){return Jse(t)}
  method get (line 138) | get(){let r=lk(this,i4(e.open,e.close,this._styler),this._isEmpty);retur...
  method get (line 138) | get(){let t=lk(this,this._styler,!0);return Object.defineProperty(this,"...
  method get (line 138) | get(){let{level:e}=this;return function(...r){let s=i4(mB.color[Vse[e]][...
  method get (line 138) | get(){let{level:r}=this;return function(...s){let a=i4(mB.bgColor[Vse[r]...
  method get (line 138) | get(){return this._generator.level}
  method set (line 138) | set(t){this._generator.level=t}
  function pKe (line 139) | function pKe(t,e,r){let s=s4(t,e,"-",!1,r)||[],a=s4(e,t,"",!1,r)||[],n=s...
  function hKe (line 139) | function hKe(t,e){let r=1,s=1,a=soe(t,r),n=new Set([e]);for(;t<=a&&a<=e;...
  function gKe (line 139) | function gKe(t,e,r){if(t===e)return{pattern:t,count:[],digits:0};let s=d...
  function noe (line 139) | function noe(t,e,r,s){let a=hKe(t,e),n=[],c=t,f;for(let p=0;p<a.length;p...
  function s4 (line 139) | function s4(t,e,r,s,a){let n=[];for(let c of t){let{string:f}=c;!s&&!ioe...
  function dKe (line 139) | function dKe(t,e){let r=[];for(let s=0;s<t.length;s++)r.push([t[s],e[s]]...
  function mKe (line 139) | function mKe(t,e){return t>e?1:e>t?-1:0}
  function ioe (line 139) | function ioe(t,e,r){return t.some(s=>s[e]===r)}
  function soe (line 139) | function soe(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}
  function ooe (line 139) | function ooe(t,e){return t-t%Math.pow(10,e)}
  function aoe (line 139) | function aoe(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}
  function yKe (line 139) | function yKe(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}
  function loe (line 139) | function loe(t){return/^-?(0+)\d/.test(t)}
  function EKe (line 139) | function EKe(t,e,r){if(!e.isPadded)return t;let s=Math.abs(e.maxLen-Stri...
  method extglobChars (line 140) | extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t....
  method globChars (line 140) | globChars(t){return t===!0?ize:Moe}
  function lae (line 140) | function lae(t){return Number.isSafeInteger(t)&&t>=0}
  function uae (line 140) | function uae(t){return t!=null&&typeof t!="function"&&lae(t.length)}
  function bc (line 140) | function bc(t){return t==="__proto__"}
  function NE (line 140) | function NE(t){switch(typeof t){case"number":case"symbol":return!1;case"...
  function OE (line 140) | function OE(t){return typeof t=="string"||typeof t=="symbol"?t:Object.is...
  function Mu (line 140) | function Mu(t){let e=[],r=t.length;if(r===0)return e;let s=0,a="",n="",c...
  function va (line 140) | function va(t,e,r){if(t==null)return r;switch(typeof e){case"string":{if...
  function Pze (line 140) | function Pze(t,e,r){if(e.length===0)return r;let s=t;for(let a=0;a<e.len...
  function C4 (line 140) | function C4(t){return t!==null&&(typeof t=="object"||typeof t=="function")}
  function ME (line 140) | function ME(t){return t==null||typeof t!="object"&&typeof t!="function"}
  function Ck (line 140) | function Ck(t,e){return t===e||Number.isNaN(t)&&Number.isNaN(e)}
  function Wd (line 140) | function Wd(t){return Object.getOwnPropertySymbols(t).filter(e=>Object.p...
  function Yd (line 140) | function Yd(t){return t==null?t===void 0?"[object Undefined]":"[object N...
  function GE (line 140) | function GE(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}
  function mae (line 140) | function mae(t,e){return u0(t,void 0,t,new Map,e)}
  function u0 (line 140) | function u0(t,e,r,s=new Map,a=void 0){let n=a?.(t,e,r,s);if(n!=null)retu...
  function c0 (line 140) | function c0(t,e,r=t,s,a){let n=[...Object.keys(e),...Wd(e)];for(let c=0;...
  function xze (line 140) | function xze(t){switch(Yd(t)){case Vd:case xk:case kk:case Qk:case HE:ca...
  function yae (line 140) | function yae(t){return u0(t,void 0,t,new Map,void 0)}
  function Iae (line 140) | function Iae(t,e){return mae(t,(r,s,a,n)=>{let c=e?.(r,s,a,n);if(c!=null...
  function f0 (line 140) | function f0(t){return Iae(t)}
  function Gk (line 140) | function Gk(t,e=Number.MAX_SAFE_INTEGER){switch(typeof t){case"number":r...
  function BB (line 140) | function BB(t){return t!==null&&typeof t=="object"&&Yd(t)==="[object Arg...
  function vB (line 140) | function vB(t,e){let r;if(Array.isArray(e)?r=e:typeof e=="string"&&NE(e)...
  function P4 (line 140) | function P4(t){return typeof t=="object"&&t!==null}
  function Bae (line 140) | function Bae(t){return typeof t=="symbol"||t instanceof Symbol}
  function Sae (line 140) | function Sae(t,e){return Array.isArray(t)?!1:typeof t=="number"||typeof ...
  function A0 (line 140) | function A0(t,e){if(t==null)return!0;switch(typeof e){case"symbol":case"...
  function bae (line 140) | function bae(t,e){let r=va(t,e.slice(0,-1),t),s=e[e.length-1];if(r?.[s]=...
  function Pae (line 140) | function Pae(t){return t==null}
  function Tae (line 140) | function Tae(t,e,r,s){if(t==null&&!C4(t))return t;let a=Sae(e,t)?[e]:Arr...
  function Jd (line 140) | function Jd(t,e,r){return Tae(t,e,()=>r,()=>{})}
  function Fae (line 140) | function Fae(t,e=0,r={}){typeof r!="object"&&(r={});let s=null,a=null,n=...
  function Q4 (line 140) | function Q4(t,e=0,r={}){let{leading:s=!0,trailing:a=!0}=r;return Fae(t,e...
  function T4 (line 140) | function T4(t){if(t==null)return"";if(typeof t=="string")return t;if(Arr...
  function R4 (line 140) | function R4(t){if(!t||typeof t!="object")return!1;let e=Object.getProtot...
  function Uae (line 140) | function Uae(t,e,r){return SB(t,e,void 0,void 0,void 0,void 0,r)}
  function SB (line 140) | function SB(t,e,r,s,a,n,c){let f=c(t,e,r,s,a,n);if(f!==void 0)return f;i...
  function DB (line 140) | function DB(t,e,r,s){if(Object.is(t,e))return!0;let a=Yd(t),n=Yd(e);if(a...
  function Hae (line 140) | function Hae(){}
  function F4 (line 140) | function F4(t,e){return Uae(t,e,Hae)}
  function qae (line 140) | function qae(t){return GE(t)}
  function Yae (line 140) | function Yae(t){if(typeof t!="object"||t==null)return!1;if(Object.getPro...
  function Jae (line 140) | function Jae(t){if(ME(t))return t;if(Array.isArray(t)||GE(t)||t instance...
  function N4 (line 140) | function N4(t,...e){let r=e.slice(0,-1),s=e[e.length-1],a=t;for(let n=0;...
  function qk (line 140) | function qk(t,e,r,s){if(ME(t)&&(t=Object(t)),e==null||typeof e!="object"...
  function O4 (line 140) | function O4(t,...e){if(t==null)return{};let r=yae(t);for(let s=0;s<e.len...
  function Kd (line 140) | function Kd(t,...e){if(Pae(t))return{};let r={};for(let s=0;s<e.length;s...
  function $ae (line 140) | function $ae(t){return t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}
  function bB (line 140) | function bB(t){return $ae(T4(t))}
  function Rze (line 140) | function Rze(t){return!!(sle.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9...
  function Wk (line 140) | function Wk(t,{one:e,more:r,zero:s=r}){return t===0?s:t===1?e:r}
  function Fze (line 140) | function Fze(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}
  function Nze (line 140) | function Nze(t){}
  function G4 (line 140) | function G4(t){throw new Error(`Assertion failed: Unexpected object '${t...
  function Oze (line 140) | function Oze(t,e){let r=Object.values(t);if(!r.includes(e))throw new nt(...
  function Wl (line 140) | function Wl(t,e){let r=[];for(let s of t){let a=e(s);a!==ole&&r.push(a)}...
  function p0 (line 140) | function p0(t,e){for(let r of t){let s=e(r);if(s!==ale)return s}}
  function L4 (line 140) | function L4(t){return typeof t=="object"&&t!==null}
  function Uu (line 140) | async function Uu(t){let e=await Promise.allSettled(t),r=[];for(let s of...
  function Yk (line 140) | function Yk(t){if(t instanceof Map&&(t=Object.fromEntries(t)),L4(t))for(...
  function Yl (line 140) | function Yl(t,e,r){let s=t.get(e);return typeof s>"u"&&t.set(e,s=r()),s}
  function xB (line 140) | function xB(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}
  function bp (line 140) | function bp(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}
  function q4 (line 140) | function q4(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}
  function Lze (line 140) | async function Lze(t,e){if(e==null)return await t();try{return await t()...
  function qE (line 140) | async function qE(t,e){try{return await t()}catch(r){throw r.message=e(r...
  function W4 (line 140) | function W4(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}
  function WE (line 140) | async function WE(t){return await new Promise((e,r)=>{let s=[];t.on("err...
  function lle (line 140) | function lle(){let t,e;return{promise:new Promise((s,a)=>{t=s,e=a}),reso...
  function cle (line 140) | function cle(t){return PB(fe.fromPortablePath(t))}
  function ule (line 140) | function ule(path){let physicalPath=fe.fromPortablePath(path),currentCac...
  function Mze (line 140) | function Mze(t){let e=rle.get(t),r=ce.statSync(t);if(e?.mtime===r.mtimeM...
  function Pp (line 140) | function Pp(t,{cachingStrategy:e=2}={}){switch(e){case 0:return ule(t);c...
  function qs (line 140) | function qs(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let s=[];...
  function Uze (line 140) | function Uze(t){return t.length===0?null:t.map(e=>`(${nle.default.makeRe...
  function Vk (line 140) | function Vk(t,{env:e}){let r=/\\?\${(?<variableName>[\d\w_]+)(?<colon>:)...
  function kB (line 140) | function kB(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"...
  function Ale (line 140) | function Ale(t){return typeof t>"u"?t:kB(t)}
  function Y4 (line 140) | function Y4(t){try{return Ale(t)}catch{return null}}
  function _ze (line 140) | function _ze(t){return!!(fe.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}
  function ple (line 140) | function ple(t,...e){let r=c=>({value:c}),s=r(t),a=e.map(c=>r(c)),{value...
  function Hze (line 140) | function Hze(...t){return ple({},...t)}
  function jze (line 140) | function jze(t,e){let r=Object.create(null);for(let s of t){let a=s[e];r...
  function YE (line 140) | function YE(t){return typeof t=="string"?Number.parseInt(t,10):t}
  function Jk (line 140) | function Jk(t,e){let r=Gze.exec(t)?.groups;if(!r)throw new Error(`Couldn...
  method constructor (line 140) | constructor(){super(...arguments);this.chunks=[]}
  method _transform (line 140) | _transform(r,s,a){if(s!=="buffer"||!Buffer.isBuffer(r))throw new Error("...
  method _flush (line 140) | _flush(r){r(null,Buffer.concat(this.chunks))}
  method constructor (line 140) | constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0...
  method set (line 140) | set(e,r){let s=this.deferred.get(e);typeof s>"u"&&this.deferred.set(e,s=...
  method reduce (line 140) | reduce(e,r){let s=this.promises.get(e)??Promise.resolve();this.set(e,()=...
  method wait (line 140) | async wait(){await Promise.all(this.promises.values())}
  method constructor (line 140) | constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}
  method _transform (line 140) | _transform(r,s,a){if(s!=="buffer"||!Buffer.isBuffer(r))throw new Error("...
  method _flush (line 140) | _flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}
  function gle (line 140) | function gle(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1...
  function Kk (line 140) | function Kk(t,e){if(Array.isArray(e))return e.length===0?ri(t,"[]",ht.CO...
  function _u (line 140) | function _u(t,e){return[e,t]}
  function zd (line 140) | function zd(t,e,r){return t.get("enableColors")&&r&2&&(e=TB.default.bold...
  function ri (line 140) | function ri(t,e,r){if(!t.get("enableColors"))return e;let s=qze.get(r);i...
  function KE (line 140) | function KE(t,e,r){return t.get("enableHyperlinks")?Wze?`\x1B]8;;${r}\x1...
  function Ht (line 140) | function Ht(t,e,r){if(e===null)return ri(t,"null",ht.NULL);if(Object.has...
  function Z4 (line 140) | function Z4(t,e,r,{separator:s=", "}={}){return[...e].map(a=>Ht(t,a,r))....
  function Xd (line 140) | function Xd(t,e){if(t===null)return null;if(Object.hasOwn(zk,e))return z...
  function Yze (line 140) | function Yze(t,e,[r,s]){return t?Xd(r,s):Ht(e,r,s)}
  function $4 (line 140) | function $4(t){return{Check:ri(t,"\u2713","green"),Cross:ri(t,"\u2718","...
  function Kf (line 140) | function Kf(t,{label:e,value:[r,s]}){return`${Ht(t,e,ht.CODE)}: ${Ht(t,r...
  function $k (line 140) | function $k(t,e,r){let s=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=...
  function RB (line 140) | function RB(t,{configuration:e}){let r=e.get("logFilters"),s=new Map,a=n...
  function Vze (line 140) | function Vze(t){return t.reduce((e,r)=>[].concat(e,r),[])}
  function Jze (line 140) | function Jze(t,e){let r=[[]],s=0;for(let a of t)e(a)?(s++,r[s]=[]):r[s]....
  function Kze (line 140) | function Kze(t){return t.code==="ENOENT"}
  method constructor (line 140) | constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),...
  function zze (line 140) | function zze(t,e){return new r3(t,e)}
  function iXe (line 140) | function iXe(t){return t.replace(/\\/g,"/")}
  function sXe (line 140) | function sXe(t,e){return Zze.resolve(t,e)}
  function oXe (line 140) | function oXe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e===...
  function n3 (line 140) | function n3(t){return t.replace(tXe,"\\$2")}
  function i3 (line 140) | function i3(t){return t.replace(eXe,"\\$2")}
  function Cle (line 140) | function Cle(t){return n3(t).replace(rXe,"//$1").replace(nXe,"/")}
  function wle (line 140) | function wle(t){return i3(t)}
  function Tle (line 140) | function Tle(t,e={}){return!Rle(t,e)}
  function Rle (line 140) | function Rle(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.in...
  function DXe (line 140) | function DXe(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf(...
  function bXe (line 140) | function bXe(t){return nQ(t)?t.slice(1):t}
  function PXe (line 140) | function PXe(t){return"!"+t}
  function nQ (line 140) | function nQ(t){return t.startsWith("!")&&t[1]!=="("}
  function Fle (line 140) | function Fle(t){return!nQ(t)}
  function xXe (line 140) | function xXe(t){return t.filter(nQ)}
  function kXe (line 140) | function kXe(t){return t.filter(Fle)}
  function QXe (line 140) | function QXe(t){return t.filter(e=>!a3(e))}
  function TXe (line 140) | function TXe(t){return t.filter(a3)}
  function a3 (line 140) | function a3(t){return t.startsWith("..")||t.startsWith("./..")}
  function RXe (line 140) | function RXe(t){return yXe(t,{flipBackslashes:!1})}
  function FXe (line 140) | function FXe(t){return t.includes(Qle)}
  function Nle (line 140) | function Nle(t){return t.endsWith("/"+Qle)}
  function NXe (line 140) | function NXe(t){let e=mXe.basename(t);return Nle(t)||Tle(e)}
  function OXe (line 140) | function OXe(t){return t.reduce((e,r)=>e.concat(Ole(r)),[])}
  function Ole (line 140) | function Ole(t){let e=o3.braces(t,{expand:!0,nodupes:!0,keepEscaping:!0}...
  function LXe (line 140) | function LXe(t,e){let{parts:r}=o3.scan(t,Object.assign(Object.assign({},...
  function Lle (line 140) | function Lle(t,e){return o3.makeRe(t,e)}
  function MXe (line 140) | function MXe(t,e){return t.map(r=>Lle(r,e))}
  function UXe (line 140) | function UXe(t,e){return e.some(r=>r.test(t))}
  function _Xe (line 140) | function _Xe(t){return t.replace(SXe,"/")}
  function GXe (line 140) | function GXe(){let t=[],e=jXe.call(arguments),r=!1,s=e[e.length-1];s&&!A...
  function _le (line 140) | function _le(t,e){if(Array.isArray(t))for(let r=0,s=t.length;r<s;r++)t[r...
  function WXe (line 140) | function WXe(t){let e=qXe(t);return t.forEach(r=>{r.once("error",s=>e.em...
  function Gle (line 140) | function Gle(t){t.forEach(e=>e.emit("close"))}
  function YXe (line 140) | function YXe(t){return typeof t=="string"}
  function VXe (line 140) | function VXe(t){return t===""}
  function tZe (line 140) | function tZe(t,e){let r=Yle(t,e),s=Yle(e.ignore,e),a=Vle(r),n=Jle(r,s),c...
  function Yle (line 140) | function Yle(t,e){let r=t;return e.braceExpansion&&(r=Hu.pattern.expandP...
  function l3 (line 140) | function l3(t,e,r){let s=[],a=Hu.pattern.getPatternsOutsideCurrentDirect...
  function Vle (line 140) | function Vle(t){return Hu.pattern.getPositivePatterns(t)}
  function Jle (line 140) | function Jle(t,e){return Hu.pattern.getNegativePatterns(t).concat(e).map...
  function c3 (line 140) | function c3(t){let e={};return t.reduce((r,s)=>{let a=Hu.pattern.getBase...
  function u3 (line 140) | function u3(t,e,r){return Object.keys(t).map(s=>f3(s,t[s],e,r))}
  function f3 (line 140) | function f3(t,e,r,s){return{dynamic:s,positive:e,negative:r,base:t,patte...
  function rZe (line 140) | function rZe(t,e,r){e.fs.lstat(t,(s,a)=>{if(s!==null){zle(r,s);return}if...
  function zle (line 140) | function zle(t,e){t(e)}
  function A3 (line 140) | function A3(t,e){t(null,e)}
  function nZe (line 140) | function nZe(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.fol...
  function iZe (line 140) | function iZe(t){return t===void 0?h0.FILE_SYSTEM_ADAPTER:Object.assign(O...
  method constructor (line 140) | constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue...
  method _getValue (line 140) | _getValue(e,r){return e??r}
  function aZe (line 140) | function aZe(t,e,r){if(typeof e=="function"){tce.read(t,d3(),e);return}t...
  function lZe (line 140) | function lZe(t,e){let r=d3(e);return oZe.read(t,r)}
  function d3 (line 140) | function d3(t={}){return t instanceof g3.default?t:new g3.default(t)}
  function uZe (line 140) | function uZe(t,e){let r,s,a,n=!0;Array.isArray(t)?(r=[],s=t.length):(a=O...
  method constructor (line 140) | constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),...
  function gZe (line 140) | function gZe(t,e){return new y3(t,e)}
  function mZe (line 140) | function mZe(t,e,r){return t.endsWith(r)?t+e:t+r+e}
  function IZe (line 140) | function IZe(t,e,r){if(!e.stats&&EZe.IS_SUPPORT_READDIR_WITH_FILE_TYPES)...
  function pce (line 140) | function pce(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(s,a)=>{if(s!==nul...
  function CZe (line 140) | function CZe(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);re...
  function hce (line 140) | function hce(t,e,r){e.fs.readdir(t,(s,a)=>{if(s!==null){pQ(r,s);return}l...
  function pQ (line 140) | function pQ(t,e){t(e)}
  function C3 (line 140) | function C3(t,e){t(null,e)}
  function vZe (line 140) | function vZe(t,e){return!e.stats&&BZe.IS_SUPPORT_READDIR_WITH_FILE_TYPES...
  function yce (line 140) | function yce(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(s=>{...
  function Ece (line 140) | function Ece(t,e){return e.fs.readdirSync(t).map(s=>{let a=mce.joinPathS...
  function SZe (line 140) | function SZe(t){return t===void 0?y0.FILE_SYSTEM_ADAPTER:Object.assign(O...
  method constructor (line 140) | constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValu...
  method _getValue (line 140) | _getValue(e,r){return e??r}
  function kZe (line 140) | function kZe(t,e,r){if(typeof e=="function"){Bce.read(t,S3(),e);return}B...
  function QZe (line 140) | function QZe(t,e){let r=S3(e);return xZe.read(t,r)}
  function S3 (line 140) | function S3(t={}){return t instanceof v3.default?t:new v3.default(t)}
  function TZe (line 140) | function TZe(t){var e=new t,r=e;function s(){var n=e;return n.next?e=n.n...
  function Dce (line 140) | function Dce(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),!(r>=1))th...
  function kc (line 140) | function kc(){}
  function FZe (line 140) | function FZe(){this.value=null,this.callback=kc,this.next=null,this.rele...
  function NZe (line 140) | function NZe(t,e,r){typeof t=="function"&&(r=e,e=t,t=null);function s(E,...
  function OZe (line 140) | function OZe(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}
  function LZe (line 140) | function LZe(t,e){return t===null||t(e)}
  function MZe (line 140) | function MZe(t,e){return t.split(/[/\\]/).join(e)}
  function UZe (line 140) | function UZe(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}
  method constructor (line 140) | constructor(e,r){this._root=e,this._settings=r,this._root=_Ze.replacePat...
  method constructor (line 140) | constructor(e,r){super(e,r),this._settings=r,this._scandir=jZe.scandir,t...
  method read (line 140) | read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()...
  method isDestroyed (line 140) | get isDestroyed(){return this._isDestroyed}
  method destroy (line 140) | destroy(){if(this._isDestroyed)throw new Error("The reader is already de...
  method onEntry (line 140) | onEntry(e){this._emitter.on("entry",e)}
  method onError (line 140) | onError(e){this._emitter.once("error",e)}
  method onEnd (line 140) | onEnd(e){this._emitter.once("end",e)}
  method _pushToQueue (line 140) | _pushToQueue(e,r){let s={directory:e,base:r};this._queue.push(s,a=>{a!==...
  method _worker (line 140) | _worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,...
  method _handleError (line 140) | _handleError(e){this._isDestroyed||!dQ.isFatalError(this._settings,e)||(...
  method _handleEntry (line 140) | _handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let s=...
  method _emitEntry (line 140) | _emitEntry(e){this._emitter.emit("entry",e)}
  method constructor (line 140) | constructor(e,r){this._root=e,this._settings=r,this._reader=new WZe.defa...
  method read (line 140) | read(e){this._reader.onError(r=>{YZe(e,r)}),this._reader.onEntry(r=>{thi...
  function YZe (line 140) | function YZe(t,e){t(e)}
  function VZe (line 140) | function VZe(t,e){t(null,e)}
  method constructor (line 140) | constructor(e,r){this._root=e,this._settings=r,this._reader=new KZe.defa...
  method read (line 140) | read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),th...
  method constructor (line 140) | constructor(){super(...arguments),this._scandir=zZe.scandirSync,this._st...
  method read (line 140) | read(){return this._pushToQueue(this._root,this._settings.basePath),this...
  method _pushToQueue (line 140) | _pushToQueue(e,r){this._queue.add({directory:e,base:r})}
  method _handleQueue (line 140) | _handleQueue(){for(let e of this._queue.values())this._handleDirectory(e...
  method _handleDirectory (line 140) | _handleDirectory(e,r){try{let s=this._scandir(e,this._settings.fsScandir...
  method _handleError (line 140) | _handleError(e){if(mQ.isFatalError(this._settings,e))throw e}
  method _handleEntry (line 140) | _handleEntry(e,r){let s=e.path;r!==void 0&&(e.path=mQ.joinPathSegments(r...
  method _pushToStorage (line 140) | _pushToStorage(e){this._storage.push(e)}
  method constructor (line 140) | constructor(e,r){this._root=e,this._settings=r,this._reader=new ZZe.defa...
  method read (line 140) | read(){return this._reader.read()}
  method constructor (line 140) | constructor(e={}){this._options=e,this.basePath=this._getValue(this._opt...
  method _getValue (line 140) | _getValue(e,r){return e??r}
  function n$e (line 140) | function n$e(t,e,r){if(typeof e=="function"){new Rce.default(t,yQ()).rea...
  function i$e (line 140) | function i$e(t,e){let r=yQ(e);return new r$e.default(t,r).read()}
  function s$e (line 140) | function s$e(t,e){let r=yQ(e);return new t$e.default(t,r).read()}
  function yQ (line 140) | function yQ(t={}){return t instanceof G3.default?t:new G3.default(t)}
  method constructor (line 140) | constructor(e){this._settings=e,this._fsStatSettings=new a$e.Settings({f...
  method _getFullEntryPath (line 140) | _getFullEntryPath(e){return o$e.resolve(this._settings.cwd,e)}
  method _makeEntry (line 140) | _makeEntry(e,r){let s={name:r,path:r,dirent:Fce.fs.createDirentFromStats...
  method _isFatalError (line 140) | _isFatalError(e){return!Fce.errno.isEnoentCodeError(e)&&!this._settings....
  method constructor (line 140) | constructor(){super(...arguments),this._walkStream=u$e.walkStream,this._...
  method dynamic (line 140) | dynamic(e,r){return this._walkStream(e,r)}
  method static (line 140) | static(e,r){let s=e.map(this._getFullEntryPath,this),a=new l$e.PassThrou...
  method _getEntry (line 140) | _getEntry(e,r,s){return this._getStat(e).then(a=>this._makeEntry(a,r)).c...
  method _getStat (line 140) | _getStat(e){return new Promise((r,s)=>{this._stat(e,this._fsStatSettings...
  method constructor (line 140) | constructor(){super(...arguments),this._walkAsync=A$e.walk,this._readerS...
  method dynamic (line 140) | dynamic(e,r){return new Promise((s,a)=>{this._walkAsync(e,r,(n,c)=>{n===...
  method static (line 140) | async static(e,r){let s=[],a=this._readerStream.static(e,r);return new P...
  method constructor (line 140) | constructor(e,r,s){this._patterns=e,this._settings=r,this._micromatchOpt...
  method _fillStorage (line 140) | _fillStorage(){for(let e of this._patterns){let r=this._getPatternSegmen...
  method _getPatternSegments (line 140) | _getPatternSegments(e){return NB.pattern.getPatternParts(e,this._microma...
  method _splitSegmentsIntoSections (line 140) | _splitSegmentsIntoSections(e){return NB.array.splitWhen(e,r=>r.dynamic&&...
  method match (line 140) | match(e){let r=e.split("/"),s=r.length,a=this._storage.filter(n=>!n.comp...
  method constructor (line 140) | constructor(e,r){this._settings=e,this._micromatchOptions=r}
  method getFilter (line 140) | getFilter(e,r,s){let a=this._getMatcher(r),n=this._getNegativePatternsRe...
  method _getMatcher (line 140) | _getMatcher(e){return new d$e.default(e,this._settings,this._micromatchO...
  method _getNegativePatternsRe (line 140) | _getNegativePatternsRe(e){let r=e.filter(CQ.pattern.isAffectDepthOfReadi...
  method _filter (line 140) | _filter(e,r,s,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymb...
  method _isSkippedByDeep (line 140) | _isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntry...
  method _getEntryLevel (line 140) | _getEntryLevel(e,r){let s=r.split("/").length;if(e==="")return s;let a=e...
  method _isSkippedSymbolicLink (line 140) | _isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.d...
  method _isSkippedByPositivePatterns (line 140) | _isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!...
  method _isSkippedByNegativePatterns (line 140) | _isSkippedByNegativePatterns(e,r){return!CQ.pattern.matchAny(e,r)}
  method constructor (line 140) | constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=n...
  method getFilter (line 140) | getFilter(e,r){let s=$d.pattern.convertPatternsToRe(e,this._micromatchOp...
  method _filter (line 140) | _filter(e,r,s){let a=$d.path.removeLeadingDotSegment(e.path);if(this._se...
  method _isDuplicateEntry (line 140) | _isDuplicateEntry(e){return this.index.has(e)}
  method _createIndexRecord (line 140) | _createIndexRecord(e){this.index.set(e,void 0)}
  method _onlyFileFilter (line 140) | _onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}
  method _onlyDirectoryFilter (line 140) | _onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent...
  method _isSkippedByAbsoluteNegativePatterns (line 140) | _isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)re...
  method _isMatchToPatterns (line 140) | _isMatchToPatterns(e,r,s){let a=$d.pattern.matchAny(e,r);return!a&&s?$d....
  method constructor (line 140) | constructor(e){this._settings=e}
  method getFilter (line 140) | getFilter(){return e=>this._isNonFatalError(e)}
  method _isNonFatalError (line 140) | _isNonFatalError(e){return m$e.errno.isEnoentCodeError(e)||this._setting...
  method constructor (line 140) | constructor(e){this._settings=e}
  method getTransformer (line 140) | getTransformer(){return e=>this._transform(e)}
  method _transform (line 140) | _transform(e){let r=e.path;return this._settings.absolute&&(r=Hce.path.m...
  method constructor (line 140) | constructor(e){this._settings=e,this.errorFilter=new C$e.default(this._s...
  method _getRootDirectory (line 140) | _getRootDirectory(e){return y$e.resolve(this._settings.cwd,e.base)}
  method _getReaderOptions (line 140) | _getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,path...
  method _getMicromatchOptions (line 140) | _getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._se...
  method constructor (line 140) | constructor(){super(...arguments),this._reader=new B$e.default(this._set...
  method read (line 140) | async read(e){let r=this._getRootDirectory(e),s=this._getReaderOptions(e...
  method api (line 140) | api(e,r,s){return r.dynamic?this._reader.dynamic(e,s):this._reader.stati...
  method constructor (line 140) | constructor(){super(...arguments),this._reader=new D$e.default(this._set...
  method read (line 140) | read(e){let r=this._getRootDirectory(e),s=this._getReaderOptions(e),a=th...
  method api (line 140) | api(e,r,s){return r.dynamic?this._reader.dynamic(e,s):this._reader.stati...
  method constructor (line 140) | constructor(){super(...arguments),this._walkSync=x$e.walkSync,this._stat...
  method dynamic (line 140) | dynamic(e,r){return this._walkSync(e,r)}
  method static (line 140) | static(e,r){let s=[];for(let a of e){let n=this._getFullEntryPath(a),c=t...
  method _getEntry (line 140) | _getEntry(e,r,s){try{let a=this._getStat(e);return this._makeEntry(a,r)}...
  method _getStat (line 140) | _getStat(e){return this._statSync(e,this._fsStatSettings)}
  method constructor (line 140) | constructor(){super(...arguments),this._reader=new Q$e.default(this._set...
  method read (line 140) | read(e){let r=this._getRootDirectory(e),s=this._getReaderOptions(e);retu...
  method api (line 140) | api(e,r,s){return r.dynamic?this._reader.dynamic(e,s):this._reader.stati...
  method constructor (line 140) | constructor(e={}){this._options=e,this.absolute=this._getValue(this._opt...
  method _getValue (line 140) | _getValue(e,r){return e===void 0?r:e}
  method _getFileSystemMethods (line 140) | _getFileSystemMethods(e={}){return Object.assign(Object.assign({},eI.DEF...
  function C8 (line 140) | async function C8(t,e){ju(t);let r=w8(t,N$e.default,e),s=await Promise.a...
  function e (line 140) | function e(h,E){ju(h);let C=w8(h,L$e.default,E);return Qc.array.flatten(C)}
    method constructor (line 226) | constructor(s){super(s)}
    method submit (line 226) | async submit(){this.value=await t.call(this,this.values,this.state),su...
    method create (line 226) | static create(s){return pme(s)}
  function r (line 140) | function r(h,E){ju(h);let C=w8(h,O$e.default,E);return Qc.stream.merge(C)}
    method constructor (line 226) | constructor(a){super({...a,choices:e})}
    method create (line 226) | static create(a){return gme(a)}
  function s (line 140) | function s(h,E){ju(h);let C=[].concat(h),S=new I8.default(E);return Jce....
  function a (line 140) | function a(h,E){ju(h);let C=new I8.default(E);return Qc.pattern.isDynami...
  function n (line 140) | function n(h){return ju(h),Qc.path.escape(h)}
  function c (line 140) | function c(h){return ju(h),Qc.path.convertPathToPattern(h)}
  function E (line 140) | function E(S){return ju(S),Qc.path.escapePosixPath(S)}
  function C (line 140) | function C(S){return ju(S),Qc.path.convertPosixPathToPattern(S)}
  function E (line 140) | function E(S){return ju(S),Qc.path.escapeWindowsPath(S)}
  function C (line 140) | function C(S){return ju(S),Qc.path.convertWindowsPathToPattern(S)}
  function w8 (line 140) | function w8(t,e,r){let s=[].concat(t),a=new I8.default(r),n=Jce.generate...
  function ju (line 140) | function ju(t){if(![].concat(t).every(s=>Qc.string.isString(s)&&!Qc.stri...
  function us (line 140) | function us(...t){let e=(0,vQ.createHash)("sha512"),r="";for(let s of t)...
  function SQ (line 140) | async function SQ(t,{baseFs:e,algorithm:r}={baseFs:ce,algorithm:"sha512"...
  function DQ (line 140) | async function DQ(t,{cwd:e}){let s=(await(0,B8.default)(t,{cwd:fe.fromPo...
  function Da (line 140) | function Da(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: d...
  function On (line 140) | function On(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,...
  function Ws (line 140) | function Ws(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,...
  function _$e (line 140) | function _$e(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}
  function bQ (line 140) | function bQ(t){return{identHash:t.identHash,scope:t.scope,name:t.name,lo...
  function S8 (line 140) | function S8(t){return{identHash:t.identHash,scope:t.scope,name:t.name,de...
  function H$e (line 140) | function H$e(t){return{identHash:t.identHash,scope:t.scope,name:t.name,l...
  function D8 (line 140) | function D8(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,...
  function LB (line 140) | function LB(t){return D8(t,t)}
  function b8 (line 140) | function b8(t,e){if(e.includes("#"))throw new Error("Invalid entropy");r...
  function P8 (line 140) | function P8(t,e){if(e.includes("#"))throw new Error("Invalid entropy");r...
  function kp (line 140) | function kp(t){return t.range.startsWith(OB)}
  function Gu (line 140) | function Gu(t){return t.reference.startsWith(OB)}
  function MB (line 140) | function MB(t){if(!kp(t))throw new Error("Not a virtual descriptor");ret...
  function rI (line 140) | function rI(t){if(!Gu(t))throw new Error("Not a virtual descriptor");ret...
  function j$e (line 140) | function j$e(t){return kp(t)?On(t,t.range.replace(PQ,"")):t}
  function G$e (line 140) | function G$e(t){return Gu(t)?Ws(t,t.reference.replace(PQ,"")):t}
  function q$e (line 140) | function q$e(t,e){return t.range.includes("::")?t:On(t,`${t.range}::${tI...
  function W$e (line 140) | function W$e(t,e){return t.reference.includes("::")?t:Ws(t,`${t.referenc...
  function UB (line 140) | function UB(t,e){return t.identHash===e.identHash}
  function eue (line 140) | function eue(t,e){return t.descriptorHash===e.descriptorHash}
  function _B (line 140) | function _B(t,e){return t.locatorHash===e.locatorHash}
  function Y$e (line 140) | function Y$e(t,e){if(!Gu(t))throw new Error("Invalid package type");if(!...
  function Sa (line 140) | function Sa(t){let e=tue(t);if(!e)throw new Error(`Invalid ident (${t})`...
  function tue (line 140) | function tue(t){let e=t.match(V$e);if(!e)return null;let[,r,s]=e;return ...
  function C0 (line 140) | function C0(t,e=!1){let r=HB(t,e);if(!r)throw new Error(`Invalid descrip...
  function HB (line 140) | function HB(t,e=!1){let r=e?t.match(J$e):t.match(K$e);if(!r)return null;...
  function Qp (line 140) | function Qp(t,e=!1){let r=xQ(t,e);if(!r)throw new Error(`Invalid locator...
  function xQ (line 140) | function xQ(t,e=!1){let r=e?t.match(z$e):t.match(X$e);if(!r)return null;...
  function em (line 140) | function em(t,e){let r=t.match(Z$e);if(r===null)throw new Error(`Invalid...
  function $$e (line 140) | function $$e(t,e){try{return em(t,e)}catch{return null}}
  function eet (line 140) | function eet(t,{protocol:e}){let{selector:r,params:s}=em(t,{requireProto...
  function zce (line 140) | function zce(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A...
  function tet (line 140) | function tet(t){return t===null?!1:Object.entries(t).length>0}
  function kQ (line 140) | function kQ({protocol:t,source:e,selector:r,params:s}){let a="";return t...
  function ret (line 140) | function ret(t){let{params:e,protocol:r,source:s,selector:a}=em(t);for(l...
  function un (line 140) | function un(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}
  function net (line 140) | function net(t,e){return t.scope?Da(e,`${t.scope}__${t.name}`):Da(e,t.na...
  function iet (line 140) | function iet(t,e){if(t.scope!==e)return t;let r=t.name.indexOf("__");if(...
  function al (line 140) | function al(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.na...
  function ll (line 140) | function ll(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${...
  function v8 (line 140) | function v8(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}
  function nI (line 140) | function nI(t){let{protocol:e,selector:r}=em(t.reference),s=e!==null?e.r...
  function $i (line 140) | function $i(t,e){return e.scope?`${Ht(t,`@${e.scope}/`,ht.SCOPE)}${Ht(t,...
  function QQ (line 140) | function QQ(t){if(t.startsWith(OB)){let e=QQ(t.substring(t.indexOf("#")+...
  function iI (line 140) | function iI(t,e){return`${Ht(t,QQ(e),ht.RANGE)}`}
  function ni (line 140) | function ni(t,e){return`${$i(t,e)}${Ht(t,"@",ht.RANGE)}${iI(t,e.range)}`}
  function jB (line 140) | function jB(t,e){return`${Ht(t,QQ(e),ht.REFERENCE)}`}
  function Yr (line 140) | function Yr(t,e){return`${$i(t,e)}${Ht(t,"@",ht.REFERENCE)}${jB(t,e.refe...
  function e3 (line 140) | function e3(t){return`${un(t)}@${QQ(t.reference)}`}
  function sI (line 140) | function sI(t){return qs(t,[e=>un(e),e=>e.range])}
  function GB (line 140) | function GB(t,e){return $i(t,e.anchoredLocator)}
  function FB (line 140) | function FB(t,e,r){let s=kp(e)?MB(e):e;return r===null?`${ni(t,s)} \u219...
  function t3 (line 140) | function t3(t,e,r){return r===null?`${Yr(t,e)}`:`${Yr(t,e)} (via ${iI(t,...
  function x8 (line 140) | function x8(t){return`node_modules/${un(t)}`}
  function TQ (line 140) | function TQ(t,e){return t.conditions?U$e(t.conditions,r=>{let[,s,a]=r.ma...
  function qB (line 140) | function qB(t){let e=new Set;if("children"in t)e.add(t);else for(let r o...
  method supportsDescriptor (line 140) | supportsDescriptor(e,r){return!!(e.range.startsWith(t.protocol)||r.proje...
  method supportsLocator (line 140) | supportsLocator(e,r){return!!e.reference.startsWith(t.protocol)}
  method shouldPersistResolution (line 140) | shouldPersistResolution(e,r){return!1}
  method bindDescriptor (line 140) | bindDescriptor(e,r,s){return e}
  method getResolutionDependencies (line 140) | getResolutionDependencies(e,r){return{}}
  method getCandidates (line 140) | async getCandidates(e,r,s){return[s.project.getWorkspaceByDescriptor(e)....
  method getSatisfying (line 140) | async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);retu...
  method resolve (line 140) | async resolve(e,r){let s=r.project.getWorkspaceByCwd(e.reference.slice(t...
  function Zf (line 140) | function Zf(t,e,r=!1){if(!t)return!1;let s=`${e}${r}`,a=iue.get(s);if(ty...
  function cl (line 140) | function cl(t){if(t.indexOf(":")!==-1)return null;let e=sue.get(t);if(ty...
  function cet (line 140) | function cet(t){let e=aet.exec(t);return e?e[1]:null}
  function oue (line 140) | function oue(t){if(t.semver===Tp.default.Comparator.ANY)return{gt:null,l...
  function k8 (line 140) | function k8(t){if(t.length===0)return null;let e=null,r=null;for(let s o...
  function aue (line 140) | function aue(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1...
  function Q8 (line 140) | function Q8(t){let e=t.map(uet).map(s=>cl(s).set.map(a=>a.map(n=>oue(n))...
  function uet (line 140) | function uet(t){let e=t.split("||");if(e.length>1){let r=new Set;for(let...
  function cue (line 140) | function cue(t){let e=t.match(/^[ \t]+/m);return e?e[0]:"  "}
  function uue (line 140) | function uue(t){return t.charCodeAt(0)===65279?t.slice(1):t}
  function ba (line 140) | function ba(t){return t.replace(/\\/g,"/")}
  function RQ (line 140) | function RQ(t,{yamlCompatibilityMode:e}){return e?Y4(t):typeof t>"u"||ty...
  function fue (line 140) | function fue(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let s...
  function T8 (line 140) | function T8(t,e){return e.length===1?fue(t,e[0]):`(${e.map(r=>fue(t,r))....
  method constructor (line 140) | constructor(){this.indent="  ";this.name=null;this.version=null;this.os=...
  method tryFind (line 140) | static async tryFind(e,{baseFs:r=new Yn}={}){let s=J.join(e,"package.jso...
  method find (line 140) | static async find(e,{baseFs:r}={}){let s=await t.tryFind(e,{baseFs:r});i...
  method fromFile (line 140) | static async fromFile(e,{baseFs:r=new Yn}={}){let s=new t;return await s...
  method fromText (line 140) | static fromText(e){let r=new t;return r.loadFromText(e),r}
  method loadFromText (line 140) | loadFromText(e){let r;try{r=JSON.parse(uue(e)||"{}")}catch(s){throw s.me...
  method loadFile (line 140) | async loadFile(e,{baseFs:r=new Yn}){let s=await r.readFilePromise(e,"utf...
  method load (line 140) | load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)...
  method getForScope (line 140) | getForScope(e){switch(e){case"dependencies":return this.dependencies;cas...
  method hasConsumerDependency (line 140) | hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||th...
  method hasHardDependency (line 140) | hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.d...
  method hasSoftDependency (line 140) | hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}
  method hasDependency (line 140) | hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDepende...
  method getConditions (line 140) | getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(T8("os...
  method ensureDependencyMeta (line 140) | ensureDependencyMeta(e){if(e.range!=="unknown"&&!Aue.default.valid(e.ran...
  method ensurePeerDependencyMeta (line 140) | ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Inva...
  method setRawField (line 140) | setRawField(e,r,{after:s=[]}={}){let a=new Set(s.filter(n=>Object.hasOwn...
  method exportTo (line 140) | exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),thi...
  function Aet (line 140) | function Aet(t){return typeof t.reportCode<"u"}
  method constructor (line 140) | constructor(r,s,a){super(s);this.reportExtra=a;this.reportCode=r}
  method constructor (line 140) | constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.repor...
  method getRecommendedLength (line 140) | getRecommendedLength(){return 180}
  method reportCacheHit (line 140) | reportCacheHit(e){this.cacheHits.add(e.locatorHash)}
  method reportCacheMiss (line 140) | reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}
  method progressViaCounter (line 140) | static progressViaCounter(e){let r=0,s,a=new Promise(p=>{s=p}),n=p=>{let...
  method progressViaTitle (line 140) | static progressViaTitle(){let e,r,s=new Promise(c=>{r=c}),a=Q4(c=>{let f...
  method startProgressPromise (line 140) | async startProgressPromise(e,r){let s=this.reportProgress(e);try{return ...
  method startProgressSync (line 140) | startProgressSync(e,r){let s=this.reportProgress(e);try{return r(e)}fina...
  method reportInfoOnce (line 140) | reportInfoOnce(e,r,s){let a=s&&s.key?s.key:r;this.reportedInfos.has(a)||...
  method reportWarningOnce (line 140) | reportWarningOnce(e,r,s){let a=s&&s.key?s.key:r;this.reportedWarnings.ha...
  method reportErrorOnce (line 140) | reportErrorOnce(e,r,s){let a=s&&s.key?s.key:r;this.reportedErrors.has(a)...
  method reportExceptionOnce (line 140) | reportExceptionOnce(e){Aet(e)?this.reportErrorOnce(e.reportCode,e.messag...
  method createStreamReporter (line 140) | createStreamReporter(e=null){let r=new pue.PassThrough,s=new hue.StringD...
  method constructor (line 141) | constructor(e){this.fetchers=e}
  method supports (line 141) | supports(e,r){return!!this.tryFetcher(e,r)}
  method getLocalPath (line 141) | getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}
  method fetch (line 141) | async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}
  method tryFetcher (line 141) | tryFetcher(e,r){let s=this.fetchers.find(a=>a.supports(e,r));return s||n...
  method getFetcher (line 141) | getFetcher(e,r){let s=this.fetchers.find(a=>a.supports(e,r));if(!s)throw...
  method constructor (line 141) | constructor(e){this.resolvers=e.filter(r=>r)}
  method supportsDescriptor (line 141) | supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}
  method supportsLocator (line 141) | supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}
  method shouldPersistResolution (line 141) | shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shoul...
  method bindDescriptor (line 141) | bindDescriptor(e,r,s){return this.getResolverByDescriptor(e,s).bindDescr...
  method getResolutionDependencies (line 141) | getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r)....
  method getCandidates (line 141) | async getCandidates(e,r,s){return await this.getResolverByDescriptor(e,s...
  method getSatisfying (line 141) | async getSatisfying(e,r,s,a){return this.getResolverByDescriptor(e,a).ge...
  method resolve (line 141) | async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e...
  method tryResolverByDescriptor (line 141) | tryResolverByDescriptor(e,r){let s=this.resolvers.find(a=>a.supportsDesc...
  method getResolverByDescriptor (line 141) | getResolverByDescriptor(e,r){let s=this.resolvers.find(a=>a.supportsDesc...
  method tryResolverByLocator (line 141) | tryResolverByLocator(e,r){let s=this.resolvers.find(a=>a.supportsLocator...
  method getResolverByLocator (line 141) | getResolverByLocator(e,r){let s=this.resolvers.find(a=>a.supportsLocator...
  method supports (line 141) | supports(e){return!!e.reference.startsWith("virtual:")}
  method getLocalPath (line 141) | getLocalPath(e,r){let s=e.reference.indexOf("#");if(s===-1)throw new Err...
  method fetch (line 141) | async fetch(e,r){let s=e.reference.indexOf("#");if(s===-1)throw new Erro...
  method getLocatorFilename (line 141) | getLocatorFilename(e){return nI(e)}
  method ensureVirtualLink (line 141) | async ensureVirtualLink(e,r,s){let a=r.packageFs.getRealPath(),n=s.proje...
  method isVirtualDescriptor (line 141) | static isVirtualDescriptor(e){return!!e.range.startsWith(t.protocol)}
  method isVirtualLocator (line 141) | static isVirtualLocator(e){return!!e.reference.startsWith(t.protocol)}
  method supportsDescriptor (line 141) | supportsDescriptor(e,r){return t.isVirtualDescriptor(e)}
  method supportsLocator (line 141) | supportsLocator(e,r){return t.isVirtualLocator(e)}
  method shouldPersistResolution (line 141) | shouldPersistResolution(e,r){return!1}
  method bindDescriptor (line 141) | bindDescriptor(e,r,s){throw new Error('Assertion failed: calling "bindDe...
  method getResolutionDependencies (line 141) | getResolutionDependencies(e,r){throw new Error('Assertion failed: callin...
  method getCandidates (line 141) | async getCandidates(e,r,s){throw new Error('Assertion failed: calling "g...
  method getSatisfying (line 141) | async getSatisfying(e,r,s,a){throw new Error('Assertion failed: calling ...
  method resolve (line 141) | async resolve(e,r){throw new Error('Assertion failed: calling "resolve" ...
  method supports (line 141) | supports(e){return!!e.reference.startsWith(Ei.protocol)}
  method getLocalPath (line 141) | getLocalPath(e,r){return this.getWorkspace(e,r).cwd}
  method fetch (line 141) | async fetch(e,r){let s=this.getWorkspace(e,r).cwd;return{packageFs:new S...
  method getWorkspace (line 141) | getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(E...
  function WB (line 141) | function WB(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}
  function due (line 141) | function due(t){return typeof t>"u"?3:WB(t)?0:Array.isArray(t)?1:2}
  function U8 (line 141) | function U8(t,e){return Object.hasOwn(t,e)}
  function het (line 141) | function het(t){return WB(t)&&U8(t,"onConflict")&&typeof t.onConflict=="...
  function get (line 141) | function get(t){if(typeof t>"u")return{onConflict:"default",value:t};if(...
  function mue (line 141) | function mue(t,e){let r=WB(t)&&U8(t,e)?t[e]:void 0;return get(r)}
  function uI (line 141) | function uI(t,e){return[t,e,yue]}
  function _8 (line 141) | function _8(t){return Array.isArray(t)?t[2]===yue:!1}
  function L8 (line 141) | function L8(t,e){if(WB(t)){let r={};for(let s of Object.keys(t))r[s]=L8(...
  function M8 (line 141) | function M8(t,e,r,s,a){let n,c=[],f=a,p=0;for(let E=a-1;E>=s;--E){let[C,...
  function Eue (line 141) | function Eue(t){return M8(t.map(([e,r])=>[e,{".":r}]),[],".",0,t.length)}
  function YB (line 141) | function YB(t){return _8(t)?t[1]:t}
  function NQ (line 141) | function NQ(t){let e=_8(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>NQ...
  function H8 (line 141) | function H8(t){return _8(t)?t[0]:null}
  function G8 (line 141) | function G8(){if(process.platform==="win32"){let t=fe.toPortablePath(pro...
  function fI (line 141) | function fI(){return fe.toPortablePath((0,j8.homedir)()||"/usr/local/sha...
  function q8 (line 141) | function q8(t,e){let r=J.relative(e,t);return r&&!r.startsWith("..")&&!J...
  method constructor (line 141) | constructor(e){let{proxy:r,proxyRequestOptions:s,...a}=e;super(a),this.p...
  method createConnection (line 141) | createConnection(e,r){let s={...this.proxyRequestOptions,method:"CONNECT...
  method constructor (line 141) | constructor(e){let{proxy:r,proxyRequestOptions:s,...a}=e;super(a),this.p...
  method createConnection (line 141) | createConnection(e,r){let s={...this.proxyRequestOptions,method:"CONNECT...
  function met (line 141) | function met(t){return bue.includes(t)}
  function Eet (line 141) | function Eet(t){return yet.includes(t)}
  function Cet (line 141) | function Cet(t){return Iet.includes(t)}
  function AI (line 141) | function AI(t){return e=>typeof e===t}
  function be (line 141) | function be(t){if(t===null)return"null";switch(typeof t){case"undefined"...
  method constructor (line 141) | constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}
  method isCanceled (line 141) | get isCanceled(){return!0}
  method fn (line 141) | static fn(e){return(...r)=>new t((s,a,n)=>{r.push(n),e(...r).then(s,a)})}
  method constructor (line 141) | constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCancel...
  method then (line 141) | then(e,r){return this._promise.then(e,r)}
  method catch (line 141) | catch(e){return this._promise.catch(e)}
  method finally (line 141) | finally(e){return this._promise.finally(e)}
  method cancel (line 141) | cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandl...
  method isCanceled (line 141) | get isCanceled(){return this._isCanceled}
  function xet (line 141) | function xet(t){return t.encrypted}
  method constructor (line 141) | constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:s=3600,errorT...
  method servers (line 141) | set servers(e){this.clear(),this._resolver.setServers(e)}
  method servers (line 141) | get servers(){return this._resolver.getServers()}
  method lookup (line 141) | lookup(e,r,s){if(typeof r=="function"?(s=r,r={}):typeof r=="number"&&(r=...
  method lookupAsync (line 141) | async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let s=await...
  method query (line 141) | async query(e){let r=await this._cache.get(e);if(!r){let s=this._pending...
  method _resolve (line 141) | async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code=...
  method _lookup (line 141) | async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),ca...
  method _set (line 141) | async _set(e,r,s){if(this.maxTtl>0&&s>0){s=Math.min(s,this.maxTtl)*1e3,r...
  method queryAndCache (line 141) | async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._...
  method _tick (line 141) | _tick(e){let r=this._nextRemovalTime;(!r||e<r)&&(clearTimeout(this._remo...
  method install (line 141) | install(e){if(Oue(e),pI in e)throw new Error("CacheableLookup has been a...
  method uninstall (line 141) | uninstall(e){if(Oue(e),e[pI]){if(e[iH]!==this)throw new Error("The agent...
  method updateInterfaceInfo (line 141) | updateInterfaceInfo(){let{_iface:e}=this;this._iface=Lue(),(e.has4&&!thi...
  method clear (line 141) | clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}
  function que (line 141) | function que(t,e){if(t&&e)return que(t)(e);if(typeof t!="function")throw...
  function jQ (line 141) | function jQ(t){var e=function(){return e.called?e.value:(e.called=!0,e.v...
  function Jue (line 141) | function Jue(t){var e=function(){if(e.called)throw new Error(e.onceError...
  method constructor (line 141) | constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}
  function WQ (line 141) | async function WQ(t,e){if(!t)return Promise.reject(new Error("Expected a...
  function nm (line 141) | function nm(t){let e=parseInt(t,10);return isFinite(e)?e:0}
  function utt (line 141) | function utt(t){return t?att.has(t.status):!0}
  function fH (line 141) | function fH(t){let e={};if(!t)return e;let r=t.trim().split(/,/);for(let...
  function ftt (line 141) | function ftt(t){let e=[];for(let r in t){let s=t[r];e.push(s===!0?r:r+"=...
  method constructor (line 141) | constructor(e,r,{shared:s,cacheHeuristic:a,immutableMinTimeToLive:n,igno...
  method now (line 141) | now(){return Date.now()}
  method storable (line 141) | storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||thi...
  method _hasExplicitExpiration (line 141) | _hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]|...
  method _assertRequestHasHeaders (line 141) | _assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request heade...
  method satisfiesWithoutRevalidation (line 141) | satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=f...
  method _requestMatches (line 141) | _requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host==...
  method _allowsStoringAuthenticated (line 141) | _allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||thi...
  method _varyMatches (line 141) | _varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.v...
  method _copyWithoutHopByHopHeaders (line 141) | _copyWithoutHopByHopHeaders(e){let r={};for(let s in e)ltt[s]||(r[s]=e[s...
  method responseHeaders (line 141) | responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeader...
  method date (line 141) | date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this...
  method age (line 141) | age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;retur...
  method _ageValue (line 141) | _ageValue(){return nm(this._resHeaders.age)}
  method maxAge (line 141) | maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&t...
  method timeToLive (line 141) | timeToLive(){let e=this.maxAge()-this.age(),r=e+nm(this._rescc["stale-if...
  method stale (line 141) | stale(){return this.maxAge()<=this.age()}
  method _useStaleIfError (line 141) | _useStaleIfError(){return this.maxAge()+nm(this._rescc["stale-if-error"]...
  method useStaleWhileRevalidate (line 141) | useStaleWhileRevalidate(){return this.maxAge()+nm(this._rescc["stale-whi...
  method fromObject (line 141) | static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}
  method _fromObject (line 141) | _fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e|...
  method toObject (line 141) | toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._ca...
  method revalidationHeaders (line 141) | revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copy...
  method revalidatedPolicy (line 141) | revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),this._useStal...
  method constructor (line 141) | constructor(e,r,s,a){if(typeof e!="number")throw new TypeError("Argument...
  method _read (line 141) | _read(){this.push(this.body),this.push(null)}
  method constructor (line 141) | constructor(e,{emitErrors:r=!0,...s}={}){if(super(),this.opts={namespace...
  method _checkIterableAdaptar (line 141) | _checkIterableAdaptar(){return hfe.includes(this.opts.store.opts.dialect...
  method _getKeyPrefix (line 141) | _getKeyPrefix(e){return`${this.opts.namespace}:${e}`}
  method _getKeyPrefixArray (line 141) | _getKeyPrefixArray(e){return e.map(r=>`${this.opts.namespace}:${r}`)}
  method _getKeyUnprefix (line 141) | _getKeyUnprefix(e){return e.split(":").splice(1).join(":")}
  method get (line 141) | get(e,r){let{store:s}=this.opts,a=Array.isArray(e),n=a?this._getKeyPrefi...
  method set (line 141) | set(e,r,s){let a=this._getKeyPrefix(e);typeof s>"u"&&(s=this.opts.ttl),s...
  method delete (line 141) | delete(e){let{store:r}=this.opts;if(Array.isArray(e)){let a=this._getKey...
  method clear (line 141) | clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear...
  method has (line 141) | has(e){let r=this._getKeyPrefix(e),{store:s}=this.opts;return Promise.re...
  method disconnect (line 141) | disconnect(){let{store:e}=this.opts;if(typeof e.disconnect=="function")r...
  method constructor (line 141) | constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter ...
  method createCacheableRequest (line 141) | createCacheableRequest(e){return(r,s)=>{let a;if(typeof r=="string")a=dH...
  function Dtt (line 141) | function Dtt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search...
  function dH (line 141) | function dH(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostnam...
  method constructor (line 141) | constructor(t){super(t.message),this.name="RequestError",Object.assign(t...
  method constructor (line 141) | constructor(t){super(t.message),this.name="CacheError",Object.assign(thi...
  method get (line 141) | get(){let n=t[a];return typeof n=="function"?n.bind(t):n}
  method set (line 141) | set(n){t[a]=n}
  method transform (line 141) | transform(f,p,h){s=!1,h(null,f)}
  method flush (line 141) | flush(f){f()}
  method destroy (line 141) | destroy(f,p){t.destroy(),p(f)}
  method constructor (line 141) | constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`max...
  method _set (line 141) | _set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){...
  method get (line 141) | get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.ha...
  method set (line 141) | set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}
  method has (line 141) | has(e){return this.cache.has(e)||this.oldCache.has(e)}
  method peek (line 141) | peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.h...
  method delete (line 141) | delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCach...
  method clear (line 141) | clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}
  method keys (line 141) | *keys(){for(let[e]of this)yield e}
  method values (line 141) | *values(){for(let[,e]of this)yield e}
  method [Symbol.iterator] (line 141) | *[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.o...
  method size (line 141) | get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||...
  method constructor (line 141) | constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:s=10,maxCac...
  method normalizeOrigin (line 141) | static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&...
  method normalizeOptions (line 141) | normalizeOptions(e){let r="";if(e)for(let s of Ntt)e[s]&&(r+=`:${e[s]}`)...
  method _tryToCreateNewSession (line 141) | _tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e])...
  method getSession (line 141) | getSession(e,r,s){return new Promise((a,n)=>{Array.isArray(s)?(s=[...s],...
  method request (line 142) | request(e,r,s,a){return new Promise((n,c)=>{this.getSession(e,r,[{reject...
  method createConnection (line 142) | createConnection(e,r){return t.connect(e,r)}
  method connect (line 142) | static connect(e,r){r.ALPNProtocols=["h2"];let s=e.port||443,a=e.hostnam...
  method closeFreeSessions (line 142) | closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r ...
  method destroy (line 142) | destroy(e){for(let r of Object.values(this.sessions))for(let s of r)s.de...
  method freeSessions (line 142) | get freeSessions(){return Dfe({agent:this,isFree:!0})}
  method busySessions (line 142) | get busySessions(){return Dfe({agent:this,isFree:!1})}
  method constructor (line 142) | constructor(e,r){super({highWaterMark:r,autoDestroy:!1}),this.statusCode...
  method _destroy (line 142) | _destroy(e){this.req._request.destroy(e)}
  method setTimeout (line 142) | setTimeout(e,r){return this.req.setTimeout(e,r),this}
  method _dump (line 142) | _dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),t...
  method _read (line 142) | _read(){this.req&&this.req._request.resume()}
  method constructor (line 142) | constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.na...
  method constructor (line 142) | constructor(e,r,s){super({autoDestroy:!1});let a=typeof e=="string"||e i...
  method method (line 142) | get method(){return this[Jo][_fe]}
  method method (line 142) | set method(e){e&&(this[Jo][_fe]=e.toUpperCase())}
  method path (line 142) | get path(){return this[Jo][Hfe]}
  method path (line 142) | set path(e){e&&(this[Jo][Hfe]=e)}
  method _mustNotHaveABody (line 142) | get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"...
  method _write (line 142) | _write(e,r,s){if(this._mustNotHaveABody){s(new Error("The GET, HEAD and ...
  method _final (line 142) | _final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(thi...
  method abort (line 142) | abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=...
  method _destroy (line 142) | _destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.de...
  method flushHeaders (line 142) | async flushHeaders(){if(this[JQ]||this.destroyed)return;this[JQ]=!0;let ...
  method getHeader (line 142) | getHeader(e){if(typeof e!="string")throw new SH("name","string",e);retur...
  method headersSent (line 142) | get headersSent(){return this[JQ]}
  method removeHeader (line 142) | removeHeader(e){if(typeof e!="string")throw new SH("name","string",e);if...
  method setHeader (line 142) | setHeader(e,r){if(this.headersSent)throw new Mfe("set");if(typeof e!="st...
  method setNoDelay (line 142) | setNoDelay(){}
  method setSocketKeepAlive (line 142) | setSocketKeepAlive(){}
  method setTimeout (line 142) | setTimeout(e,r){let s=()=>this._request.setTimeout(e,r);return this._req...
  method maxHeadersCount (line 142) | get maxHeadersCount(){if(!this.destroyed&&this._request)return this._req...
  method maxHeadersCount (line 142) | set maxHeadersCount(e){}
  function drt (line 142) | function drt(t,e,r){let s={};for(let a of r)s[a]=(...n)=>{e.emit(a,...n)...
  method once (line 142) | once(e,r,s){e.once(r,s),t.push({origin:e,event:r,fn:s})}
  method unhandleAll (line 142) | unhandleAll(){for(let e of t){let{origin:r,event:s,fn:a}=e;r.removeListe...
  method constructor (line 142) | constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=...
  method constructor (line 142) | constructor(){this.weakMap=new WeakMap,this.map=new Map}
  method set (line 142) | set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}
  method get (line 142) | get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}
  method has (line 142) | has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}
  function Hrt (line 142) | function Hrt(t){for(let e in t){let r=t[e];if(!at.default.string(r)&&!at...
  function jrt (line 142) | function jrt(t){return at.default.object(t)&&!("statusCode"in t)}
  method constructor (line 142) | constructor(e,r,s){var a;if(super(e),Error.captureStackTrace(this,this.c...
  method constructor (line 146) | constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborti...
  method constructor (line 146) | constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})...
  method constructor (line 146) | constructor(e,r){super(e.message,e,r),this.name="CacheError"}
  method constructor (line 146) | constructor(e,r){super(e.message,e,r),this.name="UploadError"}
  method constructor (line 146) | constructor(e,r,s){super(e.message,e,s),this.name="TimeoutError",this.ev...
  method constructor (line 146) | constructor(e,r){super(e.message,e,r),this.name="ReadError"}
  method constructor (line 146) | constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),th...
  method constructor (line 146) | constructor(e,r={},s){super({autoDestroy:!1,highWaterMark:0}),this[yI]=0...
  method normalizeArguments (line 146) | static normalizeArguments(e,r,s){var a,n,c,f,p;let h=r;if(at.default.obj...
  method _lockWrite (line 146) | _lockWrite(){let e=()=>{throw new TypeError("The payload has been alread...
  method _unlockWrite (line 146) | _unlockWrite(){this.write=super.write,this.end=super.end}
  method _finalizeBody (line 146) | async _finalizeBody(){let{options:e}=this,{headers:r}=e,s=!at.default.un...
  method _onResponseBase (line 146) | async _onResponseBase(e){let{options:r}=this,{url:s}=r;this[PAe]=e,r.dec...
  method _onResponse (line 146) | async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._be...
  method _onRequest (line 146) | _onRequest(e){let{options:r}=this,{timeout:s,url:a}=r;brt.default(e),thi...
  method _createCacheableRequest (line 146) | async _createCacheableRequest(e,r){return new Promise((s,a)=>{Object.ass...
  method _makeRequest (line 146) | async _makeRequest(){var e,r,s,a,n;let{options:c}=this,{headers:f}=c;for...
  method _error (line 146) | async _error(e){try{for(let r of this.options.hooks.beforeError)e=await ...
  method _beforeError (line 146) | _beforeError(e){if(this[CI])return;let{options:r}=this,s=this.retryCount...
  method _read (line 146) | _read(){this[$Q]=!0;let e=this[eT];if(e&&!this[CI]){e.readableLength&&(t...
  method _write (line 146) | _write(e,r,s){let a=()=>{this._writeRequest(e,r,s)};this.requestInitiali...
  method _writeRequest (line 146) | _writeRequest(e,r,s){this[po].destroyed||(this._progressCallbacks.push((...
  method _final (line 146) | _final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._prog...
  method _destroy (line 146) | _destroy(e,r){var s;this[CI]=!0,clearTimeout(this[xAe]),po in this&&(thi...
  method _isAboutToError (line 146) | get _isAboutToError(){return this[CI]}
  method ip (line 146) | get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteA...
  method aborted (line 146) | get aborted(){var e,r,s;return((r=(e=this[po])===null||e===void 0?void 0...
  method socket (line 146) | get socket(){var e,r;return(r=(e=this[po])===null||e===void 0?void 0:e.s...
  method downloadProgress (line 146) | get downloadProgress(){let e;return this[mI]?e=this[yI]/this[mI]:this[mI...
  method uploadProgress (line 146) | get uploadProgress(){let e;return this[EI]?e=this[II]/this[EI]:this[EI]=...
  method timings (line 146) | get timings(){var e;return(e=this[po])===null||e===void 0?void 0:e.timings}
  method isFromCache (line 146) | get isFromCache(){return this[DAe]}
  method pipe (line 146) | pipe(e,r){if(this[bAe])throw new Error("Failed to pipe. The response has...
  method unpipe (line 146) | unpipe(e){return e instanceof JH.ServerResponse&&this[ZQ].delete(e),supe...
  method constructor (line 146) | constructor(e,r){let{options:s}=r.request;super(`${e.message} in "${s.ur...
  method constructor (line 146) | constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}
  method isCanceled (line 146) | get isCanceled(){return!0}
  function OAe (line 146) | function OAe(t){let e,r,s=new Zrt.EventEmitter,a=new ent((c,f,p)=>{let h...
  function snt (line 146) | function snt(t,...e){let r=(async()=>{if(t instanceof int.RequestError)t...
  function UAe (line 146) | function UAe(t){for(let e of Object.values(t))(MAe.default.plainObject(e...
  function oj (line 146) | async function oj(t){return Yl(XAe,t,()=>ce.readFilePromise(t).then(e=>(...
  function Int (line 146) | function Int({statusCode:t,statusMessage:e},r){let s=Ht(r,t,ht.NUMBER),a...
  function AT (line 146) | async function AT(t,{configuration:e,customErrorMessage:r}){try{return a...
  function epe (line 146) | function epe(t,e){let r=[...e.configuration.get("networkSettings")].sort...
  function iv (line 146) | async function iv(t,e,{configuration:r,headers:s,jsonRequest:a,jsonRespo...
  function lj (line 146) | async function lj(t,{configuration:e,jsonResponse:r,customErrorMessage:s...
  function Cnt (line 146) | async function Cnt(t,e,{customErrorMessage:r,...s}){return(await AT(iv(t...
  function cj (line 146) | async function cj(t,e,{customErrorMessage:r,...s}){return(await AT(iv(t,...
  function wnt (line 146) | async function wnt(t,{customErrorMessage:e,...r}){return(await AT(iv(t,n...
  function Bnt (line 146) | async function Bnt(t,e,{configuration:r,headers:s,jsonRequest:a,jsonResp...
  function bnt (line 146) | function bnt(){if(process.platform!=="linux")return null;let t;try{t=ce....
  function sv (line 146) | function sv(){return npe=npe??{os:(process.env.YARN_IS_TEST_ENV?process....
  function Pnt (line 146) | function Pnt(t=sv()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}...
  function uj (line 146) | function uj(){let t=sv();return ipe=ipe??{os:[t.os],cpu:[t.cpu],libc:t.l...
  function Qnt (line 146) | function Qnt(t){let e=xnt.exec(t);if(!e)return null;let r=e[2]&&e[2].ind...
  function Tnt (line 146) | function Tnt(){let e=new Error().stack.split(`
  function fj (line 147) | function fj(){return typeof hT.default.availableParallelism<"u"?hT.defau...
  function yj (line 147) | function yj(t,e,r,s,a){let n=YB(r);if(s.isArray||s.type==="ANY"&&Array.i...
  function pj (line 147) | function pj(t,e,r,s,a){let n=YB(r);switch(s.type){case"ANY":return NQ(n)...
  function Ont (line 147) | function Ont(t,e,r,s,a){let n=YB(r);if(typeof n!="object"||Array.isArray...
  function Lnt (line 147) | function Lnt(t,e,r,s,a){let n=YB(r),c=new Map;if(typeof n!="object"||Arr...
  function Ej (line 147) | function Ej(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e...
  function yT (line 147) | function yT(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecre...
  function Mnt (line 147) | function Mnt(){let t={};for(let[e,r]of Object.entries(process.env))e=e.t...
  function gj (line 147) | function gj(){let t=`${ET}rc_filename`;for(let[e,r]of Object.entries(pro...
  function spe (line 147) | async function spe(t){try{return await ce.readFilePromise(t)}catch{retur...
  function Unt (line 147) | async function Unt(t,e){return Buffer.compare(...await Promise.all([spe(...
  function _nt (line 147) | async function _nt(t,e){let[r,s]=await Promise.all([ce.statPromise(t),ce...
  function jnt (line 147) | async function jnt({configuration:t,selfPath:e}){let r=t.get("yarnPath")...
  method constructor (line 147) | constructor(e){this.isCI=Lp.isCI;this.projectCwd=null;this.plugins=new M...
  method create (line 147) | static create(e,r,s){let a=new t(e);typeof r<"u"&&!(r instanceof Map)&&(...
  method find (line 147) | static async find(e,r,{strict:s=!0,usePathCheck:a=null,useRc:n=!0}={}){l...
  method findRcFiles (line 147) | static async findRcFiles(e){let r=gj(),s=[],a=e,n=null;for(;a!==n;){n=a;...
  method findFolderRcFile (line 147) | static async findFolderRcFile(e){let r=J.join(e,Er.rc),s;try{s=await ce....
  method findProjectCwd (line 147) | static async findProjectCwd(e){let r=null,s=e,a=null;for(;s!==a;){if(a=s...
  method updateConfiguration (line 147) | static async updateConfiguration(e,r,s={}){let a=gj(),n=J.join(e,a),c=ce...
  method addPlugin (line 147) | static async addPlugin(e,r){r.length!==0&&await t.updateConfiguration(e,...
  method updateHomeConfiguration (line 147) | static async updateHomeConfiguration(e){let r=fI();return await t.update...
  method activatePlugin (line 147) | activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&th...
  method importSettings (line 147) | importSettings(e){for(let[r,s]of Object.entries(e))if(s!=null){if(this.s...
  method useWithSource (line 147) | useWithSource(e,r,s,a){try{this.use(e,r,s,a)}catch(n){throw n.message+=`...
  method use (line 147) | use(e,r,s,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSe...
  method get (line 147) | get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key...
  method getSpecial (line 147) | getSpecial(e,{hideSecrets:r=!1,getNativePaths:s=!1}){let a=this.get(e),n...
  method getSubprocessStreams (line 147) | getSubprocessStreams(e,{header:r,prefix:s,report:a}){let n,c,f=ce.create...
  method makeResolver (line 148) | makeResolver(){let e=[];for(let r of this.plugins.values())for(let s of ...
  method makeFetcher (line 148) | makeFetcher(){let e=[];for(let r of this.plugins.values())for(let s of r...
  method getLinkers (line 148) | getLinkers(){let e=[];for(let r of this.plugins.values())for(let s of r....
  method getSupportedArchitectures (line 148) | getSupportedArchitectures(){let e=sv(),r=this.get("supportedArchitecture...
  method isInteractive (line 148) | isInteractive({interactive:e,stdout:r}){return r.isTTY?e??this.get("pref...
  method getPackageExtensions (line 148) | async getPackageExtensions(){if(this.packageExtensions!==null)return thi...
  method normalizeLocator (line 148) | normalizeLocator(e){return cl(e.reference)?Ws(e,`${this.get("defaultProt...
  method normalizeDependency (line 148) | normalizeDependency(e){return cl(e.range)?On(e,`${this.get("defaultProto...
  method normalizeDependencyMap (line 148) | normalizeDependencyMap(e){return new Map([...e].map(([r,s])=>[r,this.nor...
  method normalizePackage (line 148) | normalizePackage(e,{packageExtensions:r}){let s=LB(e),a=r.get(e.identHas...
  method getLimit (line 148) | getLimit(e){return Yl(this.limits,e,()=>(0,cpe.default)(this.get(e)))}
  method triggerHook (line 148) | async triggerHook(e,...r){for(let s of this.plugins.values()){let a=s.ho...
  method triggerMultipleHooks (line 148) | async triggerMultipleHooks(e,r){for(let s of r)await this.triggerHook(e,...
  method reduceHook (line 148) | async reduceHook(e,r,...s){let a=r;for(let n of this.plugins.values()){l...
  method firstHook (line 148) | async firstHook(e,...r){for(let s of this.plugins.values()){let a=s.hook...
  function om (line 148) | function om(t){return t!==null&&typeof t.fd=="number"}
  function Ij (line 148) | function Ij(){}
  function Cj (line 148) | function Cj(){for(let t of am)t.kill()}
  function Wu (line 148) | async function Wu(t,e,{cwd:r,env:s=process.env,strict:a=!1,stdin:n=null,...
  function Aj (line 148) | async function Aj(t,e,{cwd:r,env:s=process.env,encoding:a="utf8",strict:...
  function vj (line 148) | function vj(t,e){let r=Gnt.get(e);return typeof r<"u"?128+r:t??1}
  function qnt (line 148) | function qnt(t,e,{configuration:r,report:s}){s.reportError(1,`  ${Kf(r,t...
  method constructor (line 148) | constructor({fileName:e,code:r,signal:s}){let a=ze.create(J.cwd()),n=Ht(...
  method constructor (line 148) | constructor({fileName:e,code:r,signal:s,stdout:a,stderr:n}){super({fileN...
  function Ape (line 148) | function Ape(t){fpe=t}
  function cv (line 148) | function cv(){return typeof Sj>"u"&&(Sj=fpe()),Sj}
  function P (line 148) | function P(Ke){return r.locateFile?r.locateFile(Ke,S):S+Ke}
  function pe (line 148) | function pe(Ke,st,St){switch(st=st||"i8",st.charAt(st.length-1)==="*"&&(...
  function we (line 148) | function we(Ke,st){Ke||rs("Assertion failed: "+st)}
  function ye (line 148) | function ye(Ke){var st=r["_"+Ke];return we(st,"Cannot call unknown funct...
  function Ae (line 148) | function Ae(Ke,st,St,lr,te){var Ee={string:function(qi){var Tn=0;if(qi!=...
  function se (line 148) | function se(Ke,st,St,lr){St=St||[];var te=St.every(function(Oe){return O...
  function De (line 148) | function De(Ke,st){if(!Ke)return"";for(var St=Ke+st,lr=Ke;!(lr>=St)&&ke[...
  function Re (line 148) | function Re(Ke,st,St,lr){if(!(lr>0))return 0;for(var te=St,Ee=St+lr-1,Oe...
  function mt (line 148) | function mt(Ke,st,St){return Re(Ke,ke,st,St)}
  function j (line 148) | function j(Ke){for(var st=0,St=0;St<Ke.length;++St){var lr=Ke.charCodeAt...
  function rt (line 148) | function rt(Ke){var st=j(Ke)+1,St=La(st);return St&&Re(Ke,Ve,St,st),St}
  function Fe (line 148) | function Fe(Ke,st){Ve.set(Ke,st)}
  function Ne (line 148) | function Ne(Ke,st){return Ke%st>0&&(Ke+=st-Ke%st),Ke}
  function z (line 148) | function z(Ke){Pe=Ke,r.HEAP_DATA_VIEW=F=new DataView(Ke),r.HEAP8=Ve=new ...
  function Ct (line 148) | function Ct(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r....
  function qt (line 148) | function qt(){lt=!0,Ts(xe)}
  function ir (line 148) | function ir(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=...
  function Pt (line 148) | function Pt(Ke){oe.unshift(Ke)}
  function gn (line 148) | function gn(Ke){xe.unshift(Ke)}
  function Pr (line 148) | function Pr(Ke){Te.unshift(Ke)}
  function ai (line 148) | function ai(Ke){Ir++,r.monitorRunDependencies&&r.monitorRunDependencies(...
  function Io (line 148) | function Io(Ke){if(Ir--,r.monitorRunDependencies&&r.monitorRunDependenci...
  function rs (line 148) | function rs(Ke){r.onAbort&&r.onAbort(Ke),Ke+="",ee(Ke),Ce=!0,g=1,Ke="abo...
  function Co (line 148) | function Co(Ke){return Ke.startsWith($s)}
  function eo (line 148) | function eo(Ke){try{if(Ke==ji&&le)return new Uint8Array(le);var st=Me(Ke...
  function wo (line 148) | function wo(Ke,st){var St,lr,te;try{te=eo(Ke),lr=new WebAssembly.Module(...
  function QA (line 148) | function QA(){var Ke={a:cu};function st(te,Ee){var Oe=te.exports;r.asm=O...
  function Af (line 148) | function Af(Ke){return F.getFloat32(Ke,!0)}
  function dh (line 148) | function dh(Ke){return F.getFloat64(Ke,!0)}
  function mh (line 148) | function mh(Ke){return F.getInt16(Ke,!0)}
  function to (line 148) | function to(Ke){return F.getInt32(Ke,!0)}
  function jn (line 148) | function jn(Ke,st){F.setInt32(Ke,st,!0)}
  function Ts (line 148) | function Ts(Ke){for(;Ke.length>0;){var st=Ke.shift();if(typeof st=="func...
  function ro (line 148) | function ro(Ke,st){var St=new Date(to((Ke>>2)*4)*1e3);jn((st>>2)*4,St.ge...
  function ou (line 148) | function ou(Ke,st){return ro(Ke,st)}
  function au (line 148) | function au(Ke,st,St){ke.copyWithin(Ke,st,st+St)}
  function lu (line 148) | function lu(Ke){try{return Be.grow(Ke-Pe.byteLength+65535>>>16),z(Be.buf...
  function TA (line 148) | function TA(Ke){var st=ke.length;Ke=Ke>>>0;var St=2147483648;if(Ke>St)re...
  function RA (line 148) | function RA(Ke){ue(Ke)}
  function oa (line 148) | function oa(Ke){var st=Date.now()/1e3|0;return Ke&&jn((Ke>>2)*4,st),st}
  function aa (line 148) | function aa(){if(aa.called)return;aa.called=!0;var Ke=new Date().getFull...
  function FA (line 148) | function FA(Ke){aa();var st=Date.UTC(to((Ke+20>>2)*4)+1900,to((Ke+16>>2)...
  function Bo (line 148) | function Bo(Ke){if(typeof C=="boolean"&&C){var st;try{st=Buffer.from(Ke,...
  function Me (line 148) | function Me(Ke){if(Co(Ke))return Bo(Ke.slice($s.length))}
  function Ac (line 148) | function Ac(Ke){if(Ke=Ke||f,Ir>0||(Ct(),Ir>0))return;function st(){Qn||(...
  method HEAPU8 (line 148) | get HEAPU8(){return t.HEAPU8}
  function xj (line 148) | function xj(t,e){let r=t.indexOf(e);if(r<=0)return null;let s=r;for(;r>=...
  method openPromise (line 148) | static async openPromise(e,r){let s=new t(r);try{return await e(s)}final...
  method constructor (line 148) | constructor(e={}){let r=e.fileExtensions,s=e.readOnlyArchives,a=typeof r...
  method constructor (line 148) | constructor(e,r){super(e),this.name="Libzip Error",this.code=r}
  method constructor (line 148) | constructor(e){this.filesShouldBeCached=!0;let r="buffer"in e?e.buffer:e...
  method getSymlinkCount (line 148) | getSymlinkCount(){return this.symlinkCount}
  method getListings (line 148) | getListings(){return this.listings}
  method stat (line 148) | stat(e){let r=this.libzip.struct.statS();if(this.libzip.statIndex(this.z...
  method makeLibzipError (line 148) | makeLibzipError(e){let r=this.libzip.struct.errorCodeZip(e),s=this.libzi...
  method setFileSource (line 148) | setFileSource(e,r,s){let a=this.allocateSource(s);try{let n=this.libzip....
  method setMtime (line 148) | setMtime(e,r){if(this.libzip.file.setMtime(this.zip,e,0,r,0)===-1)throw ...
  method getExternalAttributes (line 148) | getExternalAttributes(e){if(this.libzip.file.getExternalAttributes(this....
  method setExternalAttributes (line 148) | setExternalAttributes(e,r,s){if(this.libzip.file.setExternalAttributes(t...
  method locate (line 148) | locate(e){return this.libzip.name.locate(this.zip,e,0)}
  method getFileSource (line 148) | getFileSource(e){let r=this.libzip.struct.statS();if(this.libzip.statInd...
  method deleteEntry (line 148) | deleteEntry(e){if(this.libzip.delete(this.zip,e)===-1)throw this.makeLib...
  method addDirectory (line 148) | addDirectory(e){let r=this.libzip.dir.add(this.zip,e);if(r===-1)throw th...
  method getBufferAndClose (line 148) | getBufferAndClose(){try{if(this.libzip.source.keep(this.lzSource),this.l...
  method allocateBuffer (line 148) | allocateBuffer(e){Buffer.isBuffer(e)||(e=Buffer.from(e));let r=this.libz...
  method allocateUnattachedSource (line 148) | allocateUnattachedSource(e){let r=this.libzip.struct.errorS(),{buffer:s,...
  method allocateSource (line 148) | allocateSource(e){let{buffer:r,byteLength:s}=this.allocateBuffer(e),a=th...
  method discard (line 148) | discard(){this.libzip.discard(this.zip)}
  function Ynt (line 148) | function Ynt(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof...
  function BT (line 148) | function BT(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...
  method constructor (line 148) | constructor(r,s={}){super();this.listings=new Map;this.entries=new Map;t...
  method getExtractHint (line 148) | getExtractHint(r){for(let s of this.entries.keys()){let a=this.pathUtils...
  method getAllFiles (line 148) | getAllFiles(){return Array.from(this.entries.keys())}
  method getRealPath (line 148) | getRealPath(){if(!this.path)throw new Error("ZipFS don't have real paths...
  method prepareClose (line 148) | prepareClose(){if(!this.ready)throw or.EBUSY("archive closed, close");yd...
  method getBufferAndClose (line 148) | getBufferAndClose(){if(this.prepareClose(),this.entries.size===0)return ...
  method discardAndClose (line 148) | discardAndClose(){this.prepareClose(),this.zipImpl.discard(),this.ready=!1}
  method saveAndClose (line 148) | saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot...
  method resolve (line 148) | resolve(r){return J.resolve(vt.root,r)}
  method openPromise (line 148) | async openPromise(r,s,a){return this.openSync(r,s,a)}
  method openSync (line 148) | openSync(r,s,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}...
  method hasOpenFileHandles (line 148) | hasOpenFileHandles(){return!!this.fds.size}
  method opendirPromise (line 148) | async opendirPromise(r,s){return this.opendirSync(r,s)}
  method opendirSync (line 148) | opendirSync(r,s={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!t...
  method readPromise (line 148) | async readPromise(r,s,a,n,c){return this.readSync(r,s,a,n,c)}
  method readSync (line 148) | readSync(r,s,a=0,n=s.byteLength,c=-1){let f=this.fds.get(r);if(typeof f>...
  method writePromise (line 148) | async writePromise(r,s,a,n,c){return typeof s=="string"?this.writeSync(r...
  method writeSync (line 148) | writeSync(r,s,a,n,c){throw typeof this.fds.get(r)>"u"?or.EBADF("read"):n...
  method closePromise (line 148) | async closePromise(r){return this.closeSync(r)}
  method closeSync (line 148) | closeSync(r){if(typeof this.fds.get(r)>"u")throw or.EBADF("read");this.f...
  method createReadStream (line 148) | createReadStream(r,{encoding:s}={}){if(r===null)throw new Error("Unimple...
  method createWriteStream (line 148) | createWriteStream(r,{encoding:s}={}){if(this.readOnly)throw or.EROFS(`op...
  method realpathPromise (line 148) | async realpathPromise(r){return this.realpathSync(r)}
  method realpathSync (line 148) | realpathSync(r){let s=this.resolveFilename(`lstat '${r}'`,r);if(!this.en...
  method existsPromise (line 148) | async existsPromise(r){return this.existsSync(r)}
  method existsSync (line 148) | existsSync(r){if(!this.ready)throw or.EBUSY(`archive closed, existsSync ...
  method accessPromise (line 148) | async accessPromise(r,s){return this.accessSync(r,s)}
  method accessSync (line 148) | accessSync(r,s=xa.constants.F_OK){let a=this.resolveFilename(`access '${...
  method statPromise (line 148) | async statPromise(r,s={bigint:!1}){return s.bigint?this.statSync(r,{bigi...
  method statSync (line 148) | statSync(r,s={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`...
  method fstatPromise (line 148) | async fstatPromise(r,s){return this.fstatSync(r,s)}
  method fstatSync (line 148) | fstatSync(r,s){let a=this.fds.get(r);if(typeof a>"u")throw or.EBADF("fst...
  method lstatPromise (line 148) | async lstatPromise(r,s={bigint:!1}){return s.bigint?this.lstatSync(r,{bi...
  method lstatSync (line 148) | lstatSync(r,s={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(...
  method statImpl (line 148) | statImpl(r,s,a={}){let n=this.entries.get(s);if(typeof n<"u"){let c=this...
  method getUnixMode (line 148) | getUnixMode(r,s){let[a,n]=this.zipImpl.getExternalAttributes(r);return a...
  method registerListing (line 148) | registerListing(r){let s=this.listings.get(r);if(s)return s;this.registe...
  method registerEntry (line 148) | registerEntry(r,s){this.registerListing(J.dirname(r)).add(J.basename(r))...
  method unregisterListing (line 148) | unregisterListing(r){this.listings.delete(r),this.listings.get(J.dirname...
  method unregisterEntry (line 148) | unregisterEntry(r){this.unregisterListing(r);let s=this.entries.get(r);t...
  method deleteEntry (line 148) | deleteEntry(r,s){this.unregisterEntry(r),this.zipImpl.deleteEntry(s)}
  method resolveFilename (line 148) | resolveFilename(r,s,a=!0,n=!0){if(!this.ready)throw or.EBUSY(`archive cl...
  method setFileSource (line 148) | setFileSource(r,s){let a=Buffer.isBuffer(s)?s:Buffer.from(s),n=J.relativ...
  method isSymbolicLink (line 148) | isSymbolicLink(r){if(this.symlinkCount===0)return!1;let[s,a]=this.zipImp...
  method getFileSource (line 148) | getFileSource(r,s={asyncDecompress:!1}){let a=this.fileSources.get(r);if...
  method fchmodPromise (line 148) | async fchmodPromise(r,s){return this.chmodPromise(this.fdToPath(r,"fchmo...
  method fchmodSync (line 148) | fchmodSync(r,s){return this.chmodSync(this.fdToPath(r,"fchmodSync"),s)}
  method chmodPromise (line 148) | async chmodPromise(r,s){return this.chmodSync(r,s)}
  method chmodSync (line 148) | chmodSync(r,s){if(this.readOnly)throw or.EROFS(`chmod '${r}'`);s&=493;le...
  method fchownPromise (line 148) | async fchownPromise(r,s,a){return this.chownPromise(this.fdToPath(r,"fch...
  method fchownSync (line 148) | fchownSync(r,s,a){return this.chownSync(this.fdToPath(r,"fchownSync"),s,a)}
  method chownPromise (line 148) | async chownPromise(r,s,a){return this.chownSync(r,s,a)}
  method chownSync (line 148) | chownSync(r,s,a){throw new Error("Unimplemented")}
  method renamePromise (line 148) | async renamePromise(r,s){return this.renameSync(r,s)}
  method renameSync (line 148) | renameSync(r,s){throw new Error("Unimplemented")}
  method copyFilePromise (line 148) | async copyFilePromise(r,s,a){let{indexSource:n,indexDest:c,resolvedDestP...
  method copyFileSync (line 148) | copyFileSync(r,s,a=0){let{indexSource:n,indexDest:c,resolvedDestP:f}=thi...
  method prepareCopyFile (line 148) | prepareCopyFile(r,s,a=0){if(this.readOnly)throw or.EROFS(`copyfile '${r}...
  method appendFilePromise (line 148) | async appendFilePromise(r,s,a){if(this.readOnly)throw or.EROFS(`open '${...
  method appendFileSync (line 148) | appendFileSync(r,s,a={}){if(this.readOnly)throw or.EROFS(`open '${r}'`);...
  method fdToPath (line 148) | fdToPath(r,s){let a=this.fds.get(r)?.p;if(typeof a>"u")throw or.EBADF(s)...
  method writeFilePromise (line 148) | async writeFilePromise(r,s,a){let{encoding:n,mode:c,index:f,resolvedP:p}...
  method writeFileSync (line 148) | writeFileSync(r,s,a){let{encoding:n,mode:c,index:f,resolvedP:p}=this.pre...
  method prepareWriteFile (line 148) | prepareWriteFile(r,s){if(typeof r=="number"&&(r=this.fdToPath(r,"read"))...
  method unlinkPromise (line 148) | async unlinkPromise(r){return this.unlinkSync(r)}
  method unlinkSync (line 148) | unlinkSync(r){if(this.readOnly)throw or.EROFS(`unlink '${r}'`);let s=thi...
  method utimesPromise (line 148) | async utimesPromise(r,s,a){return this.utimesSync(r,s,a)}
  method utimesSync (line 148) | utimesSync(r,s,a){if(this.readOnly)throw or.EROFS(`utimes '${r}'`);let n...
  method lutimesPromise (line 148) | async lutimesPromise(r,s,a){return this.lutimesSync(r,s,a)}
  method lutimesSync (line 148) | lutimesSync(r,s,a){if(this.readOnly)throw or.EROFS(`lutimes '${r}'`);let...
  method utimesImpl (line 148) | utimesImpl(r,s){this.listings.has(r)&&(this.entries.has(r)||this.hydrate...
  method mkdirPromise (line 148) | async mkdirPromise(r,s){return this.mkdirSync(r,s)}
  method mkdirSync (line 148) | mkdirSync(r,{mode:s=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(...
  method rmdirPromise (line 148) | async rmdirPromise(r,s){return this.rmdirSync(r,s)}
  method rmdirSync (line 148) | rmdirSync(r,{recursive:s=!1}={}){if(this.readOnly)throw or.EROFS(`rmdir ...
  method rmPromise (line 148) | async rmPromise(r,s){return this.rmSync(r,s)}
  method rmSync (line 148) | rmSync(r,{recursive:s=!1}={}){if(this.readOnly)throw or.EROFS(`rm '${r}'...
  method hydrateDirectory (line 148) | hydrateDirectory(r){let s=this.zipImpl.addDirectory(J.relative(vt.root,r...
  method linkPromise (line 148) | async linkPromise(r,s){return this.linkSync(r,s)}
  method linkSync (line 148) | linkSync(r,s){throw or.EOPNOTSUPP(`link '${r}' -> '${s}'`)}
  method symlinkPromise (line 148) | async symlinkPromise(r,s){return this.symlinkSync(r,s)}
  method symlinkSync (line 148) | symlinkSync(r,s){if(this.readOnly)throw or.EROFS(`symlink '${r}' -> '${s...
  method readFilePromise (line 148) | async readFilePromise(r,s){typeof s=="object"&&(s=s?s.encoding:void 0);l...
  method readFileSync (line 148) | readFileSync(r,s){typeof s=="object"&&(s=s?s.encoding:void 0);let a=this...
  method readFileBuffer (line 148) | readFileBuffer(r,s={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdT...
  method readdirPromise (line 148) | async readdirPromise(r,s){return this.readdirSync(r,s)}
  method readdirSync (line 148) | readdirSync(r,s){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this...
  method readlinkPromise (line 148) | async readlinkPromise(r){let s=this.prepareReadlink(r);return(await this...
  method readlinkSync (line 148) | readlinkSync(r){let s=this.prepareReadlink(r);return this.getFileSource(...
  method prepareReadlink (line 148) | prepareReadlink(r){let s=this.resolveFilename(`readlink '${r}'`,r,!1);if...
  method truncatePromise (line 148) | async truncatePromise(r,s=0){let a=this.resolveFilename(`open '${r}'`,r)...
  method truncateSync (line 148) | truncateSync(r,s=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.e...
  method ftruncatePromise (line 148) | async ftruncatePromise(r,s){return this.truncatePromise(this.fdToPath(r,...
  method ftruncateSync (line 148) | ftruncateSync(r,s){return this.truncateSync(this.fdToPath(r,"ftruncateSy...
  method watch (line 148) | watch(r,s,a){let n;switch(typeof s){case"function":case"string":case"und...
  method watchFile (line 148) | watchFile(r,s,a){let n=J.resolve(vt.root,r);return sE(this,n,s,a)}
  method unwatchFile (line 148) | unwatchFile(r,s){let a=J.resolve(vt.root,r);return md(this,a,s)}
  function Cpe (line 148) | function Cpe(t,e,r=Buffer.alloc(0),s){let a=new As(r),n=C=>C===e||C.star...
  method constructor (line 148) | constructor(e){this.filesShouldBeCached=!1;if("buffer"in e)throw new Err...
  method readZipSync (line 148) | static readZipSync(e,r,s){if(s<uv)throw new Error("Invalid ZIP file: EOC...
  method getExternalAttributes (line 148) | getExternalAttributes(e){let r=this.entries[e];return[r.os,r.externalAtt...
  method getListings (line 148) | getListings(){return this.entries.map(e=>e.name)}
  method getSymlinkCount (line 148) | getSymlinkCount(){let e=0;for(let r of this.entries)r.isSymbolicLink&&(e...
  method stat (line 148) | stat(e){let r=this.entries[e];return{crc:r.crc,mtime:r.mtime,size:r.size}}
  method locate (line 148) | locate(e){for(let r=0;r<this.entries.length;r++)if(this.entries[r].name=...
  method getFileSource (line 148) | getFileSource(e){if(this.fd==="closed")throw new Error("ZIP file is clos...
  method discard (line 148) | discard(){this.fd!=="closed"&&(this.baseFs.closeSync(this.fd),this.fd="c...
  method addDirectory (line 148) | addDirectory(e){throw new Error("Not implemented")}
  method deleteEntry (line 148) | deleteEntry(e){throw new Error("Not implemented")}
  method setMtime (line 148) | setMtime(e,r){throw new Error("Not implemented")}
  method getBufferAndClose (line 148) | getBufferAndClose(){throw new Error("Not implemented")}
  method setFileSource (line 148) | setFileSource(e,r,s){throw new Error("Not implemented")}
  method setExternalAttributes (line 148) | setExternalAttributes(e,r,s){throw new Error("Not implemented")}
  function Vnt (line 148) | function Vnt(){return cv()}
  function Jnt (line 148) | async function Jnt(){return cv()}
  method constructor (line 148) | constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd...
  method execute (line 158) | async execute(){let r=this.args.length>0?`${this.commandName} ${this.arg...
  method constructor (line 158) | constructor(e){super(e),this.name="ShellError"}
  function Knt (line 158) | function Knt(t){if(!DT.default.scan(t,bT).isGlob)return!1;try{DT.default...
  function znt (line 158) | function znt(t,{cwd:e,baseFs:r}){return(0,Ppe.default)(t,{...kpe,cwd:fe....
  function Lj (line 158) | function Lj(t){return DT.default.scan(t,bT).isBrace}
  function Mj (line 158) | function Mj(){}
  function Uj (line 158) | function Uj(){for(let t of cm)t.kill()}
  function Npe (line 158) | function Npe(t,e,r,s){return a=>{let n=a[0]instanceof tA.Transform?"pipe...
  function Ope (line 161) | function Ope(t){return e=>{let r=e[0]==="pipe"?new tA.PassThrough:e[0];r...
  function xT (line 161) | function xT(t,e){return Hj.start(t,e)}
  function Tpe (line 161) | function Tpe(t,e=null){let r=new tA.PassThrough,s=new Fpe.StringDecoder,...
  function Lpe (line 162) | function Lpe(t,{prefix:e}){return{stdout:Tpe(r=>t.stdout.write(`${r}
  method constructor (line 164) | constructor(e){this.stream=e}
  method close (line 164) | close(){}
  method get (line 164) | get(){return this.stream}
  method constructor (line 164) | constructor(){this.stream=null}
  method close (line 164) | close(){if(this.stream===null)throw new Error("Assertion failed: No stre...
  method attach (line 164) | attach(e){this.stream=e}
  method get (line 164) | get(){if(this.stream===null)throw new Error("Assertion failed: No stream...
  method constructor (line 164) | constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this....
  method start (line 164) | static start(e,{stdin:r,stdout:s,stderr:a}){let n=new t(null,e);return n...
  method pipeTo (line 164) | pipeTo(e,r=1){let s=new t(this,e),a=new _j;return s.pipe=a,s.stdout=this...
  method exec (line 164) | async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe"...
  method run (line 164) | async run(){let e=[];for(let s=this;s;s=s.ancestor)e.push(s.exec());retu...
  function Mpe (line 164) | function Mpe(t,e,r){let s=new Jl.PassThrough({autoDestroy:!0});switch(t)...
  function QT (line 164) | function QT(t,e={}){let r={...t,...e};return r.environment={...t.environ...
  function Znt (line 164) | async function Znt(t,e,r){let s=[],a=new Jl.PassThrough;return a.on("dat...
  function Upe (line 164) | async function Upe(t,e,r){let s=t.map(async n=>{let c=await um(n.args,e,...
  function kT (line 164) | function kT(t){return t.match(/[^ \r\n\t]+/g)||[]}
  function Wpe (line 164) | async function Wpe(t,e,r,s,a=s){switch(t.name){case"$":s(String(process....
  function hv (line 164) | async function hv(t,e,r){if(t.type==="number"){if(Number.isInteger(t.val...
  function um (line 164) | async function um(t,e,r){let s=new Map,a=[],n=[],c=E=>{n.push(E)},f=()=>...
  function gv (line 164) | function gv(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let s=fe.f...
  function eit (line 164) | function eit(t,e,r){return s=>{let a=new Jl.PassThrough,n=TT(t,e,QT(r,{s...
  function tit (line 164) | function tit(t,e,r){return s=>{let a=new Jl.PassThrough,n=TT(t,e,r);retu...
  function _pe (line 164) | function _pe(t,e,r,s){if(e.length===0)return t;{let a;do a=String(Math.r...
  function Hpe (line 164) | async function Hpe(t,e,r){let s=t,a=null,n=null;for(;s;){let c=s.then?{....
  function rit (line 164) | async function rit(t,e,r,{background:s=!1}={}){function a(n){let c=["#2E...
  function nit (line 166) | async function nit(t,e,r,{background:s=!1}={}){let a,n=f=>{a=f,r.variabl...
  function TT (line 167) | async function TT(t,e,r){let s=r.backgroundJobs;r.backgroundJobs=[];let ...
  function Ype (line 167) | function Ype(t){switch(t.type){case"variable":return t.name==="@"||t.nam...
  function dv (line 167) | function dv(t){switch(t.type){case"redirection":return t.args.some(e=>dv...
  function Gj (line 167) | function Gj(t){switch(t.type){case"variable":return Ype(t);case"number":...
  function qj (line 167) | function qj(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(...
  function vI (line 167) | async function vI(t,e=[],{baseFs:r=new Yn,builtins:s={},cwd:a=fe.toPorta...
  method write (line 170) | write(ie,ue,le){setImmediate(le)}
  function iit (line 170) | function iit(){var t=0,e=1,r=2,s=3,a=4,n=5,c=6,f=7,p=8,h=9,E=10,C=11,S=1...
  function oit (line 170) | function oit(){if(FT)return FT;if(typeof Intl.Segmenter<"u"){let t=new I...
  function the (line 170) | function the(t,{configuration:e,json:r}){if(!e.get("enableMessageNames")...
  function Wj (line 170) | function Wj(t,{configuration:e,json:r}){let s=the(t,{configuration:e,jso...
  function SI (line 170) | async function SI({configuration:t,stdout:e,forceError:r},s){let a=await...
  method constructor (line 175) | constructor({configuration:r,stdout:s,json:a=!1,forceSectionAlignment:n=...
  method start (line 175) | static async start(r,s){let a=new this(r),n=process.emitWarning;process....
  method hasErrors (line 175) | hasErrors(){return this.errorCount>0}
  method exitCode (line 175) | exitCode(){return this.hasErrors()?1:0}
  method getRecommendedLength (line 175) | getRecommendedLength(){let s=this.progressStyle!==null?this.stdout.colum...
  method startSectionSync (line 175) | startSectionSync({reportHeader:r,reportFooter:s,skipIfEmpty:a},n){let c=...
  method startSectionPromise (line 175) | async startSectionPromise({reportHeader:r,reportFooter:s,skipIfEmpty:a},...
  method startTimerImpl (line 175) | startTimerImpl(r,s,a){return{cb:typeof s=="function"?s:a,reportHeader:()...
  method startTimerSync (line 175) | startTimerSync(r,s,a){let{cb:n,...c}=this.startTimerImpl(r,s,a);return t...
  method startTimerPromise (line 175) | async startTimerPromise(r,s,a){let{cb:n,...c}=this.startTimerImpl(r,s,a)...
  method reportSeparator (line 175) | reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(nul...
  method reportInfo (line 175) | reportInfo(r,s){if(!this.includeInfos)return;this.commit();let a=this.fo...
  method reportWarning (line 175) | reportWarning(r,s){if(this.warningCount+=1,!this.includeWarnings)return;...
  method reportError (line 175) | reportError(r,s){this.errorCount+=1,this.timerFooter.push(()=>this.repor...
  method reportErrorImpl (line 175) | reportErrorImpl(r,s){this.commit();let a=this.formatNameWithHyperlink(r)...
  method reportFold (line 175) | reportFold(r,s){if(!D0)return;let a=`${D0.start(r)}${s}${D0.end(r)}`;thi...
  method reportProgress (line 175) | reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve...
  method reportJson (line 175) | reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}
  method finalize (line 175) | async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>...
  method writeLine (line 175) | writeLine(r,{truncate:s}={}){this.clearProgress({clear:!0}),this.stdout....
  method writeLines (line 176) | writeLines(r,{truncate:s}={}){this.clearProgress({delta:r.length});for(l...
  method commit (line 177) | commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let s of r)...
  method clearProgress (line 177) | clearProgress({delta:r=0,clear:s=!1}){this.progressStyle!==null&&this.pr...
  method writeProgress (line 177) | writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==nu...
  method refreshProgress (line 178) | refreshProgress({delta:r=0,force:s=!1}={}){let a=!1,n=!1;if(s||this.prog...
  method truncate (line 178) | truncate(r,{truncate:s}={}){return this.progressStyle===null&&(s=!1),typ...
  method formatName (line 178) | formatName(r){return this.includeNames?the(r,{configuration:this.configu...
  method formatPrefix (line 178) | formatPrefix(r,s){return this.includePrefix?`${Ht(this.configuration,"\u...
  method formatNameWithHyperlink (line 178) | formatNameWithHyperlink(r){return this.includeNames?Wj(r,{configuration:...
  method formatIndent (line 178) | formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ...
  function b0 (line 178) | async function b0(t,e,r,s=[]){if(process.platform==="win32"){let a=`@got...
  function ihe (line 180) | async function ihe(t){let e=await Ut.tryFind(t);if(e?.packageManager){le...
  function Iv (line 180) | async function Iv({project:t,locator:e,binFolder:r,ignoreCorepack:s,life...
  function pit (line 180) | async function pit(t,e,{configuration:r,report:s,workspace:a=null,locato...
  function hit (line 188) | async function hit(t,e,{project:r}){let s=r.tryWorkspaceByLocator(t);if(...
  function LT (line 188) | async function LT(t,e,r,{cwd:s,project:a,stdin:n,stdout:c,stderr:f}){ret...
  function Yj (line 188) | async function Yj(t,e,r,{cwd:s,project:a,stdin:n,stdout:c,stderr:f}){ret...
  function git (line 188) | async function git(t,{binFolder:e,cwd:r,lifecycleScript:s}){let a=await ...
  function she (line 188) | async function she(t,{project:e,binFolder:r,cwd:s,lifecycleScript:a}){le...
  function ohe (line 188) | async function ohe(t,e,r,{cwd:s,stdin:a,stdout:n,stderr:c}){return await...
  function Vj (line 188) | function Vj(t,e){return t.manifest.scripts.has(e)}
  function ahe (line 188) | async function ahe(t,e,{cwd:r,report:s}){let{configuration:a}=t.project,...
  function dit (line 189) | async function dit(t,e,r){Vj(t,e)&&await ahe(t,e,r)}
  function Jj (line 189) | function Jj(t){let e=J.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0...
  function MT (line 189) | async function MT(t,{project:e}){let r=e.configuration,s=new Map,a=e.sto...
  function lhe (line 189) | async function lhe(t){return await MT(t.anchoredLocator,{project:t.proje...
  function Kj (line 189) | async function Kj(t,e){await Promise.all(Array.from(e,([r,[,s,a]])=>a?b0...
  function che (line 189) | async function che(t,e,r,{cwd:s,project:a,stdin:n,stdout:c,stderr:f,node...
  function mit (line 189) | async function mit(t,e,r,{cwd:s,stdin:a,stdout:n,stderr:c,packageAccessi...
  method constructor (line 189) | constructor(e,r,s){this.src=e,this.dest=r,this.opts=s,this.ondrain=()=>e...
  method unpipe (line 189) | unpipe(){this.dest.removeListener("drain",this.ondrain)}
  method proxyErrors (line 189) | proxyErrors(){}
  method end (line 189) | end(){this.unpipe(),this.opts.end&&this.dest.end()}
  method unpipe (line 189) | unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}
  method constructor (line 189) | constructor(e,r,s){super(e,r,s),this.proxyErrors=a=>r.emit("error",a),e....
  method constructor (line 189) | constructor(e){super(),this[jT]=!1,this[wv]=!1,this.pipes=[],this.buffer...
  method bufferLength (line 189) | get bufferLength(){return this[Ys]}
  method encoding (line 189) | get encoding(){return this[ul]}
  method encoding (line 189) | set encoding(e){if(this[Ko])throw new Error("cannot set encoding in obje...
  method setEncoding (line 189) | setEncoding(e){this.encoding=e}
  method objectMode (line 189) | get objectMode(){return this[Ko]}
  method objectMode (line 189) | set objectMode(e){this[Ko]=this[Ko]||!!e}
  method async (line 189) | get async(){return this[Gp]}
  method async (line 189) | set async(e){this[Gp]=this[Gp]||!!e}
  method write (line 189) | write(e,r,s){if(this[_p])throw new Error("write after end");if(this[zo])...
  method read (line 189) | read(e){if(this[zo])return null;if(this[Ys]===0||e===0||e>this[Ys])retur...
  method [ghe] (line 189) | [ghe](e,r){return e===r.length||e===null?this[Zj]():(this.buffer[0]=r.sl...
  method end (line 189) | end(e,r,s){return typeof e=="function"&&(s=e,e=null),typeof r=="function...
  method [bI] (line 189) | [bI](){this[zo]||(this[wv]=!1,this[jT]=!0,this.emit("resume"),this.buffe...
  method resume (line 189) | resume(){return this[bI]()}
  method pause (line 189) | pause(){this[jT]=!1,this[wv]=!0}
  method destroyed (line 189) | get destroyed(){return this[zo]}
  method flowing (line 189) | get flowing(){return this[jT]}
  method paused (line 189) | get paused(){return this[wv]}
  method [Xj] (line 189) | [Xj](e){this[Ko]?this[Ys]+=1:this[Ys]+=e.length,this.buffer.push(e)}
  method [Zj] (line 189) | [Zj](){return this.buffer.length&&(this[Ko]?this[Ys]-=1:this[Ys]-=this.b...
  method [HT] (line 189) | [HT](e){do;while(this[dhe](this[Zj]()));!e&&!this.buffer.length&&!this[_...
  method [dhe] (line 189) | [dhe](e){return e?(this.emit("data",e),this.flowing):!1}
  method pipe (line 189) | pipe(e,r){if(this[zo])return;let s=this[x0];return r=r||{},e===Ahe.stdou...
  method unpipe (line 189) | unpipe(e){let r=this.pipes.find(s=>s.dest===e);r&&(this.pipes.splice(thi...
  method addListener (line 189) | addListener(e,r){return this.on(e,r)}
  method on (line 189) | on(e,r){let s=super.on(e,r);return e==="data"&&!this.pipes.length&&!this...
  method emittedEnd (line 189) | get emittedEnd(){return this[x0]}
  method [Hp] (line 189) | [Hp](){!this[UT]&&!this[x0]&&!this[zo]&&this.buffer.length===0&&this[_p]...
  method emit (line 189) | emit(e,r,...s){if(e!=="error"&&e!=="close"&&e!==zo&&this[zo])return;if(e...
  method [$j] (line 189) | [$j](e){for(let s of this.pipes)s.dest.write(e)===!1&&this.pause();let r...
  method [mhe] (line 189) | [mhe](){this[x0]||(this[x0]=!0,this.readable=!1,this[Gp]?Bv(()=>this[e6]...
  method [e6] (line 189) | [e6](){if(this[jp]){let r=this[jp].end();if(r){for(let s of this.pipes)s...
  method collect (line 189) | collect(){let e=[];this[Ko]||(e.dataLength=0);let r=this.promise();retur...
  method concat (line 189) | concat(){return this[Ko]?Promise.reject(new Error("cannot concat in obje...
  method promise (line 189) | promise(){return new Promise((e,r)=>{this.on(zo,()=>r(new Error("stream ...
  method [Eit] (line 189) | [Eit](){return{next:()=>{let r=this.read();if(r!==null)return Promise.re...
  method [Iit] (line 189) | [Iit](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}
  method destroy (line 189) | destroy(e){return this[zo]?(e?this.emit("error",e):this.emit(zo),this):(...
  method isStream (line 189) | static isStream(e){return!!e&&(e instanceof Ehe||e instanceof phe||e ins...
  method constructor (line 189) | constructor(e){super("zlib: "+e.message),this.code=e.code,this.errno=e.e...
  method name (line 189) | get name(){return"ZlibError"}
  method constructor (line 189) | constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid ...
  method close (line 189) | close(){this[Ii]&&(this[Ii].close(),this[Ii]=null,this.emit("close"))}
  method reset (line 189) | reset(){if(!this[xI])return o6(this[Ii],"zlib binding closed"),this[Ii]....
  method flush (line 189) | flush(e){this.ended||(typeof e!="number"&&(e=this[d6]),this.write(Object...
  method end (line 189) | end(e,r,s){return e&&this.write(e,r),this.flush(this[vhe]),this[i6]=!0,s...
  method ended (line 189) | get ended(){return this[i6]}
  method write (line 189) | write(e,r,s){if(typeof r=="function"&&(s=r,r="utf8"),typeof e=="string"&...
  method [Am] (line 189) | [Am](e){return super.write(e)}
  method constructor (line 189) | constructor(e,r){e=e||{},e.flush=e.flush||fm.Z_NO_FLUSH,e.finishFlush=e....
  method params (line 189) | params(e,r){if(!this[xI]){if(!this[Ii])throw new Error("cannot switch pa...
  method constructor (line 189) | constructor(e){super(e,"Deflate")}
  method constructor (line 189) | constructor(e){super(e,"Inflate")}
  method constructor (line 189) | constructor(e){super(e,"Gzip"),this[s6]=e&&!!e.portable}
  method [Am] (line 189) | [Am](e){return this[s6]?(this[s6]=!1,e[9]=255,super[Am](e)):super[Am](e)}
  method constructor (line 189) | constructor(e){super(e,"Gunzip")}
  method constructor (line 189) | constructor(e){super(e,"DeflateRaw")}
  method constructor (line 189) | constructor(e){super(e,"InflateRaw")}
  method constructor (line 189) | constructor(e){super(e,"Unzip")}
  method constructor (line 189) | constructor(e,r){e=e||{},e.flush=e.flush||fm.BROTLI_OPERATION_PROCESS,e....
  method constructor (line 189) | constructor(e){super(e,"BrotliCompress")}
  method constructor (line 189) | constructor(e){super(e,"BrotliDecompress")}
  method constructor (line 189) | constructor(){throw new Error("Brotli is not supported in this version o...
  method constructor (line 189) | constructor(e,r,s){switch(super(),this.pause(),this.extended=r,this.glob...
  method write (line 189) | write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing m...
  method [E6] (line 189) | [E6](e,r){for(let s in e)e[s]!==null&&e[s]!==void 0&&!(r&&s==="path")&&(...
  method constructor (line 189) | constructor(e,r,s,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!...
  method decode (line 189) | decode(e,r,s,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need...
  method [w6] (line 189) | [w6](e,r){for(let s in e)e[s]!==null&&e[s]!==void 0&&!(r&&s==="path")&&(...
  method encode (line 189) | encode(e,r){if(e||(e=this.block=Buffer.alloc(512),r=0),r||(r=0),!(e.leng...
  method set (line 189) | set(e){for(let r in e)e[r]!==null&&e[r]!==void 0&&(this[r]=e[r])}
  method type (line 189) | get type(){return C6.name.get(this[zl])||this[zl]}
  method typeKey (line 189) | get typeKey(){return this[zl]}
  method type (line 189) | set type(e){C6.code.has(e)?this[zl]=C6.code.get(e):this[zl]=e}
  method constructor (line 189) | constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,t...
  method encode (line 189) | encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byte...
  method encodeBody (line 189) | encodeBody(){return this.encodeField("path")+this.encodeField("ctime")+t...
  method e
Copy disabled (too large) Download .json
Condensed preview — 16689 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (67,279K chars).
[
  {
    "path": ".altinn-studio-root",
    "chars": 1,
    "preview": "\n"
  },
  {
    "path": ".claude/settings.json",
    "chars": 1022,
    "preview": "{\n  \"permissions\": {\n    \"allow\": [\n      \"Bash(cat:*)\",\n      \"Bash(find:*)\",\n      \"Bash(ls:*)\",\n      \"Bash(grep:*)\","
  },
  {
    "path": ".claude/skills/rebase-stacked-pr/SKILL.md",
    "chars": 6377,
    "preview": "---\nname: rebase-stacked-pr\ndescription: Rebase a stacked PR onto main after its parent was squash-merged, using `git re"
  },
  {
    "path": ".claude/skills/tekstforfatter-docs/SKILL.md",
    "chars": 17230,
    "preview": "---\nname: forfatter\ndescription: 'Norsk tekstforfatter og redaktør for Digdir: klarspråk, AI-markører, anglisismer, fagt"
  },
  {
    "path": ".claude/skills/text-content-review/MODUL A - Terminologirevisjon.md",
    "chars": 602,
    "preview": "# Beskrivelse\n\nAnalyser tekstene nedenfor og identifiser:\n1. Termer som brukes inkonsekvent (samme begrep, ulike ord)\n2."
  },
  {
    "path": ".claude/skills/text-content-review/MODUL B - Feilmeldinger.md",
    "chars": 577,
    "preview": "# Beskrivelse\n\nVurder feilmeldingene nedenfor mot disse kriteriene:\n1. Forteller den hva som gikk galt – uten teknisk sj"
  },
  {
    "path": ".claude/skills/text-content-review/MODUL C - Knapper og handlingstekster.md",
    "chars": 635,
    "preview": "# Beskrivelse\n\nAnalyser handlingstekstene nedenfor (knapper, lenker, menypunkter).\n\nSjekk for hvert element:\n1. Er tekst"
  },
  {
    "path": ".claude/skills/text-content-review/MODUL D - Ledetekster og hjelpetekster.md",
    "chars": 508,
    "preview": "# Beskrivelse\n\nVurder ledetekst-/hjelpetekst-settene nedenfor.\n\nFor hvert sett, sjekk:\n1. Sier ledeteksten tydelig hva f"
  },
  {
    "path": ".claude/skills/text-content-review/MODUL E - Tiltaleform og register.md",
    "chars": 478,
    "preview": "# Beskrivelse\n\nGå gjennom tekstene nedenfor og identifiser alle steder der:\n1. Tiltaleformen varierer\n   («du» / «De» / "
  },
  {
    "path": ".claude/skills/text-content-review/MODUL F - Helhetlig innholdsrevisjon.md",
    "chars": 819,
    "preview": "# Beskrivelse\n\nGjennomfør en helhetlig innholdsrevisjon av tekstene nedenfor.\nVurder mot disse seks kriteriene:\n\n1. TERM"
  },
  {
    "path": ".claude/skills/text-content-review/SKILL.md",
    "chars": 2256,
    "preview": "---\nname: text-content-review\ndescription: Skill for reviewing text content - error messages, labels, help texts and ton"
  },
  {
    "path": ".claude/skills/text-content-review/Terminologi.md",
    "chars": 1174,
    "preview": "# Terminologi\n- Bruk «innboks», ikke «meldingsboks» eller «melding»\n- Bruk «representere», ikke «opptre på vegne av»\n- B"
  },
  {
    "path": ".coderabbit.yaml",
    "chars": 79,
    "preview": "language: \"en-GB\"\nreviews:\n  pre_merge_checks:\n    docstrings:\n      mode: off\n"
  },
  {
    "path": ".codex/config.toml",
    "chars": 159,
    "preview": "# Repo-local config for Codex CLI.\n# Command approvals are defined in .codex/rules/default.rules to mirror Claude's allo"
  },
  {
    "path": ".codex/rules/default.rules",
    "chars": 1014,
    "preview": "# Read-only repo inspection commands.\nprefix_rule(\n  pattern = [[\"cat\", \"find\", \"rg\", \"grep\", \"sed\", \"awk\", \"head\", \"tai"
  },
  {
    "path": ".dockerignore",
    "chars": 468,
    "preview": "*\n!src/Designer/frontend\n!src/Designer/backend\n!src/Designer/development/azure-devops-mock\n!package.json\n!yarn.lock\n!.ya"
  },
  {
    "path": ".editorconfig",
    "chars": 750,
    "preview": "# EditorConfig is awesome: http://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n# Default settings:\n# A ne"
  },
  {
    "path": ".git-blame-ignore-revs",
    "chars": 368,
    "preview": "# Apply import/no-duplicates Eslint rule:\nb393695948c95150b114193ec5b9602cebdc8ad9\n\n# Format all frontend code with Pret"
  },
  {
    "path": ".gitattributes",
    "chars": 2858,
    "preview": "###############################################################################\n# Set default behavior to automatically "
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 13851,
    "preview": "/.github/CODEOWNERS                                             @altinn/team-altinn-studio\n#\n# This file is generated by"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/analysis.yml",
    "chars": 1352,
    "preview": "name: Analysis 🔬\ndescription: Create a new analysis issue for something big that needs some insight.\nlabels: [\"kind/anal"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 1109,
    "preview": "name: Bug Report 🐛\ndescription: File a bug report here\nlabels: [\"kind/bug\", \"status/triage\"]\ntype: Bug\nbody:\n  - type: m"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/chore.yml",
    "chars": 1322,
    "preview": "name: Chore ✅\ndescription: Create a none user-story issue (chore, tech issue, backend issue)\nlabels: [\"kind/chore\", \"sta"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/epic-security-requirements-verification.yml",
    "chars": 1671,
    "preview": "name: Epic security requirements verification 💎✅\ndescription: This issue type will be used for verification of security "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/epic.yml",
    "chars": 1237,
    "preview": "name: Epic 💎\ndescription: Create a new epic (very big user story)\nlabels: [\"Epic\", \"status/draft\"]\ntype: Epic\nbody:\n  - "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 771,
    "preview": "name: Feature Request ✨\ndescription: Request a new feature or enhancement\nlabels: [\"kind/feature-request\", \"status/triag"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.yml",
    "chars": 714,
    "preview": "name: Question ❓\ndescription: Ask a question related to this product.\nlabels: [\"kind/question\", \"status/triage\"]\nbody:\n "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/test_plan.md",
    "chars": 2240,
    "preview": "---\nname: Testplan 🧪\nabout: Create a new testplan\ntitle: Testplan for <EPIC/FEATURE/CASE>\nlabels: kind/testplan\nassignee"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/user_story.yml",
    "chars": 2009,
    "preview": "name: User Story 😃\ndescription: Create a new user story\nlabels: ['kind/user-story', 'status/draft']\nbody:\n  - type: mark"
  },
  {
    "path": ".github/actions/app-build-frontend/action.yaml",
    "chars": 1082,
    "preview": "name: \"App Build Frontend\"\ndescription: \"Builds app frontend\"\nruns:\n  using: \"composite\"\n  steps:\n    - name: Cache fron"
  },
  {
    "path": ".github/actions/app-run-local-env/action.yaml",
    "chars": 6706,
    "preview": "name: \"App Run Local Environment\"\ndescription: \"Starts the frontend server and/or localtest\"\ninputs:\n  run-frontend:\n   "
  },
  {
    "path": ".github/actions/app-stop-local-env/action.yaml",
    "chars": 1385,
    "preview": "name: \"App Stop Local Environment\"\ndescription: \"Stops localtest and app containers\"\nruns:\n  using: \"composite\"\n  steps:"
  },
  {
    "path": ".github/actions/codeql-config/action.yaml",
    "chars": 1951,
    "preview": "name: \"CodeQL Config\"\ndescription: \"Generates a workflow-specific CodeQL config from language defaults and scan paths\"\ni"
  },
  {
    "path": ".github/actions/setup-studioctl/action.yaml",
    "chars": 847,
    "preview": "name: \"Setup studioctl\"\ndescription: \"Builds a dev studioctl install for CI workflows\"\nruns:\n  using: \"composite\"\n  step"
  },
  {
    "path": ".github/actions/yarn-install/action.yaml",
    "chars": 1306,
    "preview": "name: \"My Shared Steps\"\ndescription: \"Doing yarn installs with proper caching\"\ninputs:\n  working-directory:\n    descript"
  },
  {
    "path": ".github/codeql/codeql-config-csharp.yml",
    "chars": 449,
    "preview": "query-filters:\n  # Not security-related, better covered by Roslyn analyzers\n  # Warnings:\n  - exclude:\n      id: cs/usel"
  },
  {
    "path": ".github/codeql/codeql-config-javascript.yml",
    "chars": 529,
    "preview": "query-filters:\n  - exclude:\n      id: js/ml-powered/xss\n  - exclude:\n      id: js/ml-powered/sql-injection\n  - exclude:\n"
  },
  {
    "path": ".github/containerscan/allowedlist.yaml",
    "chars": 70,
    "preview": "general:\n  vulnerabilities: \n    - CVE-2020-7788\n    - CVE-2022-41032\n"
  },
  {
    "path": ".github/labeler.yml",
    "chars": 3205,
    "preview": "# Labels for solutions\nsolution/platform:\n- changed-files:\n  - any-glob-to-any-file: 'src/Altinn.Platform/**/*'\n\nsolutio"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 389,
    "preview": "<!--- Provide a general summary of your changes in the Title above -->\n\n## Description\n\n<!--- Describe your changes in d"
  },
  {
    "path": ".github/release.yml",
    "chars": 921,
    "preview": "# .github/release.yml\n\nchangelog:\n  exclude:\n    labels:\n      - skip-releasenotes\n      - area/resource-registry\n  cate"
  },
  {
    "path": ".github/scripts/codeowners-generate.mjs",
    "chars": 12119,
    "preview": "import fs from 'node:fs';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nconst OUTPUT_PATH = '"
  },
  {
    "path": ".github/scripts/construct-environments.mjs",
    "chars": 5579,
    "preview": "import { pathToFileURL } from \"node:url\";\n\nconst VALID_MODES = new Set([\"studio\", \"studio-preapproved\", \"runtime\"]);\ncon"
  },
  {
    "path": ".github/scripts/construct-environments.test.mjs",
    "chars": 6419,
    "preview": "import test from \"node:test\";\nimport assert from \"node:assert/strict\";\n\nimport { constructResult } from \"./construct-env"
  },
  {
    "path": ".github/scripts/release.sh",
    "chars": 1594,
    "preview": "#!/usr/bin/env bash\n\nset -e\nset -u\n\nDRAFT=true\n\nwhile [[ $# -gt 0 ]]; do\n  case $1 in\n    --github-token)\n      GITHUB_T"
  },
  {
    "path": ".github/workflows/app-backend-codeql.yml",
    "chars": 2229,
    "preview": "name: App Backend - CodeQL\n\non:\n  push:\n    branches: [main]\n    paths:\n      - 'src/App/backend/**'\n      - '.github/ac"
  },
  {
    "path": ".github/workflows/app-backend-formatting.yml",
    "chars": 974,
    "preview": "name: App Backend - Verify formatting\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review]\n"
  },
  {
    "path": ".github/workflows/app-backend-tests.yml",
    "chars": 3324,
    "preview": "name: App Backend - Build and test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, con"
  },
  {
    "path": ".github/workflows/app-codelists-codeql.yml",
    "chars": 2030,
    "preview": "name: App Codelists - CodeQL\n\non:\n  push:\n    branches: [main]\n    paths:\n      - 'src/App/codelists/**'\n      - '.githu"
  },
  {
    "path": ".github/workflows/app-codelists-tests.yml",
    "chars": 1755,
    "preview": "name: App Codelists - Build and test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, c"
  },
  {
    "path": ".github/workflows/app-fileanalyzers-codeql.yml",
    "chars": 2058,
    "preview": "name: App Fileanalyzers - CodeQL\n\non:\n  push:\n    branches: [main]\n    paths:\n      - 'src/App/fileanalyzers/**'\n      -"
  },
  {
    "path": ".github/workflows/app-fileanalyzers-tests.yml",
    "chars": 1787,
    "preview": "name: App Fileanalyzers - Build and test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_revie"
  },
  {
    "path": ".github/workflows/app-frontend-codeql.yml",
    "chars": 1842,
    "preview": "name: App Frontend - CodeQL\n\non:\n  push:\n    branches: [main]\n    paths:\n      - 'src/App/frontend/**'\n      - '.github/"
  },
  {
    "path": ".github/workflows/app-frontend-compare-repos.yml",
    "chars": 1920,
    "preview": "name: App Frontend - Compare Repos\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, con"
  },
  {
    "path": ".github/workflows/app-frontend-cypress.yml",
    "chars": 11052,
    "preview": "name: App Frontend - Cypress\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, converted"
  },
  {
    "path": ".github/workflows/app-frontend-k6-browser.yml",
    "chars": 2846,
    "preview": "name: App Frontend - K6 Browser Tests\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, "
  },
  {
    "path": ".github/workflows/app-frontend-lighthouse-ci.yml",
    "chars": 4543,
    "preview": "name: App Frontend - Lighthouse CI\non:\n  push:\n    branches:\n      - 'main'\n    paths:\n      - '.github/workflows/app-fr"
  },
  {
    "path": ".github/workflows/app-frontend-unit-tests.yml",
    "chars": 2776,
    "preview": "name: App Frontend - Unit tests\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, conver"
  },
  {
    "path": ".github/workflows/app-template-build-on-pr.yaml",
    "chars": 1199,
    "preview": "name: App Template - docker build on PR\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review"
  },
  {
    "path": ".github/workflows/app-template-test.yml",
    "chars": 1555,
    "preview": "name: App Template - Build and test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, co"
  },
  {
    "path": ".github/workflows/approve-pr.yaml",
    "chars": 2234,
    "preview": "name: Approve PR\n\non:\n  pull_request_target:\n    types: [ opened, labeled ]\n\npermissions:\n  contents: read\n  pull-reques"
  },
  {
    "path": ".github/workflows/cli-build-test.yaml",
    "chars": 5183,
    "preview": "name: CLI - Build and test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, converted_t"
  },
  {
    "path": ".github/workflows/codeowners-validate.yaml",
    "chars": 1009,
    "preview": "name: Validate CODEOWNERS\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review]\n    paths:\n "
  },
  {
    "path": ".github/workflows/construct-environments-script-test.yaml",
    "chars": 1292,
    "preview": "name: Construct Environments Script - Test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_rev"
  },
  {
    "path": ".github/workflows/deploy-designer.yaml",
    "chars": 4852,
    "preview": "name: Deploy Designer\non:\n  push:\n    branches: [ main ]\n    paths:\n      - '.github/workflows/deploy-designer.yaml'\n   "
  },
  {
    "path": ".github/workflows/deploy-gitea-runners.yaml",
    "chars": 3710,
    "preview": "name: Deploy Gitea Organization Runners\non:\n  push:\n    branches: [ main ]\n    paths:\n      - '.github/workflows/deploy-"
  },
  {
    "path": ".github/workflows/deploy-lhci-server.yaml",
    "chars": 3907,
    "preview": "name: Deploy LHCI Server\non:\n  push:\n    branches: [main]\n    paths:\n      - 'src/lhci-server/**'\n      - '.github/workf"
  },
  {
    "path": ".github/workflows/deploy-loadbalancer.yaml",
    "chars": 3632,
    "preview": "name: Deploy Loadbalancer\non:\n  push:\n    branches: [ main ]\n    paths:\n      - '.github/workflows/deploy-loadbalancer.y"
  },
  {
    "path": ".github/workflows/deploy-repositories.yaml",
    "chars": 4104,
    "preview": "name: Deploy Repositories\non:\n  push:\n    branches: [ main ]\n    paths:\n      - '.github/workflows/deploy-repositories.y"
  },
  {
    "path": ".github/workflows/deploy-runtime-apps-config.yaml",
    "chars": 2924,
    "preview": "name: Runtime - deploy apps config\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - infra/runtime/apps-config/"
  },
  {
    "path": ".github/workflows/deploy-runtime-flux-config.yaml",
    "chars": 2977,
    "preview": "name: Runtime - deploy flux config\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - infra/runtime/flux-config/"
  },
  {
    "path": ".github/workflows/deploy-runtime-gateway.yaml",
    "chars": 3925,
    "preview": "name: Runtime - deploy gateway\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - src/common/**\n      - src/Runt"
  },
  {
    "path": ".github/workflows/deploy-runtime-grafana-manifests.yaml",
    "chars": 3134,
    "preview": "name: Runtime - deploy grafana manifests\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - infra/runtime/grafan"
  },
  {
    "path": ".github/workflows/deploy-runtime-kubernetes-wrapper.yaml",
    "chars": 6702,
    "preview": "name: Runtime - deploy kubernetes-wrapper\non:\n  push:\n    branches:\n      - main\n    paths:\n      - src/Runtime/kubernet"
  },
  {
    "path": ".github/workflows/deploy-runtime-localtest.yaml",
    "chars": 1495,
    "preview": "name: Runtime - deploy localtest\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - src/Runtime/localtest/**\n   "
  },
  {
    "path": ".github/workflows/deploy-runtime-observability.yaml",
    "chars": 3045,
    "preview": "name: Runtime - deploy observability\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - infra/observability/base"
  },
  {
    "path": ".github/workflows/deploy-runtime-operator.yaml",
    "chars": 5051,
    "preview": "name: Runtime - deploy operator\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - src/Runtime/operator/**\n     "
  },
  {
    "path": ".github/workflows/deploy-runtime-pdf3.yaml",
    "chars": 6004,
    "preview": "name: Runtime - deploy pdf3\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - src/Runtime/pdf3/**\n      - .gith"
  },
  {
    "path": ".github/workflows/deploy-runtime-syncroot.yaml",
    "chars": 3257,
    "preview": "name: Runtime - deploy syncroot\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - infra/runtime/syncroot/**\n   "
  },
  {
    "path": ".github/workflows/deploy-runtime-workflow-engine-app.yaml",
    "chars": 5854,
    "preview": "name: Runtime - deploy workflow-engine-app\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - src/common/**\n    "
  },
  {
    "path": ".github/workflows/deploy-studio-ai-agents.yaml",
    "chars": 4000,
    "preview": "name: Deploy AI agents\n\non:\n  push:\n    branches:\n      - main\n      - feat/deploy-ai\n    paths:\n      - src/AI/agents/*"
  },
  {
    "path": ".github/workflows/deploy-studio-mcp-server.yaml",
    "chars": 3971,
    "preview": "name: Deploy AI MCP server\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - src/AI/mcp/**\n      - .github/work"
  },
  {
    "path": ".github/workflows/deploy-studio-observability.yaml",
    "chars": 3192,
    "preview": "name: Deploy Studio Observability\n\non:\n  push:\n    branches: [main]\n    paths:\n      - infra/observability/base/**\n     "
  },
  {
    "path": ".github/workflows/deploy-studio-otel-operator.yaml",
    "chars": 3052,
    "preview": "name: Deploy Studio OTel Operator\n\non:\n  push:\n    branches: [main]\n    paths:\n      - infra/studio/otel-operator/**\n   "
  },
  {
    "path": ".github/workflows/deploy-studio-syncroot.yaml",
    "chars": 3362,
    "preview": "name: Deploy studio syncroot\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - infra/studio/syncroot/**\n      -"
  },
  {
    "path": ".github/workflows/deployer-check.yaml",
    "chars": 841,
    "preview": "name: Deployer - Check\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review]\n    paths:\n    "
  },
  {
    "path": ".github/workflows/designer-backend-check-quartz-update.yml",
    "chars": 3851,
    "preview": "name: Designer Backend - Verify Quartz migrations\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_"
  },
  {
    "path": ".github/workflows/designer-backend-codeql.yml",
    "chars": 2197,
    "preview": "name: Designer Backend - CodeQL\n\non:\n  push:\n    branches: [main]\n    paths:\n      - 'src/Designer/testdata/**'\n      - "
  },
  {
    "path": ".github/workflows/designer-backend-dotnet-format.yaml",
    "chars": 958,
    "preview": "name: Designer Backend - dotnet format check\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_r"
  },
  {
    "path": ".github/workflows/designer-backend-dotnet-migrations-ensure-compatibility.yaml",
    "chars": 1728,
    "preview": "name: Designer Backend - Ensure Migrations Compatibility\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize,"
  },
  {
    "path": ".github/workflows/designer-backend-dotnet-test.yaml",
    "chars": 2928,
    "preview": "name: Designer Backend - Build and test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review"
  },
  {
    "path": ".github/workflows/designer-backend-gitea-and-db-integration-tests.yaml",
    "chars": 1546,
    "preview": "name: Designer Backend - Gitea and Db integration tests\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, "
  },
  {
    "path": ".github/workflows/designer-frontend-codeql.yml",
    "chars": 2218,
    "preview": "name: Designer Frontend - CodeQL\n\non:\n  push:\n    branches: [main]\n    paths:\n      - 'src/Designer/frontend/**'\n      -"
  },
  {
    "path": ".github/workflows/designer-frontend-playwright-staging.yml",
    "chars": 2168,
    "preview": "name: Designer Frontend - Playwright tests in Staging\n\non:\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workfl"
  },
  {
    "path": ".github/workflows/designer-frontend-run-playwright-on-pr.yaml",
    "chars": 3430,
    "preview": "name: Designer Frontend - Playwright tests on PR\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_f"
  },
  {
    "path": ".github/workflows/designer-frontend-unit-tests.yml",
    "chars": 2422,
    "preview": "name: Designer Frontend - Unit tests\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, c"
  },
  {
    "path": ".github/workflows/designer-scan.yml",
    "chars": 595,
    "preview": "name: Designer Scan\n\non:\n  schedule:\n    - cron: '14 8 * * 1,4'\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n  "
  },
  {
    "path": ".github/workflows/gitea-check-texts-file.yml",
    "chars": 4334,
    "preview": "name: Gitea check local gitea locale files\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_rev"
  },
  {
    "path": ".github/workflows/gitea-proxy-test.yml",
    "chars": 1042,
    "preview": "name: Gitea Proxy - Test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, converted_to_"
  },
  {
    "path": ".github/workflows/gitea-runner-test.yml",
    "chars": 1274,
    "preview": "name: Gitea Runner - Test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, converted_to"
  },
  {
    "path": ".github/workflows/lint-pr.yaml",
    "chars": 3491,
    "preview": "name: \"Lint PR\"\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, edited]\n\nconcurrency:\n "
  },
  {
    "path": ".github/workflows/mcp-build.yaml",
    "chars": 1335,
    "preview": "name: MCP - Build\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, "
  },
  {
    "path": ".github/workflows/mcp-test.yaml",
    "chars": 1079,
    "preview": "name: MCP - Test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft, c"
  },
  {
    "path": ".github/workflows/playwright-resourceadm.yml",
    "chars": 2329,
    "preview": "name: Resourceadm Playwright Tests in Dev\n\non:\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ gi"
  },
  {
    "path": ".github/workflows/pr-labeler.yml",
    "chars": 474,
    "preview": "name: Pull Request Labeler\n\non:\n  pull_request_target:\n    types: [ opened, synchronize, reopened ]\n\npermissions:\n  cont"
  },
  {
    "path": ".github/workflows/release-studioctl.yaml",
    "chars": 2757,
    "preview": "name: Release - studioctl\n\n# Automatically triggers release when a changelog promotion PR is merged.\n# PRs must have the"
  },
  {
    "path": ".github/workflows/release.yaml",
    "chars": 886,
    "preview": "name: Generate release for Altinn Studio\non:\n  schedule:\n    # run every friday at 14:15 UTC (15:15 Oslo time)\n    - cro"
  },
  {
    "path": ".github/workflows/releaser-build-test.yml",
    "chars": 1648,
    "preview": "name: Releaser - Build and test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, conver"
  },
  {
    "path": ".github/workflows/repositories-scan.yml",
    "chars": 563,
    "preview": "name: Repositories Scan\n\non:\n  schedule:\n  - cron: '0 8 * * 1,4'\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n "
  },
  {
    "path": ".github/workflows/run-playwright-resourceadm-on-pr.yml",
    "chars": 2692,
    "preview": "name: Resource admin playwright tests on pr\non:\n  pull_request:\n    branches: [main]\n    types: [opened, synchronize, re"
  },
  {
    "path": ".github/workflows/runtime-devenv-build.yml",
    "chars": 1144,
    "preview": "name: devenv - Lint\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review]\n    paths:\n      -"
  },
  {
    "path": ".github/workflows/runtime-gateway-tests.yaml",
    "chars": 1726,
    "preview": "name: Runtime Gateway - Build and test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review,"
  },
  {
    "path": ".github/workflows/runtime-health-build.yml",
    "chars": 1040,
    "preview": "name: runtime-health - Lint\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review]\n    paths:"
  },
  {
    "path": ".github/workflows/runtime-kubernetes-wrapper-build.yaml",
    "chars": 1306,
    "preview": "name: Runtime kubernetes-wrapper - Build and test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_"
  },
  {
    "path": ".github/workflows/runtime-localtest-build.yml",
    "chars": 1039,
    "preview": "name: Localtest - Build\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, converted_to_d"
  },
  {
    "path": ".github/workflows/runtime-operator-build.yml",
    "chars": 2377,
    "preview": "name: operator - Build\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, converted_to_dr"
  },
  {
    "path": ".github/workflows/runtime-pdf3-build.yml",
    "chars": 1643,
    "preview": "name: pdf3 - Build\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, converted_to_draft,"
  },
  {
    "path": ".github/workflows/runtime-workflow-engine-app-tests.yaml",
    "chars": 1990,
    "preview": "name: Runtime Workflow Engine App - Build and test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready"
  },
  {
    "path": ".github/workflows/runtime-workflow-engine-tests.yaml",
    "chars": 1772,
    "preview": "name: Runtime Workflow Engine - Build and test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for"
  },
  {
    "path": ".github/workflows/storybook-to-github-pages.yaml",
    "chars": 1454,
    "preview": "name: Deploy Studio Components Storybook Production\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n      - main\n    pat"
  },
  {
    "path": ".github/workflows/studio-components-deploy.yaml",
    "chars": 1177,
    "preview": "name: Build and deploy Studio Components with preview\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - 'src/De"
  },
  {
    "path": ".github/workflows/studio-components-legacy-deploy.yaml",
    "chars": 1212,
    "preview": "name: Build and deploy Studio Components Legacy with preview\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - "
  },
  {
    "path": ".github/workflows/template-docker-push.yaml",
    "chars": 2478,
    "preview": "name: Docker build and push\n\non:\n  workflow_call:\n    inputs:\n      tags:\n        required: true\n        type: string\n  "
  },
  {
    "path": ".github/workflows/template-flux-config-push.yaml",
    "chars": 3681,
    "preview": "name: Flux config push workflow\n\non:\n  workflow_call:\n    inputs:\n      tag:\n        required: true\n        type: string"
  },
  {
    "path": ".github/workflows/template-helm-push.yaml",
    "chars": 1868,
    "preview": "name: Helm build and push workflow\n\non:\n  workflow_call:\n    inputs:\n      tag:\n        required: true\n        type: str"
  },
  {
    "path": ".github/workflows/template-runtime-construct-environments.yaml",
    "chars": 1298,
    "preview": "name: Construct rings array\n\non:\n  workflow_call:\n    inputs:\n      inputs:\n        required: false\n        default: \"nu"
  },
  {
    "path": ".github/workflows/template-studio-construct-environments.yaml",
    "chars": 1621,
    "preview": "name: Construct environments array\n\non:\n  workflow_call:\n    inputs:\n      use-preapproved:\n        required: false\n    "
  },
  {
    "path": ".github/workflows/validate-renovate.yaml",
    "chars": 890,
    "preview": "name: Validate Renovate config\non:\n  pull_request:\n    types: [opened, reopened, synchronize, ready_for_review, converte"
  },
  {
    "path": ".gitignore",
    "chars": 6262,
    "preview": "syntax: glob\n\n### VisualStudio ###\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# Build results\n["
  },
  {
    "path": ".husky/pre-commit",
    "chars": 17,
    "preview": "yarn lint-staged\n"
  },
  {
    "path": ".notes/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".prettierignore",
    "chars": 116,
    "preview": ".yarn\nyarn.lock\n.gitignore\n*.svg\n**/dist/\n*.xml\n*.code-workspace\n.eslintignore\n*.snap\n*.yaml\neidlogger/\nsrc/AI/mcp/\n"
  },
  {
    "path": ".vscode/extensions.json",
    "chars": 332,
    "preview": "{\n  \"recommendations\": [\n    \"dbaeumer.vscode-eslint\",\n    \"github.vscode-pull-request-github\",\n    \"hediet.vscode-drawi"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 207,
    "preview": "{\n  \"files.exclude\": {\n    \"**/node_modules\": true\n  },\n  \"cSpell.words\": [\n    \"avmerkingsbokser\",\n    \"filstørrelsen\"\n"
  },
  {
    "path": ".yarn/patches/jsdom-npm-26.1.0-3857255f02.patch",
    "chars": 533,
    "preview": "diff --git a/lib/jsdom/browser/Window.js b/lib/jsdom/browser/Window.js\nindex 52d011cae61c3688ec64baa5cec411d55edbda9d..5"
  },
  {
    "path": ".yarn/releases/yarn-4.12.0.cjs",
    "chars": 2992830,
    "preview": "#!/usr/bin/env node\n/* eslint-disable */\n//prettier-ignore\n(()=>{var xGe=Object.create;var mU=Object.defineProperty;var "
  },
  {
    "path": ".yarnrc.yml",
    "chars": 169,
    "preview": "compressionLevel: mixed\n\nenableGlobalCache: false\n\nenableMessageNames: false\n\nenableTelemetry: false\n\nnodeLinker: node-m"
  },
  {
    "path": "AGENTS.md",
    "chars": 841,
    "preview": "# AGENTS.md\n\nThis file provides guidance to AI agents when working with code in this repository.\n\n## Altinn Studio\n\nAlti"
  },
  {
    "path": "CLAUDE.md",
    "chars": 24,
    "preview": "# CLAUDE.md\n\n@AGENTS.md\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 3168,
    "preview": "# Contributing to Altinn\n\nWe love your input! We want to make contributing to this project as easy and transparent as po"
  },
  {
    "path": "LICENSE",
    "chars": 1092,
    "preview": "MIT License\n\nCopyright (c) 2017 The Norwegian Digitalisation Agency\n\nPermission is hereby granted, free of charge, to an"
  },
  {
    "path": "Makefile",
    "chars": 8136,
    "preview": "# Altinn Studio Makefile\n# Make targets for syncing subtree repositories\n\n# Configuration: name|prefix|repo-url|branch\nS"
  },
  {
    "path": "README.md",
    "chars": 10158,
    "preview": "# Altinn Studio\n\n[![DPG Badge](https://img.shields.io/badge/Verified-DPG%20-3333AB?logo=data:image/svg%2bxml;base64,PHN2"
  },
  {
    "path": "charts/altinn-designer/.helmignore",
    "chars": 342,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/altinn-designer/Chart.yaml",
    "chars": 146,
    "preview": "apiVersion: v1\nname: altinn-designer\ndescription: A Helm chart for Kubernetes\nversion: 0.2.0\nsources:\n  - https://github"
  },
  {
    "path": "charts/altinn-designer/templates/NOTES.txt",
    "chars": 180,
    "preview": "{{ .Chart.Name }} is installed\nThe release is named {{ .Release.Name }}\n\nTo learn more about the release, try:\n  $ helm "
  },
  {
    "path": "charts/altinn-designer/templates/_helpers.tpl",
    "chars": 1069,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"altinn-designer.name\" -}}\n{{- "
  },
  {
    "path": "charts/altinn-designer/templates/db-migrations-job.yaml",
    "chars": 732,
    "preview": "apiVersion: batch/v1\nkind: Job\nmetadata:\n  name: db-migrations-job\n  labels:\n    release: altinn-designer\n  annotations:"
  },
  {
    "path": "charts/altinn-designer/templates/deployment.yaml",
    "chars": 3808,
    "preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: altinn-designer\n  labels:\n    release: altinn-designer\nspec:\n  se"
  },
  {
    "path": "charts/altinn-designer/templates/ingress.yaml",
    "chars": 899,
    "preview": "{{- $serviceName := include \"altinn-designer.fullname\" . }}\n{{- $servicePort := .Values.service.externalPort }}\n{{- rang"
  },
  {
    "path": "charts/altinn-designer/templates/keys-pvc.yaml",
    "chars": 178,
    "preview": "apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: keys\nspec:\n  accessModes:\n    - ReadWriteMany\n  storageClas"
  },
  {
    "path": "charts/altinn-designer/templates/keys-storageclass.yaml",
    "chars": 285,
    "preview": "kind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n  name: keys\nprovisioner: kubernetes.io/azure-file\nreclaimPol"
  },
  {
    "path": "charts/altinn-designer/templates/service.yaml",
    "chars": 269,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: altinn-designer\n  labels:\n    run: altinn-designer\nspec:\n  ports:\n    - p"
  },
  {
    "path": "charts/altinn-designer/templates/tests/test-connection.yaml",
    "chars": 541,
    "preview": "apiVersion: v1\nkind: Pod\nmetadata:\n  name: altinn-designer-test-connection\n  labels:\n    app.kubernetes.io/name: {{ incl"
  },
  {
    "path": "charts/altinn-designer/templates/wwwRedirectIngress.yaml",
    "chars": 1480,
    "preview": "{{- if not (hasKey .Values.environmentVariables .Values.environment) }}\n  {{ fail \"the chosen environment does not exist"
  },
  {
    "path": "charts/altinn-designer/values.yaml",
    "chars": 12660,
    "preview": "replicaCount: 1\n\nenvironment: dev\n\nserviceAccount:\n  enabled: true\n  name: \"altinn-designer\"\n  useWorkloadIdentity: true"
  },
  {
    "path": "charts/altinn-designer-config/Chart.yaml",
    "chars": 1151,
    "preview": "apiVersion: v2\nname: altinn-designer\ndescription: A Helm chart for Kubernetes\n\n# A chart can be either an 'application' "
  },
  {
    "path": "charts/altinn-designer-config/templates/helm-release.yaml",
    "chars": 708,
    "preview": "---\napiVersion: helm.toolkit.fluxcd.io/v2beta1\nkind: HelmRelease\nmetadata:\n  name: altinn-designer\n  namespace: default\n"
  },
  {
    "path": "charts/altinn-designer-config/values.yaml",
    "chars": 82,
    "preview": "chartVersion: \"\"\nimageTag: \"\"\ndbMigrationsTag: \"\"\nenvironmentName: \"\"\nreplicas: 1\n"
  },
  {
    "path": "charts/altinn-loadbalancer/.helmignore",
    "chars": 342,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/altinn-loadbalancer/Chart.yaml",
    "chars": 150,
    "preview": "apiVersion: v1\nname: altinn-loadbalancer\ndescription: A Helm chart for Kubernetes\nversion: 0.1.0\nsources:\n  - https://gi"
  },
  {
    "path": "charts/altinn-loadbalancer/templates/NOTES.txt",
    "chars": 180,
    "preview": "{{ .Chart.Name }} is installed\nThe release is named {{ .Release.Name }}\n\nTo learn more about the release, try:\n  $ helm "
  },
  {
    "path": "charts/altinn-loadbalancer/templates/_helpers.tpl",
    "chars": 1081,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"altinn-loadbalancer.name\" -}}\n"
  },
  {
    "path": "charts/altinn-loadbalancer/templates/deployment.yaml",
    "chars": 2973,
    "preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: altinn-loadbalancer\n  labels:\n    release: altinn-loadbalancer\nsp"
  },
  {
    "path": "charts/altinn-loadbalancer/templates/exporter.yaml",
    "chars": 1623,
    "preview": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: nginx-exporter-config\n  namespace: default\ndata:\n  config.hcl: |\n    li"
  },
  {
    "path": "charts/altinn-loadbalancer/templates/networkpolicy.yaml",
    "chars": 563,
    "preview": "# the only egress should be to apps\napiVersion: networking.k8s.io/v1\nkind: NetworkPolicy\nmetadata:\n  name: deny-egress-n"
  },
  {
    "path": "charts/altinn-loadbalancer/templates/podmonitor.yaml",
    "chars": 401,
    "preview": "apiVersion: monitoring.coreos.com/v1\nkind: PodMonitor\nmetadata:\n  name: altinn-loadbalancer-podmonitor\n  namespace: defa"
  },
  {
    "path": "charts/altinn-loadbalancer/templates/service.yaml",
    "chars": 628,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: altinn-loadbalancer\n  labels:\n    run: altinn-loablanacer\nspec:\n  ports:\n"
  },
  {
    "path": "charts/altinn-loadbalancer/values.yaml",
    "chars": 1917,
    "preview": "replicaCount: 1\n\nenvironment: development\n\nimage:\n  repository: altinntjenestercontainerregistry.azurecr.io/altinn-loadb"
  },
  {
    "path": "charts/altinn-loadbalancer-config/Chart.yaml",
    "chars": 1155,
    "preview": "apiVersion: v2\nname: altinn-loadbalancer\ndescription: A Helm chart for Kubernetes\n\n# A chart can be either an 'applicati"
  },
  {
    "path": "charts/altinn-loadbalancer-config/templates/helm-release.yaml",
    "chars": 600,
    "preview": "---\napiVersion: helm.toolkit.fluxcd.io/v2beta1\nkind: HelmRelease\nmetadata:\n  name: altinn-loadbalancer\n  namespace: defa"
  },
  {
    "path": "charts/altinn-loadbalancer-config/values.yaml",
    "chars": 50,
    "preview": "chartVersion: \"\"\nimageTag: \"\"\nenvironmentName: \"\"\n"
  },
  {
    "path": "charts/altinn-repositories/.helmignore",
    "chars": 342,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/altinn-repositories/Chart.yaml",
    "chars": 150,
    "preview": "apiVersion: v1\nname: altinn-repositories\ndescription: A Helm chart for Kubernetes\nversion: 0.2.0\nsources:\n  - https://gi"
  },
  {
    "path": "charts/altinn-repositories/templates/NOTES.txt",
    "chars": 180,
    "preview": "{{ .Chart.Name }} is installed\nThe release is named {{ .Release.Name }}\n\nTo learn more about the release, try:\n  $ helm "
  },
  {
    "path": "charts/altinn-repositories/templates/_helpers.tpl",
    "chars": 1081,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"altinn-repositories.name\" -}}\n"
  },
  {
    "path": "charts/altinn-repositories/templates/deployment.yaml",
    "chars": 3225,
    "preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: altinn-gitea\n  labels:\n    release: altinn-gitea\nspec:\n  selector"
  },
  {
    "path": "charts/altinn-repositories/templates/ingress.yaml",
    "chars": 879,
    "preview": "{{- $servicePort := .Values.proxy.service.publicPort }}\n{{- $host := .Values.host }}\n{{- range $ingress := .Values.ingre"
  },
  {
    "path": "charts/altinn-repositories/templates/networkpolicy.yaml",
    "chars": 863,
    "preview": "# Gitea is only reachable from the gitea-proxy pods\napiVersion: networking.k8s.io/v1\nkind: NetworkPolicy\nmetadata:\n  nam"
  },
  {
    "path": "charts/altinn-repositories/templates/proxy-deployment.yaml",
    "chars": 1591,
    "preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: altinn-repositories\n  labels:\n    release: altinn-repositories\nsp"
  },
  {
    "path": "charts/altinn-repositories/templates/proxy-service.yaml",
    "chars": 521,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: altinn-repositories\n  labels:\n    run: altinn-repositories\nspec:\n  ports:"
  },
  {
    "path": "charts/altinn-repositories/templates/service.yaml",
    "chars": 260,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: altinn-gitea\n  labels:\n    run: altinn-gitea\nspec:\n  ports:\n    - port: {"
  },
  {
    "path": "charts/altinn-repositories/templates/tests/test-connection.yaml",
    "chars": 557,
    "preview": "apiVersion: v1\nkind: Pod\nmetadata:\n  name: altinn-repositories-test-connection\n  labels:\n    app.kubernetes.io/name: {{ "
  },
  {
    "path": "charts/altinn-repositories/values.yaml",
    "chars": 6052,
    "preview": "replicaCount: 1\n\nenvironment: development\nimage:\n  repository: altinntjenestercontainerregistry.azurecr.io/altinn-reposi"
  },
  {
    "path": "charts/altinn-repositories-config/Chart.yaml",
    "chars": 1151,
    "preview": "apiVersion: v2\nname: altinn-designer\ndescription: A Helm chart for Kubernetes\n\n# A chart can be either an 'application' "
  },
  {
    "path": "charts/altinn-repositories-config/templates/helm-release.yaml",
    "chars": 662,
    "preview": "---\napiVersion: helm.toolkit.fluxcd.io/v2beta1\nkind: HelmRelease\nmetadata:\n  name: altinn-repositories\n  namespace: defa"
  },
  {
    "path": "charts/altinn-repositories-config/values.yaml",
    "chars": 50,
    "preview": "chartVersion: \"\"\nimageTag: \"\"\nenvironmentName: \"\"\n"
  },
  {
    "path": "charts/gitea-org-runner/.helmignore",
    "chars": 349,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/gitea-org-runner/Chart.yaml",
    "chars": 1152,
    "preview": "apiVersion: v2\nname: gitea-org-runner\ndescription: A Helm chart for Kubernetes\n\n# A chart can be either an 'application'"
  },
  {
    "path": "charts/gitea-org-runner/templates/_helpers.tpl",
    "chars": 1872,
    "preview": "{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"gitea-org-runner.name\" -}}\n{{- default .Chart.Name .Values.nameOverr"
  },
  {
    "path": "charts/gitea-org-runner/templates/deployment.yaml",
    "chars": 5437,
    "preview": "{{- range .Values.runners }}\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"gitea-org-runner.ful"
  },
  {
    "path": "charts/gitea-org-runner/values.yaml",
    "chars": 4960,
    "preview": "# Default values for gitea-org-runner.\n# This is a YAML-formatted file.\n# Declare variables to be passed into your templ"
  },
  {
    "path": "charts/gitea-org-runner-config/Chart.yaml",
    "chars": 1152,
    "preview": "apiVersion: v2\nname: gitea-org-runner\ndescription: A Helm chart for Kubernetes\n\n# A chart can be either an 'application'"
  },
  {
    "path": "charts/gitea-org-runner-config/templates/helm-release.yaml",
    "chars": 1791,
    "preview": "---\napiVersion: helm.toolkit.fluxcd.io/v2beta1\nkind: HelmRelease\nmetadata:\n  name: {{ .Values.releaseName }}\n  namespace"
  },
  {
    "path": "charts/gitea-org-runner-config/values.yaml",
    "chars": 1514,
    "preview": "chartVersion: \"\"\nreleaseName: \"\"\nimageTag: \"\"\ngiteaInstanceUrl: \"http://altinn-repositories-public.default.svc.cluster.l"
  },
  {
    "path": "codecov.yml",
    "chars": 37,
    "preview": "coverage:\n  status:\n    project: off\n"
  },
  {
    "path": "docs/adr/2024-09-25-signing-configuration.md",
    "chars": 5034,
    "preview": "# Configuration of a signing task - Task and interface coupling\n\n- Status: Accepted\n- Deciders: Team Apps\n- Date: 25.09."
  },
  {
    "path": "docs/adr/2024-09-25-signing-interface.md",
    "chars": 1563,
    "preview": "# Internal handling of the signing interface\n\n- Status: Accepted\n- Deciders: Johannes Haukland, Bjørn Tore on behalf of "
  },
  {
    "path": "docs/adr/2024-10-02-signing-transaction-handling.md",
    "chars": 2023,
    "preview": "# How we handle transactions for signing\n\n- Status: Accepted\n- Deciders: Johannes Haukland, Bjørn Tore on behalf of Team"
  },
  {
    "path": "docs/adr/2024-10-17-app-component-library.md",
    "chars": 3164,
    "preview": "# Introduce component library\n\n- Status: Accepted\n- Deciders: Team\n- Date: 17.10.2024\n\n## Result\n\nA1: Component library "
  }
]

// ... and 16489 more files (download for full content)

About this extraction

This page contains the full source code of the Altinn/altinn-studio GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 16689 files (59.0 MB), approximately 16.7M tokens, and a symbol index with 45147 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!